flutter_flutter/engine/src/flutter/flutter_frontend_server
Alexander Aprelev 80efe6e5c9 Roll dart to 2.15.0-18.0.dev (flutter/engine#28107)
* Roll dart to 2.15.0-18.0.dev

Changes since last roll:
```
d39206fb4e2 (tag: 2.15.0-18.0.dev) Version 2.15.0-18.0.dev
6e28f8bb404 [vm] Avoid reserved register error on newer compilers
d2bd43f43e6 [python3] Migrate PRESUBMIT.py files
79be5898b46 [co19] LibTests/typed_data tests skipped for dart2js
af6f6cf9826 (tag: 2.15.0-17.0.dev) Version 2.15.0-17.0.dev
f0f94705a49 In ScopeResolverVisitor, don't visit identifiers to the right of `.`.
6274633ea1b Merge ScopedVisitor with ScopeResolverVisitor classes.
80ec62a3fd2 (tag: 2.15.0-16.0.dev) Version 2.15.0-16.0.dev
fc4d4144fb0 (origin/base) Added js_util import to html_dart2js
d2855e703e2 [ CLI ] Default to printing CLI usage message instead of VM usage
af2ec43d447 [vm/compiler] Fix incorrect assertion in LoadOptimizer
3365b77ac2d use code from package:devtools_shared
16ff4aec0ea Revert "[vm] Hide internal implementation List types and expose them as List"
6465ee4ad8a analyze pkg/nnbd_migration on the bots
cd6fb671034 [vm] Clean up changes around internal-only class ids.
7ac9c46977b [dart2js_info] Fix tests after migration.
1f405bf163c [VM/Runtime] Added a Dart VM initialization state to prevent racy access              to VM state from Dart API calls.
824bec596f5 [vm] Hide internal implementation List types and expose them as List
```
2021-08-16 11:29:42 -07:00
..

Frontend Server

Frontend server is simple wrapper around Dart Frontend. It is a Dart application that compiles Dart source into Dart Kernel binary (.dill-file). Documentation on Dart Kernel (semantic, binary format, etc) can be found here: https://github.com/dart-lang/sdk/wiki/Kernel-Documentation.

Frontend server runs in two modes:

  • immediate mode, where Dart source file name is provided as command line argument;
  • interactive mode, where communication is happening over stdin/stdout.

Interactive mode instructions

Compile/Recompile

compile <input.dart>

Compiles <input.dart> Dart source file with Dart Frontend. Replies with result response.

recompile <boundary-key>
<path/to/updated/file1.dart>
<path/to/updated/file2.dart>
...
<boundary-key>

Incrementally recompiles Dart program previously compiled in current session, taking into account changes in the listed files. Replies with result response.

Relative paths should be relative to current working directory for the shell that launched Frontend Server.

Accept/Reject

accept

Accepts results of incremental compilation, so that on next recompilation request Dart Frontend will not include these recompiled files.

reject

Rejects results of incremental compilation, so that on next recompilation request Dart Frontend will include compilation results from previously rejected recompilation in addition to what it will recompile based on newly changed files. Small technical detail is that Dart Frontend will not recompile files from previously rejected recompilation attempts (unless they were changed since then), it will just include appropriate kernel binaries it kept around from those previously rejected compilation requests.

One use of accept and reject instructions is in the context of Dart VM hot-reload. Dart VM can reject user-provided incremental change to what is currently running. It could happen for variety of Dart VM internal reasons. For example, if incremental update changes some class to enum, such update can not be hot-reloaded by VM at this point, will be rejected.

Quit

quit

Stops the server.

Response from the server

result <boundary-key>
<compiler output>
<boundary-key> [<output.dill>]

Response from the Dart Frontend compiler is bracketed by <boundary-key> tags. If the compiler was able to produce a Dart Kernel file, the name of this file <output.dill> is provided too. If the compiler encountered unrecoverable errors, there will be no output file name provided.