| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library dart2js_incremental; | 5 library dart2js_incremental; |
| 6 | 6 |
| 7 import 'dart:async' show | 7 import 'dart:async' show |
| 8 EventSink, | 8 EventSink, |
| 9 Future; | 9 Future; |
| 10 | 10 |
| 11 import 'dart:developer' show | 11 import 'dart:developer' show |
| 12 UserTag; | 12 UserTag; |
| 13 | 13 |
| 14 import 'package:compiler/src/apiimpl.dart' show | 14 import 'package:compiler/src/apiimpl.dart' show |
| 15 Compiler; | 15 CompilerImpl; |
| 16 | 16 |
| 17 import 'package:compiler/compiler_new.dart' show | 17 import 'package:compiler/compiler_new.dart' show |
| 18 CompilerDiagnostics, | 18 CompilerDiagnostics, |
| 19 CompilerInput, | 19 CompilerInput, |
| 20 CompilerOutput, | 20 CompilerOutput, |
| 21 Diagnostic; | 21 Diagnostic; |
| 22 | 22 |
| 23 import 'package:compiler/src/null_compiler_output.dart' show | 23 import 'package:compiler/src/null_compiler_output.dart' show |
| 24 NullCompilerOutput; | 24 NullCompilerOutput; |
| 25 | 25 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 52 final Uri libraryRoot; | 52 final Uri libraryRoot; |
| 53 final Uri packageRoot; | 53 final Uri packageRoot; |
| 54 final CompilerInput inputProvider; | 54 final CompilerInput inputProvider; |
| 55 final CompilerDiagnostics diagnosticHandler; | 55 final CompilerDiagnostics diagnosticHandler; |
| 56 final List<String> options; | 56 final List<String> options; |
| 57 final CompilerOutput outputProvider; | 57 final CompilerOutput outputProvider; |
| 58 final Map<String, dynamic> environment; | 58 final Map<String, dynamic> environment; |
| 59 final List<String> _updates = <String>[]; | 59 final List<String> _updates = <String>[]; |
| 60 final IncrementalCompilerContext _context = new IncrementalCompilerContext(); | 60 final IncrementalCompilerContext _context = new IncrementalCompilerContext(); |
| 61 | 61 |
| 62 Compiler _compiler; | 62 CompilerImpl _compiler; |
| 63 | 63 |
| 64 IncrementalCompiler({ | 64 IncrementalCompiler({ |
| 65 this.libraryRoot, | 65 this.libraryRoot, |
| 66 this.packageRoot, | 66 this.packageRoot, |
| 67 this.inputProvider, | 67 this.inputProvider, |
| 68 this.diagnosticHandler, | 68 this.diagnosticHandler, |
| 69 this.options, | 69 this.options, |
| 70 this.outputProvider, | 70 this.outputProvider, |
| 71 this.environment}) { | 71 this.environment}) { |
| 72 if (libraryRoot == null) { | 72 if (libraryRoot == null) { |
| 73 throw new ArgumentError('libraryRoot is null.'); | 73 throw new ArgumentError('libraryRoot is null.'); |
| 74 } | 74 } |
| 75 if (inputProvider == null) { | 75 if (inputProvider == null) { |
| 76 throw new ArgumentError('inputProvider is null.'); | 76 throw new ArgumentError('inputProvider is null.'); |
| 77 } | 77 } |
| 78 if (outputProvider == null) { | 78 if (outputProvider == null) { |
| 79 throw new ArgumentError('outputProvider is null.'); | 79 throw new ArgumentError('outputProvider is null.'); |
| 80 } | 80 } |
| 81 if (diagnosticHandler == null) { | 81 if (diagnosticHandler == null) { |
| 82 throw new ArgumentError('diagnosticHandler is null.'); | 82 throw new ArgumentError('diagnosticHandler is null.'); |
| 83 } | 83 } |
| 84 _context.incrementalCompiler = this; | 84 _context.incrementalCompiler = this; |
| 85 } | 85 } |
| 86 | 86 |
| 87 LibraryElement get mainApp => _compiler.mainApp; | 87 LibraryElement get mainApp => _compiler.mainApp; |
| 88 | 88 |
| 89 Compiler get compiler => _compiler; | 89 CompilerImpl get compiler => _compiler; |
| 90 | 90 |
| 91 Future<bool> compile(Uri script) { | 91 Future<bool> compile(Uri script) { |
| 92 return _reuseCompiler(null).then((Compiler compiler) { | 92 return _reuseCompiler(null).then((CompilerImpl compiler) { |
| 93 _compiler = compiler; | 93 _compiler = compiler; |
| 94 return compiler.run(script); | 94 return compiler.run(script); |
| 95 }); | 95 }); |
| 96 } | 96 } |
| 97 | 97 |
| 98 Future<Compiler> _reuseCompiler( | 98 Future<CompilerImpl> _reuseCompiler( |
| 99 Future<bool> reuseLibrary(LibraryElement library)) { | 99 Future<bool> reuseLibrary(LibraryElement library)) { |
| 100 List<String> options = this.options == null | 100 List<String> options = this.options == null |
| 101 ? <String> [] : new List<String>.from(this.options); | 101 ? <String> [] : new List<String>.from(this.options); |
| 102 options.addAll(INCREMENTAL_OPTIONS); | 102 options.addAll(INCREMENTAL_OPTIONS); |
| 103 return reuseCompiler( | 103 return reuseCompiler( |
| 104 cachedCompiler: _compiler, | 104 cachedCompiler: _compiler, |
| 105 libraryRoot: libraryRoot, | 105 libraryRoot: libraryRoot, |
| 106 packageRoot: packageRoot, | 106 packageRoot: packageRoot, |
| 107 inputProvider: inputProvider, | 107 inputProvider: inputProvider, |
| 108 diagnosticHandler: diagnosticHandler, | 108 diagnosticHandler: diagnosticHandler, |
| (...skipping 17 matching lines...) Expand all Loading... |
| 126 Uri updatedFile = updatedFiles[uri]; | 126 Uri updatedFile = updatedFiles[uri]; |
| 127 return inputProvider(updatedFile == null ? uri : updatedFile); | 127 return inputProvider(updatedFile == null ? uri : updatedFile); |
| 128 } | 128 } |
| 129 LibraryUpdater updater = new LibraryUpdater( | 129 LibraryUpdater updater = new LibraryUpdater( |
| 130 _compiler, | 130 _compiler, |
| 131 mappingInputProvider, | 131 mappingInputProvider, |
| 132 logTime, | 132 logTime, |
| 133 logVerbose, | 133 logVerbose, |
| 134 _context); | 134 _context); |
| 135 _context.registerUriWithUpdates(updatedFiles.keys); | 135 _context.registerUriWithUpdates(updatedFiles.keys); |
| 136 Future<Compiler> future = _reuseCompiler(updater.reuseLibrary); | 136 Future<CompilerImpl> future = _reuseCompiler(updater.reuseLibrary); |
| 137 return future.then((Compiler compiler) { | 137 return future.then((Compiler compiler) { |
| 138 _compiler = compiler; | 138 _compiler = compiler; |
| 139 if (compiler.compilationFailed) { | 139 if (compiler.compilationFailed) { |
| 140 return null; | 140 return null; |
| 141 } else { | 141 } else { |
| 142 String update = updater.computeUpdateJs(); | 142 String update = updater.computeUpdateJs(); |
| 143 _updates.add(update); | 143 _updates.add(update); |
| 144 return update; | 144 return update; |
| 145 } | 145 } |
| 146 }); | 146 }); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 163 } | 163 } |
| 164 } | 164 } |
| 165 | 165 |
| 166 class IncrementalCompilationFailed { | 166 class IncrementalCompilationFailed { |
| 167 final String reason; | 167 final String reason; |
| 168 | 168 |
| 169 const IncrementalCompilationFailed(this.reason); | 169 const IncrementalCompilationFailed(this.reason); |
| 170 | 170 |
| 171 String toString() => "Can't incrementally compile program.\n\n$reason"; | 171 String toString() => "Can't incrementally compile program.\n\n$reason"; |
| 172 } | 172 } |
| OLD | NEW |