This change adds support for allowing for imports of unsupported platform-specific libraries when the `--include-unsupported-platform-library-stubs` flag is provided to the CFE. This flag sets the `includeUnsupportedPlatformLibraryStubs` property in `TargetFlags`, which `Target`s can use to conditionally return different `DartLibrarySupport` objects with different supported/unsupported library sets. A `checkForUnsupportedDartColonImports` function has been added to `Target` that uses the value of `dartLibrarySupport` to determine if there's any unsupported library imports. This function is called after the various transformation operations provided by the `Target` implementation, meaning the import of an unsupported library specified in `dartLibrarySupport` will now result in a compilation error (this includes `dart:mirrors` imports for VM targets when mirrors are disabled, which was previously handled by the VM itself). Related to https://github.com/dart-lang/sdk/issues/62125 TEST=Tests added / modified Change-Id: Ife819b2e1a6d28f67d80aab6701cd23a1724aa4d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/465760 Reviewed-by: Nicholas Shahan <nshahan@google.com> Reviewed-by: Johnni Winther <johnniwinther@google.com> Commit-Queue: Ben Konyi <bkonyi@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.