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

Side by Side Diff: sdk/lib/_internal/compiler/implementation/dart2js.dart

Issue 185743002: Make analyze-all imply analyze-only. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 9 months 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) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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.cmdline; 5 library dart2js.cmdline;
6 6
7 import 'dart:async' 7 import 'dart:async'
8 show Future, EventSink; 8 show Future, EventSink;
9 import 'dart:io' 9 import 'dart:io'
10 show exit, File, FileMode, Platform, RandomAccessFile, FileSystemException; 10 show exit, File, FileMode, Platform, RandomAccessFile, FileSystemException;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 /** 49 /**
50 * Extract the parameter of an option. 50 * Extract the parameter of an option.
51 * 51 *
52 * For example, in ['--out=fisk.js'] and ['-ohest.js'], the parameters 52 * For example, in ['--out=fisk.js'] and ['-ohest.js'], the parameters
53 * are ['fisk.js'] and ['hest.js'], respectively. 53 * are ['fisk.js'] and ['hest.js'], respectively.
54 */ 54 */
55 String extractParameter(String argument) { 55 String extractParameter(String argument) {
56 // m[0] is the entire match (which will be equal to argument). m[1] 56 // m[0] is the entire match (which will be equal to argument). m[1]
57 // is something like "-o" or "--out=", and m[2] is the parameter. 57 // is something like "-o" or "--out=", and m[2] is the parameter.
58 Match m = new RegExp('^(-[a-z]|--.+=)(.*)').firstMatch(argument); 58 Match m = new RegExp('^(-[a-z]|--.+=)(.*)').firstMatch(argument);
59 if (m == null) helpAndFail('Error: Unknown option "$argument".'); 59 if (m == null) helpAndFail('Unknown option "$argument".');
60 return m[2]; 60 return m[2];
61 } 61 }
62 62
63 String extractPath(String argument) { 63 String extractPath(String argument) {
64 String path = nativeToUriPath(extractParameter(argument)); 64 String path = nativeToUriPath(extractParameter(argument));
65 return path.endsWith("/") ? path : "$path/"; 65 return path.endsWith("/") ? path : "$path/";
66 } 66 }
67 67
68 void parseCommandLine(List<OptionHandler> handlers, List<String> argv) { 68 void parseCommandLine(List<OptionHandler> handlers, List<String> argv) {
69 // TODO(ahe): Use ../../args/args.dart for parsing options instead. 69 // TODO(ahe): Use ../../args/args.dart for parsing options instead.
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 Uri out = currentDirectory.resolve('out.js'); 102 Uri out = currentDirectory.resolve('out.js');
103 Uri sourceMapOut = currentDirectory.resolve('out.js.map'); 103 Uri sourceMapOut = currentDirectory.resolve('out.js.map');
104 Uri packageRoot = null; 104 Uri packageRoot = null;
105 List<String> options = new List<String>(); 105 List<String> options = new List<String>();
106 bool explicitOut = false; 106 bool explicitOut = false;
107 bool wantHelp = false; 107 bool wantHelp = false;
108 bool wantVersion = false; 108 bool wantVersion = false;
109 String outputLanguage = 'JavaScript'; 109 String outputLanguage = 'JavaScript';
110 bool stripArgumentSet = false; 110 bool stripArgumentSet = false;
111 bool analyzeOnly = false; 111 bool analyzeOnly = false;
112 bool analyzeAll = false;
113 // List of provided options that imply that output is expected.
114 List<String> optionsImplyCompilation = <String>[];
112 bool hasDisallowUnsafeEval = false; 115 bool hasDisallowUnsafeEval = false;
113 // TODO(johnniwinther): Measure time for reading files. 116 // TODO(johnniwinther): Measure time for reading files.
114 SourceFileProvider inputProvider = new CompilerSourceFileProvider(); 117 SourceFileProvider inputProvider = new CompilerSourceFileProvider();
115 diagnosticHandler = new FormattingDiagnosticHandler(inputProvider); 118 diagnosticHandler = new FormattingDiagnosticHandler(inputProvider);
116 Map<String, dynamic> environment = new Map<String, dynamic>(); 119 Map<String, dynamic> environment = new Map<String, dynamic>();
117 120
118 passThrough(String argument) => options.add(argument); 121 passThrough(String argument) => options.add(argument);
119 122
120 if (BUILD_ID != null) { 123 if (BUILD_ID != null) {
121 passThrough("--build-id=$BUILD_ID"); 124 passThrough("--build-id=$BUILD_ID");
122 } 125 }
123 126
124 setLibraryRoot(String argument) { 127 setLibraryRoot(String argument) {
125 libraryRoot = currentDirectory.resolve(extractPath(argument)); 128 libraryRoot = currentDirectory.resolve(extractPath(argument));
126 } 129 }
127 130
128 setPackageRoot(String argument) { 131 setPackageRoot(String argument) {
129 packageRoot = currentDirectory.resolve(extractPath(argument)); 132 packageRoot = currentDirectory.resolve(extractPath(argument));
130 } 133 }
131 134
132 setOutput(Iterator<String> arguments) { 135 setOutput(Iterator<String> arguments) {
136 optionsImplyCompilation.add(arguments.current);
133 String path; 137 String path;
134 if (arguments.current == '-o') { 138 if (arguments.current == '-o') {
135 if (!arguments.moveNext()) { 139 if (!arguments.moveNext()) {
136 helpAndFail('Error: Missing file after -o option.'); 140 helpAndFail('Error: Missing file after -o option.');
137 } 141 }
138 path = arguments.current; 142 path = arguments.current;
139 } else { 143 } else {
140 path = extractParameter(arguments.current); 144 path = extractParameter(arguments.current);
141 } 145 }
142 explicitOut = true; 146 explicitOut = true;
143 out = currentDirectory.resolve(nativeToUriPath(path)); 147 out = currentDirectory.resolve(nativeToUriPath(path));
144 sourceMapOut = Uri.parse('$out.map'); 148 sourceMapOut = Uri.parse('$out.map');
145 } 149 }
146 150
147 setOutputType(String argument) { 151 setOutputType(String argument) {
152 optionsImplyCompilation.add(argument);
148 if (argument == '--output-type=dart') { 153 if (argument == '--output-type=dart') {
149 outputLanguage = OUTPUT_LANGUAGE_DART; 154 outputLanguage = OUTPUT_LANGUAGE_DART;
150 if (!explicitOut) { 155 if (!explicitOut) {
151 out = currentDirectory.resolve('out.dart'); 156 out = currentDirectory.resolve('out.dart');
152 sourceMapOut = currentDirectory.resolve('out.dart.map'); 157 sourceMapOut = currentDirectory.resolve('out.dart.map');
153 } 158 }
154 } 159 }
155 passThrough(argument); 160 passThrough(argument);
156 } 161 }
157 162
158 String getDepsOutput(Map<String, SourceFile> sourceFiles) { 163 String getDepsOutput(Map<String, SourceFile> sourceFiles) {
159 var filenames = new List.from(sourceFiles.keys); 164 var filenames = new List.from(sourceFiles.keys);
160 filenames.sort(); 165 filenames.sort();
161 return filenames.join("\n"); 166 return filenames.join("\n");
162 } 167 }
163 168
164 setStrip(String argument) { 169 setStrip(String argument) {
170 optionsImplyCompilation.add(argument);
165 stripArgumentSet = true; 171 stripArgumentSet = true;
166 passThrough(argument); 172 passThrough(argument);
167 } 173 }
168 174
169 setAnalyzeOnly(String argument) { 175 setAnalyzeOnly(String argument) {
170 analyzeOnly = true; 176 analyzeOnly = true;
171 passThrough(argument); 177 passThrough(argument);
172 } 178 }
173 179
180 setAnalyzeAll(String argument) {
181 analyzeAll = true;
182 passThrough(argument);
183 }
184
174 setVerbose(_) { 185 setVerbose(_) {
175 diagnosticHandler.verbose = true; 186 diagnosticHandler.verbose = true;
176 passThrough('--verbose'); 187 passThrough('--verbose');
177 } 188 }
178 189
190 implyCompilation(String argument) {
191 optionsImplyCompilation.add(argument);
192 passThrough(argument);
193 }
194
179 addInEnvironment(String argument) { 195 addInEnvironment(String argument) {
180 int eqIndex = argument.indexOf('='); 196 int eqIndex = argument.indexOf('=');
181 String name = argument.substring(2, eqIndex); 197 String name = argument.substring(2, eqIndex);
182 String value = argument.substring(eqIndex + 1); 198 String value = argument.substring(eqIndex + 1);
183 environment[name] = value; 199 environment[name] = value;
184 } 200 }
185 201
186 setCategories(String argument) { 202 setCategories(String argument) {
187 List<String> categories = extractParameter(argument).split(','); 203 List<String> categories = extractParameter(argument).split(',');
188 Set<String> allowedCategories = 204 Set<String> allowedCategories =
189 LIBRARIES.values.map((x) => x.category).toSet(); 205 LIBRARIES.values.map((x) => x.category).toSet();
190 allowedCategories.remove('Shared'); 206 allowedCategories.remove('Shared');
191 allowedCategories.remove('Internal'); 207 allowedCategories.remove('Internal');
192 List<String> allowedCategoriesList = 208 List<String> allowedCategoriesList =
193 new List<String>.from(allowedCategories); 209 new List<String>.from(allowedCategories);
194 allowedCategoriesList.sort(); 210 allowedCategoriesList.sort();
195 if (categories.contains('all')) { 211 if (categories.contains('all')) {
196 categories = allowedCategoriesList; 212 categories = allowedCategoriesList;
197 } else { 213 } else {
198 String allowedCategoriesString = allowedCategoriesList.join(', '); 214 String allowedCategoriesString = allowedCategoriesList.join(', ');
199 for (String category in categories) { 215 for (String category in categories) {
200 if (!allowedCategories.contains(category)) { 216 if (!allowedCategories.contains(category)) {
201 fail('Error: unsupported library category "$category", ' 217 fail('Unsupported library category "$category", '
202 'supported categories are: $allowedCategoriesString'); 218 'supported categories are: $allowedCategoriesString');
203 } 219 }
204 } 220 }
205 } 221 }
206 passThrough('--categories=${categories.join(",")}'); 222 passThrough('--categories=${categories.join(",")}');
207 } 223 }
208 224
209 handleShortOptions(String argument) { 225 handleShortOptions(String argument) {
210 var shortOptions = argument.substring(1).split(""); 226 var shortOptions = argument.substring(1).split("");
211 for (var shortOption in shortOptions) { 227 for (var shortOption in shortOptions) {
212 switch (shortOption) { 228 switch (shortOption) {
213 case 'v': 229 case 'v':
214 setVerbose(null); 230 setVerbose(null);
215 break; 231 break;
216 case 'h': 232 case 'h':
217 case '?': 233 case '?':
218 wantHelp = true; 234 wantHelp = true;
219 break; 235 break;
220 case 'c': 236 case 'c':
221 passThrough('--enable-checked-mode'); 237 passThrough('--enable-checked-mode');
222 break; 238 break;
223 case 'm': 239 case 'm':
224 passThrough('--minify'); 240 implyCompilation('--minify');
225 break; 241 break;
226 default: 242 default:
227 throw 'Internal error: "$shortOption" did not match'; 243 throw 'Internal error: "$shortOption" did not match';
228 } 244 }
229 } 245 }
230 } 246 }
231 247
232 Uri computePrecompiledUri() { 248 Uri computePrecompiledUri() {
233 String extension = 'precompiled.js'; 249 String extension = 'precompiled.js';
234 String outPath = out.path; 250 String outPath = out.path;
(...skipping 13 matching lines...) Expand all
248 new OptionHandler('--suppress-warnings', 264 new OptionHandler('--suppress-warnings',
249 (_) => diagnosticHandler.showWarnings = false), 265 (_) => diagnosticHandler.showWarnings = false),
250 new OptionHandler('--suppress-hints', 266 new OptionHandler('--suppress-hints',
251 (_) => diagnosticHandler.showHints = false), 267 (_) => diagnosticHandler.showHints = false),
252 new OptionHandler('--output-type=dart|--output-type=js', setOutputType), 268 new OptionHandler('--output-type=dart|--output-type=js', setOutputType),
253 new OptionHandler('--verbose', setVerbose), 269 new OptionHandler('--verbose', setVerbose),
254 new OptionHandler('--version', (_) => wantVersion = true), 270 new OptionHandler('--version', (_) => wantVersion = true),
255 new OptionHandler('--library-root=.+', setLibraryRoot), 271 new OptionHandler('--library-root=.+', setLibraryRoot),
256 new OptionHandler('--out=.+|-o.*', setOutput, multipleArguments: true), 272 new OptionHandler('--out=.+|-o.*', setOutput, multipleArguments: true),
257 new OptionHandler('--allow-mock-compilation', passThrough), 273 new OptionHandler('--allow-mock-compilation', passThrough),
258 new OptionHandler('--minify|-m', passThrough), 274 new OptionHandler('--minify|-m', implyCompilation),
259 new OptionHandler('--force-strip=.*', setStrip), 275 new OptionHandler('--force-strip=.*', setStrip),
260 new OptionHandler('--disable-diagnostic-colors', 276 new OptionHandler('--disable-diagnostic-colors',
261 (_) => diagnosticHandler.enableColors = false), 277 (_) => diagnosticHandler.enableColors = false),
262 new OptionHandler('--enable-diagnostic-colors', 278 new OptionHandler('--enable-diagnostic-colors',
263 (_) => diagnosticHandler.enableColors = true), 279 (_) => diagnosticHandler.enableColors = true),
264 new OptionHandler('--enable[_-]checked[_-]mode|--checked', 280 new OptionHandler('--enable[_-]checked[_-]mode|--checked',
265 (_) => passThrough('--enable-checked-mode')), 281 (_) => passThrough('--enable-checked-mode')),
266 new OptionHandler('--enable-concrete-type-inference', 282 new OptionHandler('--enable-concrete-type-inference',
267 (_) => passThrough('--enable-concrete-type-inference')), 283 (_) => implyCompilation(
284 '--enable-concrete-type-inference')),
268 new OptionHandler('--trust-type-annotations', 285 new OptionHandler('--trust-type-annotations',
269 (_) => passThrough('--trust-type-annotations')), 286 (_) => implyCompilation('--trust-type-annotations')),
270 new OptionHandler(r'--help|/\?|/h', (_) => wantHelp = true), 287 new OptionHandler(r'--help|/\?|/h', (_) => wantHelp = true),
271 new OptionHandler('--package-root=.+|-p.+', setPackageRoot), 288 new OptionHandler('--package-root=.+|-p.+', setPackageRoot),
272 new OptionHandler('--analyze-all', passThrough), 289 new OptionHandler('--analyze-all', setAnalyzeAll),
273 new OptionHandler('--analyze-only', setAnalyzeOnly), 290 new OptionHandler('--analyze-only', setAnalyzeOnly),
274 new OptionHandler('--analyze-signatures-only', passThrough), 291 new OptionHandler('--analyze-signatures-only', setAnalyzeOnly),
275 new OptionHandler('--disable-native-live-type-analysis', passThrough), 292 new OptionHandler('--disable-native-live-type-analysis', passThrough),
276 new OptionHandler('--categories=.*', setCategories), 293 new OptionHandler('--categories=.*', setCategories),
277 new OptionHandler('--disable-type-inference', passThrough), 294 new OptionHandler('--disable-type-inference', implyCompilation),
278 new OptionHandler('--terse', passThrough), 295 new OptionHandler('--terse', passThrough),
279 new OptionHandler('--dump-info', passThrough), 296 new OptionHandler('--dump-info', implyCompilation),
280 new OptionHandler('--disallow-unsafe-eval', 297 new OptionHandler('--disallow-unsafe-eval',
281 (_) => hasDisallowUnsafeEval = true), 298 (_) => hasDisallowUnsafeEval = true),
282 new OptionHandler('--hide-package-warnings', passThrough), 299 new OptionHandler('--hide-package-warnings', passThrough),
283 new OptionHandler('-D.+=.*', addInEnvironment), 300 new OptionHandler('-D.+=.*', addInEnvironment),
284 301
285 // The following two options must come last. 302 // The following two options must come last.
286 new OptionHandler('-.*', (String argument) { 303 new OptionHandler('-.*', (String argument) {
287 helpAndFail('Error: Unknown option "$argument".'); 304 helpAndFail("Unknown option '$argument'.");
288 }), 305 }),
289 new OptionHandler('.*', (String argument) { 306 new OptionHandler('.*', (String argument) {
290 arguments.add(nativeToUriPath(argument)); 307 arguments.add(nativeToUriPath(argument));
291 }) 308 })
292 ]; 309 ];
293 310
294 parseCommandLine(handlers, argv); 311 parseCommandLine(handlers, argv);
295 if (wantHelp || wantVersion) { 312 if (wantHelp || wantVersion) {
296 helpAndExit(wantHelp, wantVersion, diagnosticHandler.verbose); 313 helpAndExit(wantHelp, wantVersion, diagnosticHandler.verbose);
297 } 314 }
298 315
299 if (hasDisallowUnsafeEval) { 316 if (hasDisallowUnsafeEval) {
300 String precompiledName = 317 String precompiledName =
301 relativize(currentDirectory, computePrecompiledUri(), isWindows); 318 relativize(currentDirectory, computePrecompiledUri(), isWindows);
302 helpAndFail("Error: option '--disallow-unsafe-eval' has been removed." 319 helpAndFail("Option '--disallow-unsafe-eval' has been removed."
303 " Instead, the compiler generates a file named" 320 " Instead, the compiler generates a file named"
304 " '$precompiledName'."); 321 " '$precompiledName'.");
305 } 322 }
306 323
307 if (outputLanguage != OUTPUT_LANGUAGE_DART && stripArgumentSet) { 324 if (outputLanguage != OUTPUT_LANGUAGE_DART && stripArgumentSet) {
308 helpAndFail('Error: --force-strip may only be used with ' 325 helpAndFail("Option '--force-strip' may only be used with "
309 '--output-type=dart'); 326 "'--output-type=dart'.");
310 } 327 }
311 if (arguments.isEmpty) { 328 if (arguments.isEmpty) {
312 helpAndFail('Error: No Dart file specified.'); 329 helpAndFail('No Dart file specified.');
313 } 330 }
314 if (arguments.length > 1) { 331 if (arguments.length > 1) {
315 var extra = arguments.sublist(1); 332 var extra = arguments.sublist(1);
316 helpAndFail('Error: Extra arguments: ${extra.join(" ")}'); 333 helpAndFail('Extra arguments: ${extra.join(" ")}');
317 } 334 }
318 335
319 Uri uri = currentDirectory.resolve(arguments[0]); 336 Uri uri = currentDirectory.resolve(arguments[0]);
320 if (packageRoot == null) { 337 if (packageRoot == null) {
321 packageRoot = uri.resolve('./packages/'); 338 packageRoot = uri.resolve('./packages/');
322 } 339 }
323 340
324 diagnosticHandler.info('package root is $packageRoot'); 341 if ((analyzeOnly || analyzeAll) && !optionsImplyCompilation.isEmpty) {
342 if (!analyzeOnly) {
343 diagnosticHandler.info(
344 "Option '--analyze-all' implies '--analyze-only'.",
345 api.Diagnostic.INFO);
346 }
347 diagnosticHandler.info(
348 "Options $optionsImplyCompilation indicate that output is expected, "
349 "but compilation is turned off by the option '--analyze-only'.",
350 api.Diagnostic.INFO);
351 }
352 if (analyzeAll) {
floitsch 2014/03/07 14:03:35 *nit*: 'if' on one line.
Johnni Winther 2014/03/10 07:03:08 Done.
353 analyzeOnly = true;
354 }
355
356 diagnosticHandler.info('Package root is $packageRoot');
325 357
326 int totalCharactersWritten = 0; 358 int totalCharactersWritten = 0;
327 359
328 options.add('--source-map=$sourceMapOut'); 360 options.add('--source-map=$sourceMapOut');
329 361
330 List<String> allOutputFiles = new List<String>(); 362 List<String> allOutputFiles = new List<String>();
331 363
332 compilationDone(String code) { 364 compilationDone(String code) {
333 if (analyzeOnly) return; 365 if (analyzeOnly) return;
334 if (code == null) { 366 if (code == null) {
335 fail('Error: Compilation failed.'); 367 fail('Compilation failed.');
336 } 368 }
337 writeString(Uri.parse('$out.deps'), 369 writeString(Uri.parse('$out.deps'),
338 getDepsOutput(inputProvider.sourceFiles)); 370 getDepsOutput(inputProvider.sourceFiles));
339 diagnosticHandler.info( 371 diagnosticHandler.info(
340 'compiled ${inputProvider.dartCharactersRead} characters Dart ' 372 'compiled ${inputProvider.dartCharactersRead} characters Dart '
341 '-> $totalCharactersWritten characters $outputLanguage ' 373 '-> $totalCharactersWritten characters $outputLanguage '
342 'in ${relativize(currentDirectory, out, isWindows)}'); 374 'in ${relativize(currentDirectory, out, isWindows)}');
343 if (diagnosticHandler.verbose) { 375 if (diagnosticHandler.verbose) {
344 String input = uriPathToNative(arguments[0]); 376 String input = uriPathToNative(arguments[0]);
345 print('Dart file ($input) compiled to $outputLanguage.'); 377 print('Dart file ($input) compiled to $outputLanguage.');
(...skipping 22 matching lines...) Expand all
368 uri = computePrecompiledUri(); 400 uri = computePrecompiledUri();
369 diagnosticHandler.info( 401 diagnosticHandler.info(
370 "File ($uri) is compatible with header" 402 "File ($uri) is compatible with header"
371 " \"Content-Security-Policy: script-src 'self'\""); 403 " \"Content-Security-Policy: script-src 'self'\"");
372 } else if (extension == 'js.map' || extension == 'dart.map') { 404 } else if (extension == 'js.map' || extension == 'dart.map') {
373 uri = sourceMapOut; 405 uri = sourceMapOut;
374 } else if (extension == 'info.html') { 406 } else if (extension == 'info.html') {
375 String outName = out.path.substring(out.path.lastIndexOf('/') + 1); 407 String outName = out.path.substring(out.path.lastIndexOf('/') + 1);
376 uri = out.resolve('${outName}.$extension'); 408 uri = out.resolve('${outName}.$extension');
377 } else { 409 } else {
378 fail('Error: Unknown extension: $extension'); 410 fail('Unknown extension: $extension');
379 } 411 }
380 } else { 412 } else {
381 uri = out.resolve('$name.$extension'); 413 uri = out.resolve('$name.$extension');
382 } 414 }
383 415
384 if (uri.scheme != 'file') { 416 if (uri.scheme != 'file') {
385 fail('Error: Unhandled scheme ${uri.scheme} in $uri.'); 417 fail('Unhandled scheme ${uri.scheme} in $uri.');
386 } 418 }
387 419
388 RandomAccessFile output; 420 RandomAccessFile output;
389 try { 421 try {
390 output = new File(uri.toFilePath()).openSync(mode: FileMode.WRITE); 422 output = new File(uri.toFilePath()).openSync(mode: FileMode.WRITE);
391 } on FileSystemException catch(e) { 423 } on FileSystemException catch(e) {
392 fail('$e'); 424 fail('$e');
393 } 425 }
394 426
395 allOutputFiles.add(relativize(currentDirectory, uri, isWindows)); 427 allOutputFiles.add(relativize(currentDirectory, uri, isWindows));
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
453 } 485 }
454 486
455 class AbortLeg { 487 class AbortLeg {
456 final message; 488 final message;
457 AbortLeg(this.message); 489 AbortLeg(this.message);
458 toString() => 'Aborted due to --throw-on-error: $message'; 490 toString() => 'Aborted due to --throw-on-error: $message';
459 } 491 }
460 492
461 void writeString(Uri uri, String text) { 493 void writeString(Uri uri, String text) {
462 if (uri.scheme != 'file') { 494 if (uri.scheme != 'file') {
463 fail('Error: Unhandled scheme ${uri.scheme}.'); 495 fail('Unhandled scheme ${uri.scheme}.');
464 } 496 }
465 var file = new File(uri.toFilePath()).openSync(mode: FileMode.WRITE); 497 var file = new File(uri.toFilePath()).openSync(mode: FileMode.WRITE);
466 file.writeStringSync(text); 498 file.writeStringSync(text);
467 file.closeSync(); 499 file.closeSync();
468 } 500 }
469 501
470 void fail(String message) { 502 void fail(String message) {
471 if (diagnosticHandler != null) { 503 if (diagnosticHandler != null) {
472 diagnosticHandler.diagnosticHandler( 504 diagnosticHandler.diagnosticHandler(
473 null, -1, -1, message, api.Diagnostic.ERROR); 505 null, -1, -1, message, api.Diagnostic.ERROR);
474 } else { 506 } else {
475 print(message); 507 print('Error: $message');
476 } 508 }
477 exitFunc(1); 509 exitFunc(1);
478 } 510 }
479 511
480 Future compilerMain(List<String> arguments) { 512 Future compilerMain(List<String> arguments) {
481 var root = uriPathToNative("/$LIBRARY_ROOT"); 513 var root = uriPathToNative("/$LIBRARY_ROOT");
482 arguments = <String>['--library-root=${Platform.script.toFilePath()}$root'] 514 arguments = <String>['--library-root=${Platform.script.toFilePath()}$root']
483 ..addAll(arguments); 515 ..addAll(arguments);
484 return compile(arguments); 516 return compile(arguments);
485 } 517 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
527 Define an environment variable. 559 Define an environment variable.
528 560
529 --version 561 --version
530 Display version information. 562 Display version information.
531 563
532 -p<path>, --package-root=<path> 564 -p<path>, --package-root=<path>
533 Where to find packages, that is, "package:..." imports. 565 Where to find packages, that is, "package:..." imports.
534 566
535 --analyze-all 567 --analyze-all
536 Analyze all code. Without this option, the compiler only analyzes 568 Analyze all code. Without this option, the compiler only analyzes
537 code that is reachable from [main]. This option is useful for 569 code that is reachable from [main]. This option implies --analyze-only.
538 finding errors in libraries, but using it can result in bigger and
539 slower output.
540 570
541 --analyze-only 571 --analyze-only
542 Analyze but do not generate code. 572 Analyze but do not generate code.
543 573
544 --analyze-signatures-only 574 --analyze-signatures-only
545 Skip analysis of method bodies and field initializers. This option implies 575 Skip analysis of method bodies and field initializers. This option implies
546 --analyze-only. 576 --analyze-only.
547 577
548 --suppress-warnings 578 --suppress-warnings
549 Do not display any warnings. 579 Do not display any warnings.
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
642 } 672 }
643 } 673 }
644 674
645 try { 675 try {
646 return compilerMain(arguments).catchError(onError); 676 return compilerMain(arguments).catchError(onError);
647 } catch (exception, trace) { 677 } catch (exception, trace) {
648 onError(exception, trace); 678 onError(exception, trace);
649 return new Future.value(); 679 return new Future.value();
650 } 680 }
651 } 681 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698