Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 leg_apiimpl; | 5 library leg_apiimpl; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 | 8 |
| 9 import '../compiler.dart' as api; | 9 import '../compiler.dart' as api; |
| 10 import 'dart2jslib.dart' as leg; | 10 import 'dart2jslib.dart' as leg; |
| 11 import 'tree/tree.dart' as tree; | 11 import 'tree/tree.dart' as tree; |
| 12 import 'elements/elements.dart' as elements; | 12 import 'elements/elements.dart' as elements; |
| 13 import 'ssa/tracer.dart' as ssa; | 13 import 'ssa/tracer.dart' as ssa; |
| 14 import '../../libraries.dart'; | 14 import '../../libraries.dart'; |
| 15 import 'source_file.dart'; | 15 import 'source_file.dart'; |
| 16 | 16 |
| 17 class Compiler extends leg.Compiler { | 17 class Compiler extends leg.Compiler { |
| 18 api.ReadStringFromUri provider; | 18 api.ReadStringFromUri provider; |
| 19 api.DiagnosticHandler handler; | 19 api.DiagnosticHandler handler; |
| 20 final Uri libraryRoot; | 20 final Uri libraryRoot; |
| 21 final Uri packageRoot; | 21 final Uri packageRoot; |
| 22 List<String> options; | 22 List<String> options; |
| 23 bool mockableLibraryUsed = false; | 23 bool mockableLibraryUsed = false; |
| 24 final Set<String> allowedLibraryCategories; | 24 final Set<String> allowedLibraryCategories; |
| 25 final bool throwOnError; | |
| 25 | 26 |
| 26 Compiler(this.provider, | 27 Compiler(this.provider, |
| 27 api.CompilerOutputProvider outputProvider, | 28 api.CompilerOutputProvider outputProvider, |
| 28 this.handler, | 29 this.handler, |
| 29 this.libraryRoot, | 30 this.libraryRoot, |
| 30 this.packageRoot, | 31 this.packageRoot, |
| 31 List<String> options) | 32 List<String> options) |
| 32 : this.options = options, | 33 : this.options = options, |
| 33 this.allowedLibraryCategories = getAllowedLibraryCategories(options), | 34 this.allowedLibraryCategories = getAllowedLibraryCategories(options), |
| 35 this.throwOnError = hasOption(options, '--throw-on-error'), | |
| 34 super( | 36 super( |
| 35 tracer: new ssa.HTracer( | 37 tracer: new ssa.HTracer( |
| 36 ssa.GENERATE_SSA_TRACE ? outputProvider('dart', 'cfg') : null), | 38 ssa.GENERATE_SSA_TRACE ? outputProvider('dart', 'cfg') : null), |
| 37 outputProvider: outputProvider, | 39 outputProvider: outputProvider, |
| 38 enableTypeAssertions: hasOption(options, '--enable-checked-mode'), | 40 enableTypeAssertions: hasOption(options, '--enable-checked-mode'), |
| 39 enableUserAssertions: hasOption(options, '--enable-checked-mode'), | 41 enableUserAssertions: hasOption(options, '--enable-checked-mode'), |
| 40 trustTypeAnnotations: | 42 trustTypeAnnotations: |
| 41 hasOption(options, '--trust-type-annotations'), | 43 hasOption(options, '--trust-type-annotations'), |
| 42 enableMinification: hasOption(options, '--minify'), | 44 enableMinification: hasOption(options, '--minify'), |
| 43 enableNativeLiveTypeAnalysis: | 45 enableNativeLiveTypeAnalysis: |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 221 if (node != null && importingLibrary != null) { | 223 if (node != null && importingLibrary != null) { |
| 222 reportDiagnostic(spanFromNode(node), | 224 reportDiagnostic(spanFromNode(node), |
| 223 'Error: Internal library $resolvedUri is not accessible from ' | 225 'Error: Internal library $resolvedUri is not accessible from ' |
| 224 '${importingLibrary.canonicalUri}.', | 226 '${importingLibrary.canonicalUri}.', |
| 225 api.Diagnostic.ERROR); | 227 api.Diagnostic.ERROR); |
| 226 } else { | 228 } else { |
| 227 reportDiagnostic(null, | 229 reportDiagnostic(null, |
| 228 'Error: Internal library $resolvedUri is not accessible.', | 230 'Error: Internal library $resolvedUri is not accessible.', |
| 229 api.Diagnostic.ERROR); | 231 api.Diagnostic.ERROR); |
| 230 } | 232 } |
| 231 //path = null; | 233 //path = null; |
|
kasperl
2013/06/28 10:26:50
Should we get rid of this line?
| |
| 232 } | 234 } |
| 233 } | 235 } |
| 234 if (path == null) { | 236 if (path == null) { |
| 235 if (node != null) { | 237 if (node != null) { |
| 236 reportError(node, 'library not found ${resolvedUri}'); | 238 reportError(node, 'library not found ${resolvedUri}'); |
| 237 } else { | 239 } else { |
| 238 reportDiagnostic(null, 'library not found ${resolvedUri}', | 240 reportDiagnostic(null, 'library not found ${resolvedUri}', |
| 239 api.Diagnostic.ERROR); | 241 api.Diagnostic.ERROR); |
| 240 } | 242 } |
| 241 return null; | 243 return null; |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 266 log('${task.name} took ${task.timing}msec'); | 268 log('${task.name} took ${task.timing}msec'); |
| 267 } | 269 } |
| 268 int total = totalCompileTime.elapsedMilliseconds; | 270 int total = totalCompileTime.elapsedMilliseconds; |
| 269 log('Total compile-time ${total}msec;' | 271 log('Total compile-time ${total}msec;' |
| 270 ' unaccounted ${total - cumulated}msec'); | 272 ' unaccounted ${total - cumulated}msec'); |
| 271 return success; | 273 return success; |
| 272 } | 274 } |
| 273 | 275 |
| 274 void reportDiagnostic(leg.SourceSpan span, String message, | 276 void reportDiagnostic(leg.SourceSpan span, String message, |
| 275 api.Diagnostic kind) { | 277 api.Diagnostic kind) { |
| 278 bool isFatal = false; | |
| 276 if (identical(kind, api.Diagnostic.ERROR) | 279 if (identical(kind, api.Diagnostic.ERROR) |
| 277 || identical(kind, api.Diagnostic.CRASH)) { | 280 || identical(kind, api.Diagnostic.CRASH)) { |
| 278 compilationFailed = true; | 281 compilationFailed = true; |
| 282 isFatal = true; | |
| 279 } | 283 } |
| 280 // [:span.uri:] might be [:null:] in case of a [Script] with no [uri]. For | 284 // [:span.uri:] might be [:null:] in case of a [Script] with no [uri]. For |
| 281 // instance in the [Types] constructor in typechecker.dart. | 285 // instance in the [Types] constructor in typechecker.dart. |
| 282 if (span == null || span.uri == null) { | 286 if (span == null || span.uri == null) { |
| 283 handler(null, null, null, message, kind); | 287 handler(null, null, null, message, kind); |
| 284 } else { | 288 } else { |
| 285 handler(translateUri(span.uri, null), span.begin, span.end, | 289 handler(translateUri(span.uri, null), span.begin, span.end, |
| 286 message, kind); | 290 message, kind); |
| 287 } | 291 } |
| 292 if (isFatal && throwOnError) { | |
| 293 hasCrashed = true; | |
|
kasperl
2013/06/28 10:26:50
Add a comment here? Rename flag to make it clear t
| |
| 294 throw new AbortCompilation(message); | |
| 295 } | |
| 288 } | 296 } |
| 289 | 297 |
| 290 bool get isMockCompilation { | 298 bool get isMockCompilation { |
| 291 return mockableLibraryUsed | 299 return mockableLibraryUsed |
| 292 && (options.indexOf('--allow-mock-compilation') != -1); | 300 && (options.indexOf('--allow-mock-compilation') != -1); |
| 293 } | 301 } |
| 294 } | 302 } |
| 303 | |
| 304 class AbortCompilation { | |
| 305 final message; | |
| 306 AbortCompilation(this.message); | |
| 307 toString() => 'Aborted due to --throw-on-error: $message'; | |
| 308 } | |
| OLD | NEW |