6127d6cb8f
Previously, code in a closure was compiled with the assumption that invocations known to be statically sound didn't need any runtime checks to guaranty soundness. Now, if the code is retained from an earlier compile and executed after a hot reload, any assumptions regarding soundness may be invalid. This change transforms what was an invocation expression into a larger expression that performs additional checks (similar to a dynamic call). All checks are skipped if the compile generation matches the current hot reload generation at runtime. The soundness checks are handled by a new runtime helper method `hotReloadCorrectnessChecks`. Any argument expressions are hoisted into let variables to preserve their evaluation order and to ensure they are only evaluated once. The helper checks for the existence of the invocation target, the shape of the method signature, and runtime type of the passed arguments. Mismatches result in an invocation of `NoSuchMethod`. Any returned value is cast to the expected static type of the original invocation. Change-Id: If925f1a9b475d5ac581b2526403ab7c95753ffef Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/421640 Reviewed-by: Jens Johansen <jensj@google.com> Reviewed-by: Nate Biggs <natebiggs@google.com> Reviewed-by: Mark Zhou <markzipan@google.com> Commit-Queue: Nicholas Shahan <nshahan@google.com>
The frontend_server package is used by both the flutter command line tool and the frontend_server_client package (used by webdev and package:test).
API Stability
Changes to the command line API or behavior should be tested against the following test suites (in addition to normal HHH testing):
- flutter_tools: https://github.com/flutter/flutter/tree/master/packages/flutter_tools
- frontend_server_client: https://github.com/dart-lang/webdev/tree/master/frontend_server_client
Otherwise these changes will need to be carefully coordinated with the flutter tooling and frontend_server_client teams.
This API stability does not cover any of the source code APIs.
Stable subset
- The frontend_server kernel compilation and expression evaluation for kernel should be considered "stable".
- The frontend_server JavaScript compilation is semi-stable, but clients should anticipate coordinated breaking changes in the future.
- The frontend_server JavaScript expression evaluation is experimental and is expected to change significantly from Dec 2020 through the end of 2021.
- Specific flags may be added for experimentation and should not be considered stable.