[roll] Roll fuchsia [fidl][fidlc] Formalize constraint handling

Each Type subclass now subclasses Constraint<Kinds...> where Kinds is a
list of ConstraintKind values. In each of these types'
ApplyConstraints() method they can simply call
ResolveAndMergeConstraints() to take the constraint params supplied to
the type constructor, resolve them against the kinds, populate the
LayoutInvocation and merge the resolved constraint values with the
current values on the Type instance.

Then that's passed to the Type's constructor (which now takes the
appropriate Constraint<...> type rather than individual arguments for
constraints) to create a newly constrained Type object.

Internally Constraints<...> has ConstraintStorage<Kind> types that
provide storage for constraint values and implement the code to resolve
Constant nodes from the AST into constraint values. Those are wrapped by
Constraint<Kind> types that provide shared logic on top of the
ConstraintStorage<Kind> policy.

It's possible to customize the error reporting around unexpected
constraints by overriding ConstraintStorage<Kind>::ReportMergeFailure()
and Constraints<Kinds...>::OnUnexpectedConstraint(). Additional
validation can also be implemented in the Type's ApplyConstraints()
between resolving constraints and creating the new Type instance.

Original-Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/776763
Original-Revision: dd5c5c0ce3d2999c09795cc3aefea9d819b7ad56
GitOrigin-RevId: e669b48a4cb8134dd6b45ca0e4f9b1bdc0053032
Change-Id: Ib11eb4272c4416480735678248dc06ba24254b7d
1 file changed
tree: e036d301248d1e2b9580eec682e7035efc44e7d7
  1. git-hooks/
  2. infra/
  3. third_party/
  4. cts
  5. firmware
  6. flower
  7. jiri.lock
  8. minimal
  9. prebuilts
  10. README.md
  11. stem
  12. test_durations
  13. toolchain
README.md

Integration

This repository contains Fuchsia's Global Integration manifest files.

Making changes

All changes should be made to the internal version of this repository. Our infrastructure automatically updates this version when the internal one changes.

Currently all changes must be made by a Google employee. Non-Google employees wishing to make a change can ask for assistance via the IRC channel #fuchsia on Freenode.

Obtaining the source

First install Jiri.

Next run:

$ jiri init
$ jiri import minimal https://fuchsia.googlesource.com/integration
$ jiri update

Third party

Third party projects should have their own subdirectory in ./third_party.