tree: cef837b1865a92787c7fcab033c5b1ef56c43468 [path history] [tgz]
  1. builder/
  2. dill/
  3. kernel/
  4. source/
  5. type_inference/
  6. util/
  7. builder_graph.dart
  8. combinator.dart
  9. command_line_reporting.dart
  10. compiler_context.dart
  11. configuration.dart
  12. constant_context.dart
  13. crash.dart
  14. denylisted_classes.dart
  15. diagnostics.md
  16. export.dart
  17. fasta_codes.dart
  18. fasta_codes_cfe_generated.dart
  19. get_dependencies.dart
  20. hybrid_file_system.dart
  21. identifiers.dart
  22. ignored_parser_errors.dart
  23. import.dart
  24. incremental_compiler.dart
  25. incremental_serializer.dart
  26. library_graph.dart
  27. loader.dart
  28. messages.dart
  29. modifier.dart
  30. names.dart
  31. operator.dart
  32. problems.dart
  33. README.md
  34. resolve_input_uri.dart
  35. rewrite_severity.dart
  36. scope.dart
  37. target.dart
  38. target_implementation.dart
  39. TESTING.md
  40. ticker.dart
  41. uri_translator.dart
pkg/front_end/lib/src/fasta/README.md

Fasta -- Fully-resolved AST, Accelerated.

Fasta is a compiler framework for compiling Dart sources to Kernel IR. When Fasta works well, you won‘t even know you’re using it, as it will be transparently integrated in tools like dart, dartanalyzer, dart2js, etc.

Hopefully, you'll notice that Fasta-based tools are fast, with good error messages. If not, please let us know.

Fasta sounds like faster, and that's a promise we intend to keep.

Getting Started

  1. Build the VM and patched SDK. Note: you only need to build the targets runtime_kernel, and dart_precompiled_runtime, so you only need to run this command:
./tools/build.py --mode release --arch x64 runtime_kernel dart_precompiled_runtime

Create an Outline File

  1. Run ./pkg/front_end/tool/fasta outline pkg/compiler/lib/src/dart2js.dart

  2. Optionally, run ./pkg/front_end/tool/fasta dump-ir pkg/kernel/bin/dump.dart pkg/compiler/lib/src/dart2js.dart.dill to view the generated outline.

This will generate a file named pkg/compiler/lib/src/dart2js.dart.dill which contains a serialized representation of the input program excluding method bodies. This is similar to an analyzer summary.

Compiling a Program

./pkg/front_end/tool/fasta compile pkg/front_end/test/fasta/hello.dart

This will generate pkg/front_end/test/fasta/hello.dart.dill which can be run this way:

./sdk/bin/dart pkg/front_end/test/fasta/hello.dart.dill

Using dartk and the Analyzer AST

./pkg/front_end/tool/fasta analyzer-compile pkg/front_end/test/fasta/hello.dart

This will generate pkg/front_end/test/fasta/hello.dart.dill which can be run this way:

./sdk/bin/dart pkg/front_end/test/fasta/hello.dart.dill

Running Tests

See How to test Fasta

Running dart2js

./pkg/front_end/tool/fasta compile pkg/compiler/lib/src/dart2js.dart
./sdk/bin/dart pkg/compiler/lib/src/dart2js.dart.dill pkg/front_end/test/fasta/hello.dart

The output of dart2js will be out.js, and it can be run on any Javascript engine, for example, d8 which is included with the Dart SDK sources:

./third_party/d8/<OS>/d8 out.js

Where <OS> is one of linux, macos, or windows.