The VM patch files contain many annotations that guide the TFA and the VM compilation pipeline. Most of these are not relevant to dart2wasm, and having the TFA look at these when running inside dart2wasm leads to sub-optimal, and sometimes even unsound, results. In order to enable sharing of patch files between the VM and dart2wasm, the annotation parser is given a target flag to control which annotations it should recognize and how to parse them. The annotation parser thus becomes an abstraction layer between the concrete annotations in the patch files and the parsed annotations that the TFA sees. Additionally, external members used by dart2wasm don't always have external names. To support this, the signature shaker must skip all external members, not just the ones with an external name. This makes no difference for the VM, since all of its external members either have an external name or are implemented in a patch file, making them no longer external. TEST=ci + upcoming dart2wasm CL Change-Id: Id425dd1ccc5560721034ae83c8cdc1593801a4e5 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/231102 Reviewed-by: Alexander Markov <alexmarkov@google.com> Commit-Queue: Aske Simon Christensen <askesc@google.com>
Dart Kernel
Dart Kernel is a small high-level language derived from Dart. It is designed for use as an intermediate format for whole-program analysis and transformations, and to be consumed by codegen and execution backends.
The kernel language has an in-memory representation in Dart and can be serialized as binary or text.
Both the kernel language and its implementations are unstable and are under development.
This package contains the Dart part of the implementation and contains:
- A transformable IR for the kernel language
- Serialization of kernel code
Note: The APIs in this package are in an early state; developers should be careful about depending on this package. In particular, there is no semver contract for release versions of this package. Please depend directly on individual versions.
See ast.dart for the in-memory IR, or binary.md for a description of the binary format. For now, the textual format is very ad-hoc and cannot be parsed back in.