[fidlc] Restructure type compilation

This CL adds a flat::TypeConstructorNew node that mirrors the
more general form that exists in the new syntax (i.e. a general
layout with parameters and constraints), and then introduces
a top level flat::TypeConstructor that contains either a
TypeConstructorNew or a TypeConstructorOld. All code is updated
to handle either kind of type constructor.

In order to properly support type aliases in the more general form,
compilation is changed so that Types are responsible for applying
constraints.

Fixed: 75122
Bug: 75112
Bug: 74193
Test: fx ninja -C out/default host_x64/fidl-compiler &&
./out/default/host_x64-asan/exe.unstripped/fidl-compiler
Test: fx test --host fidlc_golden_tests

Change-Id: I9ecce21e17732bef85afe9f3df2bb19fed7f977b
Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/516460
Commit-Queue: Felix Zhu <fcz@google.com>
Reviewed-by: Pascal-Louis Perez <pascallouis@google.com>
Reviewed-by: Alex Zaslavsky <azaslavsky@google.com>
26 files changed
tree: c114a132aa484a9d4e873fcb08d6c7a52251198e
  1. boards/
  2. build/
  3. buildtools/
  4. bundles/
  5. docs/
  6. examples/
  7. garnet/
  8. products/
  9. scripts/
  10. sdk/
  11. src/
  12. third_party/
  13. tools/
  14. zircon/
  15. .clang-format
  16. .clang-tidy
  17. .git-blame-ignore-revs
  18. .gitattributes
  19. .gitignore
  20. .gn
  21. .style.yapf
  22. AUTHORS
  23. BUILD.gn
  24. CODE_OF_CONDUCT.md
  25. CONTRIBUTING.md
  26. LICENSE
  27. OWNERS
  28. PATENTS
  29. README.md
  30. rustfmt.toml
README.md

Fuchsia

Pink + Purple == Fuchsia (a new operating system)

What is Fuchsia?

Fuchsia is a modular, capability-based operating system. Fuchsia runs on modern 64-bit Intel and ARM processors.

Fuchsia is an open source project with a code of conduct that we expect everyone who interacts with the project to respect.

Read more about Fuchsia's principles.

How can I build and run Fuchsia?

See Getting Started.

Where can I learn more about Fuchsia?

See fuchsia.dev.