Index: pkg/dart2js_incremental/lib/compiler.dart |
diff --git a/pkg/dart2js_incremental/lib/compiler.dart b/pkg/dart2js_incremental/lib/compiler.dart |
deleted file mode 100644 |
index f0a195e689361ea7bfbdaf7c1d7bc066d6843e3f..0000000000000000000000000000000000000000 |
--- a/pkg/dart2js_incremental/lib/compiler.dart |
+++ /dev/null |
@@ -1,211 +0,0 @@ |
-// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
-import 'dart:io'; |
- |
-import 'dart:async' show |
- EventSink, |
- Future, |
- Stream, |
- StreamController, |
- StreamSubscription; |
- |
-import 'package:dart2js_incremental/dart2js_incremental.dart' show |
- IncrementalCompilationFailed, |
- IncrementalCompiler; |
- |
-import 'package:compiler/compiler_new.dart' show |
- CompilerOutput; |
- |
-import 'package:compiler/src/old_to_new_api.dart' show |
- LegacyCompilerDiagnostics, |
- LegacyCompilerInput; |
- |
-import 'package:compiler/src/source_file_provider.dart' show |
- FormattingDiagnosticHandler; |
- |
-import 'watcher.dart'; |
- |
-main(List<String> arguments) { |
- int updateCount = 0; |
- StreamSubscription<CompilerEvent> subscription = |
- compile(Uri.base.resolve(arguments.first)).listen(null); |
- subscription.onData((CompilerEvent event) { |
- switch (event.kind) { |
- case IncrementalKind.FULL: |
- updateCount = 0; |
- print('// Compiled JavaScript:'); |
- print(event['.js']); |
- break; |
- |
- case IncrementalKind.INCREMENTAL: |
- Stopwatch sw = event.stopwatch..start(); |
- String updates = '${event.compiler.allUpdates()}'; |
- sw.stop(); |
- |
- print('// Patch after ${++updateCount} updates,'); |
- print('// computed in ${sw.elapsedMicroseconds/1000000} seconds:'); |
- print(updates); |
- break; |
- |
- case IncrementalKind.ERROR: |
- updateCount = 0; |
- print("Compilation failed"); |
- break; |
- |
- default: |
- throw "Unknown kind: ${event.kind}"; |
- } |
- }); |
- subscription.onError((error, StackTrace trace) { |
- if (error is IncrementalCompilationFailed) { |
- print("Incremental compilation failed due to:\n${error.reason}"); |
- } else { |
- throw error; |
- } |
- }); |
-} |
- |
-Stream<CompilerEvent> compile(Uri originalInput) { |
- StreamController<CompilerEvent> controller = |
- new StreamController<CompilerEvent>(); |
- compileToStream(originalInput, controller); |
- return controller.stream; |
-} |
- |
-compileToStream( |
- Uri originalInput, |
- StreamController<CompilerEvent> controller) async { |
- var watcher = new Watcher(); |
- |
- Uri libraryRoot = Uri.base.resolve('sdk/'); |
- Uri packageRoot = Uri.base.resolve('packages/'); |
- |
- FormattingDiagnosticHandler diagnosticHandler = |
- new FormattingDiagnosticHandler(); |
- |
- OutputProvider outputProvider = new OutputProvider(); |
- |
- void resilientDiagnosticHandler( |
- Uri uri, int begin, int end, String message, kind) { |
- try { |
- diagnosticHandler(uri, begin, end, message, kind); |
- } catch (e) { |
- String name = diagnosticHandler.provider.relativizeUri(uri); |
- print('$name@$begin+${end - begin}: [$kind] $message}'); |
- } |
- } |
- |
- Future inputProvider(Uri uri) { |
- if (uri.scheme == "file") { |
- if (!'$uri'.startsWith('$libraryRoot')) { |
- watcher.watchFile(uri); |
- } |
- } |
- return diagnosticHandler.provider(uri); |
- } |
- |
- while (true) { |
- Stopwatch sw = new Stopwatch()..start(); |
- IncrementalCompiler compiler = new IncrementalCompiler( |
- libraryRoot: libraryRoot, |
- packageRoot: packageRoot, |
- inputProvider: new LegacyCompilerInput(inputProvider), |
- diagnosticHandler: |
- new LegacyCompilerDiagnostics(resilientDiagnosticHandler), |
- outputProvider: outputProvider); |
- |
- bool success = await compiler.compile(originalInput); |
- sw.stop(); |
- if (success) { |
- controller.add( |
- new CompilerEvent( |
- IncrementalKind.FULL, compiler, outputProvider.output, sw)); |
- } else { |
- controller.add( |
- new CompilerEvent( |
- IncrementalKind.ERROR, compiler, outputProvider.output, sw)); |
- } |
- |
- while (await watcher.hasChanges()) { |
- try { |
- Map<Uri, Uri> changes = watcher.readChanges(); |
- |
- sw = new Stopwatch()..start(); |
- String updates = await compiler.compileUpdates(changes); |
- sw.stop(); |
- |
- controller.add( |
- new CompilerEvent( |
- IncrementalKind.INCREMENTAL, compiler, outputProvider.output, |
- sw, updates: updates)); |
- |
- } on IncrementalCompilationFailed catch (error, trace) { |
- controller.addError(error, trace); |
- break; |
- } |
- } |
- } |
-} |
- |
-/// Output provider which collects output in [output]. |
-class OutputProvider implements CompilerOutput { |
- final Map<String, String> output = new Map<String, String>(); |
- |
- EventSink<String> createEventSink(String name, String extension) { |
- return new StringEventSink((String data) { |
- output['$name.$extension'] = data; |
- }); |
- } |
- |
- String operator[](String key) => output[key]; |
-} |
- |
-/// Helper class to collect sources. |
-class StringEventSink implements EventSink<String> { |
- List<String> data = <String>[]; |
- |
- final Function onClose; |
- |
- StringEventSink(this.onClose); |
- |
- void add(String event) { |
- if (data == null) throw 'StringEventSink is closed.'; |
- data.add(event); |
- } |
- |
- void addError(errorEvent, [StackTrace stackTrace]) { |
- throw 'addError($errorEvent, $stackTrace)'; |
- } |
- |
- void close() { |
- if (data != null) { |
- onClose(data.join()); |
- data = null; |
- } |
- } |
-} |
- |
-enum IncrementalKind { |
- FULL, |
- INCREMENTAL, |
- ERROR, |
-} |
- |
-class CompilerEvent { |
- final IncrementalKind kind; |
- |
- final IncrementalCompiler compiler; |
- |
- final Map<String, String> _output; |
- |
- final Stopwatch stopwatch; |
- |
- final String updates; |
- |
- CompilerEvent( |
- this.kind, this.compiler, this._output, this.stopwatch, {this.updates}); |
- |
- String operator[](String key) => _output[key]; |
-} |