diff --git a/pkg/dart2wasm/lib/compile.dart b/pkg/dart2wasm/lib/compile.dart index b4a2cfb53bf..c835c7949ca 100644 --- a/pkg/dart2wasm/lib/compile.dart +++ b/pkg/dart2wasm/lib/compile.dart @@ -37,6 +37,7 @@ import 'package:wasm_builder/wasm_builder.dart' show Serializer; import 'compiler_options.dart' as compiler; import 'constant_evaluator.dart'; import 'deferred_loading.dart'; +import 'dry_run.dart'; import 'dynamic_module_kernel_metadata.dart'; import 'dynamic_modules.dart'; import 'js/runtime_generator.dart' as js; @@ -49,6 +50,12 @@ import 'translator.dart'; sealed class CompilationResult {} +abstract class CompilationDryRunResult extends CompilationResult {} + +class CompilationDryRunError extends CompilationDryRunResult {} + +class CompilationDryRunSuccess extends CompilationDryRunResult {} + class CompilationSuccess extends CompilationResult { final Map wasmModules; final String jsRuntime; @@ -79,7 +86,9 @@ class CFECrashError extends CompilationError { /// (We print them as soon as they are reported by CFE. i.e. we stream errors /// instead of accumulating/batching all of them and reporting at the end.) class CFECompileTimeErrors extends CompilationError { - CFECompileTimeErrors(); + final Component? component; + + CFECompileTimeErrors(this.component); } const List _librariesToIndex = [ @@ -199,7 +208,18 @@ Future compileToModule( } catch (e, s) { return CFECrashError(e, s); } - if (hadCompileTimeError) return CFECompileTimeErrors(); + if (options.dryRun) { + final component = compilerResult?.component; + if (component == null) { + return CompilationDryRunError(); + } + final summarizer = DryRunSummarizer(component); + final hasErrors = summarizer.summarize(); + return hasErrors ? CompilationDryRunError() : CompilationDryRunSuccess(); + } + if (hadCompileTimeError) { + return CFECompileTimeErrors(compilerResult?.component); + } assert(compilerResult != null); Component component = compilerResult!.component!; diff --git a/pkg/dart2wasm/lib/compiler_options.dart b/pkg/dart2wasm/lib/compiler_options.dart index 6d120e7ab7b..47cfd42f27e 100644 --- a/pkg/dart2wasm/lib/compiler_options.dart +++ b/pkg/dart2wasm/lib/compiler_options.dart @@ -29,6 +29,7 @@ class WasmCompilerOptions { String? dumpKernelAfterCfe; String? dumpKernelBeforeTfa; String? dumpKernelAfterTfa; + bool dryRun = false; factory WasmCompilerOptions.defaultOptions() => WasmCompilerOptions(mainUri: Uri(), outputFile: ''); diff --git a/pkg/dart2wasm/lib/dart2wasm.dart b/pkg/dart2wasm/lib/dart2wasm.dart index 55a56bbeaff..dab5155258c 100644 --- a/pkg/dart2wasm/lib/dart2wasm.dart +++ b/pkg/dart2wasm/lib/dart2wasm.dart @@ -26,6 +26,7 @@ final List