Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(157)

Side by Side Diff: dart/pkg/dart2js_incremental/lib/dart2js_incremental.dart

Issue 804903004: Refactor LibraryUpdater to prepare for parts. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 Future; 8 Future;
9 9
10 import 'dart:profiler' show 10 import 'dart:profiler' show
(...skipping 11 matching lines...) Expand all
22 import 'package:compiler/src/dart2jslib.dart' show 22 import 'package:compiler/src/dart2jslib.dart' show
23 NullSink; 23 NullSink;
24 24
25 import 'package:compiler/src/js_backend/js_backend.dart' show 25 import 'package:compiler/src/js_backend/js_backend.dart' show
26 JavaScriptBackend; 26 JavaScriptBackend;
27 27
28 import 'package:compiler/src/elements/elements.dart' show 28 import 'package:compiler/src/elements/elements.dart' show
29 LibraryElement; 29 LibraryElement;
30 30
31 import 'library_updater.dart' show 31 import 'library_updater.dart' show
32 IncrementalCompilerContext,
32 LibraryUpdater, 33 LibraryUpdater,
33 Logger; 34 Logger;
34 35
35 import 'package:compiler/src/js/js.dart' as jsAst; 36 import 'package:compiler/src/js/js.dart' as jsAst;
36 37
37 part 'caching_compiler.dart'; 38 part 'caching_compiler.dart';
38 39
39 const List<String> INCREMENTAL_OPTIONS = const <String>[ 40 const List<String> INCREMENTAL_OPTIONS = const <String>[
40 '--disable-type-inference', 41 '--disable-type-inference',
41 '--incremental-support', 42 '--incremental-support',
42 '--no-source-maps', // TODO(ahe): Remove this. 43 '--no-source-maps', // TODO(ahe): Remove this.
43 ]; 44 ];
44 45
45 class IncrementalCompiler { 46 class IncrementalCompiler {
46 final Uri libraryRoot; 47 final Uri libraryRoot;
47 final Uri packageRoot; 48 final Uri packageRoot;
48 final CompilerInputProvider inputProvider; 49 final CompilerInputProvider inputProvider;
49 final DiagnosticHandler diagnosticHandler; 50 final DiagnosticHandler diagnosticHandler;
50 final List<String> options; 51 final List<String> options;
51 final CompilerOutputProvider outputProvider; 52 final CompilerOutputProvider outputProvider;
52 final Map<String, dynamic> environment; 53 final Map<String, dynamic> environment;
53 final List<String> _updates = <String>[]; 54 final List<String> _updates = <String>[];
55 final IncrementalCompilerContext _context = new IncrementalCompilerContext();
54 56
55 Compiler _compiler; 57 Compiler _compiler;
56 58
57 bool get compilerWasCancelled => _compiler.compilerWasCancelled; 59 bool get compilerWasCancelled => _compiler.compilerWasCancelled;
58 60
59 IncrementalCompiler({ 61 IncrementalCompiler({
60 this.libraryRoot, 62 this.libraryRoot,
61 this.packageRoot, 63 this.packageRoot,
62 this.inputProvider, 64 this.inputProvider,
63 this.diagnosticHandler, 65 this.diagnosticHandler,
64 this.options, 66 this.options,
65 this.outputProvider, 67 this.outputProvider,
66 this.environment}) { 68 this.environment}) {
67 if (libraryRoot == null) { 69 if (libraryRoot == null) {
68 throw new ArgumentError('libraryRoot is null.'); 70 throw new ArgumentError('libraryRoot is null.');
69 } 71 }
70 if (inputProvider == null) { 72 if (inputProvider == null) {
71 throw new ArgumentError('inputProvider is null.'); 73 throw new ArgumentError('inputProvider is null.');
72 } 74 }
73 if (diagnosticHandler == null) { 75 if (diagnosticHandler == null) {
74 throw new ArgumentError('diagnosticHandler is null.'); 76 throw new ArgumentError('diagnosticHandler is null.');
75 } 77 }
78 _context.incrementalCompiler = this;
76 } 79 }
77 80
78 LibraryElement get mainApp => _compiler.mainApp; 81 LibraryElement get mainApp => _compiler.mainApp;
79 82
80 Compiler get compiler => _compiler; 83 Compiler get compiler => _compiler;
81 84
82 Future<bool> compile(Uri script) { 85 Future<bool> compile(Uri script) {
83 return _reuseCompiler(null).then((Compiler compiler) { 86 return _reuseCompiler(null).then((Compiler compiler) {
84 _compiler = compiler; 87 _compiler = compiler;
85 return compiler.run(script); 88 return compiler.run(script);
(...skipping 27 matching lines...) Expand all
113 if (logVerbose == null) { 116 if (logVerbose == null) {
114 logVerbose = (_) {}; 117 logVerbose = (_) {};
115 } 118 }
116 Future mappingInputProvider(Uri uri) { 119 Future mappingInputProvider(Uri uri) {
117 Uri updatedFile = updatedFiles[uri]; 120 Uri updatedFile = updatedFiles[uri];
118 return inputProvider(updatedFile == null ? uri : updatedFile); 121 return inputProvider(updatedFile == null ? uri : updatedFile);
119 } 122 }
120 LibraryUpdater updater = new LibraryUpdater( 123 LibraryUpdater updater = new LibraryUpdater(
121 _compiler, 124 _compiler,
122 mappingInputProvider, 125 mappingInputProvider,
123 _compiler.mainApp.canonicalUri,
124 logTime, 126 logTime,
125 logVerbose); 127 logVerbose,
128 _context);
129 _context.registerUriWithUpdates(updatedFiles.keys);
126 Future<Compiler> future = _reuseCompiler(updater.reuseLibrary); 130 Future<Compiler> future = _reuseCompiler(updater.reuseLibrary);
127 return future.then((Compiler compiler) { 131 return future.then((Compiler compiler) {
128 _compiler = compiler; 132 _compiler = compiler;
129 if (compiler.compilationFailed) { 133 if (compiler.compilationFailed) {
130 return null; 134 return null;
131 } else { 135 } else {
132 String update = updater.computeUpdateJs(); 136 String update = updater.computeUpdateJs();
133 _updates.add(update); 137 _updates.add(update);
134 return update; 138 return update;
135 } 139 }
136 }); 140 });
137 } 141 }
138 142
139 String allUpdates() { 143 String allUpdates() {
140 jsAst.Node updates = jsAst.js.escapedString(_updates.join("")); 144 jsAst.Node updates = jsAst.js.escapedString(_updates.join(""));
141 145
142 jsAst.FunctionDeclaration mainRunner = jsAst.js.statement(r""" 146 jsAst.FunctionDeclaration mainRunner = jsAst.js.statement(r"""
143 function dartMainRunner(main, args) { 147 function dartMainRunner(main, args) {
144 $dart_unsafe_eval.patch(#); 148 $dart_unsafe_eval.patch(#);
145 return main(args); 149 return main(args);
146 }""", updates); 150 }""", updates);
147 151
148 152
149 jsAst.Printer printer = new jsAst.Printer(_compiler, null); 153 jsAst.Printer printer = new jsAst.Printer(_compiler, null);
150 printer.blockOutWithoutBraces(mainRunner); 154 printer.blockOutWithoutBraces(mainRunner);
151 return printer.outBuffer.getText(); 155 return printer.outBuffer.getText();
152 } 156 }
153 } 157 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698