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

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

Issue 21242002: Retain elements a finer granularity than library. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Address review comments Created 7 years, 4 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) 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 part of dart2js; 5 part of dart2js;
6 6
7 /** 7 /**
8 * If true, print a warning for each method that was resolved, but not 8 * If true, print a warning for each method that was resolved, but not
9 * compiled. 9 * compiled.
10 */ 10 */
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 * maps. 322 * maps.
323 */ 323 */
324 final Uri sourceMapUri; 324 final Uri sourceMapUri;
325 325
326 /** 326 /**
327 * The name to use for the global JS object in JS output. Default 327 * The name to use for the global JS object in JS output. Default
328 * value is "$". 328 * value is "$".
329 */ 329 */
330 final String globalJsName; 330 final String globalJsName;
331 331
332 /// Emit terse diagnostics without howToFix.
333 final bool terseDiagnostics;
334
332 final api.CompilerOutputProvider outputProvider; 335 final api.CompilerOutputProvider outputProvider;
333 336
334 bool disableInlining = false; 337 bool disableInlining = false;
335 338
336 List<Uri> librariesToAnalyzeWhenRun; 339 List<Uri> librariesToAnalyzeWhenRun;
337 340
338 final Tracer tracer; 341 final Tracer tracer;
339 342
340 CompilerTask measuredTask; 343 CompilerTask measuredTask;
341 Element _currentElement; 344 Element _currentElement;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 381
379 // Initialized after mirrorSystemClass has been resolved. 382 // Initialized after mirrorSystemClass has been resolved.
380 FunctionElement mirrorSystemGetNameFunction; 383 FunctionElement mirrorSystemGetNameFunction;
381 384
382 // Initialized when dart:_collection-dev is loaded. 385 // Initialized when dart:_collection-dev is loaded.
383 ClassElement symbolImplementationClass; 386 ClassElement symbolImplementationClass;
384 387
385 // Initialized when symbolImplementationClass has been resolved. 388 // Initialized when symbolImplementationClass has been resolved.
386 FunctionElement symbolValidatedConstructor; 389 FunctionElement symbolValidatedConstructor;
387 390
391 // Initialized when mirrorsUsedClass has been resolved.
392 FunctionElement mirrorsUsedConstructor;
393
388 // Initialized when dart:mirrors is loaded. 394 // Initialized when dart:mirrors is loaded.
389 ClassElement deferredLibraryClass; 395 ClassElement deferredLibraryClass;
390 396
391 ClassElement jsInvocationMirrorClass; 397 ClassElement jsInvocationMirrorClass;
392 /// Document class from dart:mirrors. 398 /// Document class from dart:mirrors.
393 ClassElement documentClass; 399 ClassElement documentClass;
394 Element assertMethod; 400 Element assertMethod;
395 Element identicalFunction; 401 Element identicalFunction;
396 Element functionApplyMethod; 402 Element functionApplyMethod;
397 Element invokeOnMethod; 403 Element invokeOnMethod;
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
514 bool generateSourceMap: true, 520 bool generateSourceMap: true,
515 bool disallowUnsafeEval: false, 521 bool disallowUnsafeEval: false,
516 this.analyzeAllFlag: false, 522 this.analyzeAllFlag: false,
517 bool analyzeOnly: false, 523 bool analyzeOnly: false,
518 bool analyzeSignaturesOnly: false, 524 bool analyzeSignaturesOnly: false,
519 this.preserveComments: false, 525 this.preserveComments: false,
520 this.verbose: false, 526 this.verbose: false,
521 this.sourceMapUri: null, 527 this.sourceMapUri: null,
522 this.buildId: UNDETERMINED_BUILD_ID, 528 this.buildId: UNDETERMINED_BUILD_ID,
523 this.globalJsName: r'$', 529 this.globalJsName: r'$',
530 this.terseDiagnostics: false,
524 outputProvider, 531 outputProvider,
525 List<String> strips: const []}) 532 List<String> strips: const []})
526 : this.analyzeOnly = analyzeOnly || analyzeSignaturesOnly, 533 : this.analyzeOnly = analyzeOnly || analyzeSignaturesOnly,
527 this.analyzeSignaturesOnly = analyzeSignaturesOnly, 534 this.analyzeSignaturesOnly = analyzeSignaturesOnly,
528 this.outputProvider = (outputProvider == null) 535 this.outputProvider = (outputProvider == null)
529 ? NullSink.outputProvider 536 ? NullSink.outputProvider
530 : outputProvider { 537 : outputProvider {
531 world = new World(this); 538 world = new World(this);
532 539
533 closureMapping.ClosureNamer closureNamer; 540 closureMapping.ClosureNamer closureNamer;
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
735 742
736 void onClassResolved(ClassElement cls) { 743 void onClassResolved(ClassElement cls) {
737 if (mirrorSystemClass == cls) { 744 if (mirrorSystemClass == cls) {
738 mirrorSystemGetNameFunction = 745 mirrorSystemGetNameFunction =
739 cls.lookupLocalMember(const SourceString('getName')); 746 cls.lookupLocalMember(const SourceString('getName'));
740 } else if (symbolClass == cls) { 747 } else if (symbolClass == cls) {
741 symbolConstructor = cls.constructors.head; 748 symbolConstructor = cls.constructors.head;
742 } else if (symbolImplementationClass == cls) { 749 } else if (symbolImplementationClass == cls) {
743 symbolValidatedConstructor = symbolImplementationClass.lookupConstructor( 750 symbolValidatedConstructor = symbolImplementationClass.lookupConstructor(
744 symbolValidatedConstructorSelector); 751 symbolValidatedConstructorSelector);
752 } else if (mirrorsUsedClass == cls) {
753 mirrorsUsedConstructor = cls.constructors.head;
745 } 754 }
746 } 755 }
747 756
748 LibraryElement scanBuiltinLibrary(String filename); 757 LibraryElement scanBuiltinLibrary(String filename);
749 758
750 void initializeSpecialClasses() { 759 void initializeSpecialClasses() {
751 final List missingCoreClasses = []; 760 final List missingCoreClasses = [];
752 ClassElement lookupCoreClass(String name) { 761 ClassElement lookupCoreClass(String name) {
753 ClassElement result = coreLibrary.find(new SourceString(name)); 762 ClassElement result = coreLibrary.find(new SourceString(name));
754 if (result == null) { 763 if (result == null) {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
790 boundClosureClass = lookupHelperClass('BoundClosure'); 799 boundClosureClass = lookupHelperClass('BoundClosure');
791 closureClass = lookupHelperClass('Closure'); 800 closureClass = lookupHelperClass('Closure');
792 dynamicClass = lookupHelperClass('Dynamic_'); 801 dynamicClass = lookupHelperClass('Dynamic_');
793 nullClass = lookupHelperClass('Null'); 802 nullClass = lookupHelperClass('Null');
794 if (!missingHelperClasses.isEmpty) { 803 if (!missingHelperClasses.isEmpty) {
795 internalErrorOnElement(jsHelperLibrary, 804 internalErrorOnElement(jsHelperLibrary,
796 'dart:_js_helper library does not contain required classes: ' 805 'dart:_js_helper library does not contain required classes: '
797 '$missingHelperClasses'); 806 '$missingHelperClasses');
798 } 807 }
799 808
800 types = new Types(this, dynamicClass); 809 if (types == null) {
810 types = new Types(this, dynamicClass);
811 }
801 backend.initializeHelperClasses(); 812 backend.initializeHelperClasses();
802 813
803 dynamicClass.ensureResolved(this); 814 dynamicClass.ensureResolved(this);
804 } 815 }
805 816
806 Element _unnamedListConstructor; 817 Element _unnamedListConstructor;
807 Element get unnamedListConstructor { 818 Element get unnamedListConstructor {
808 if (_unnamedListConstructor != null) return _unnamedListConstructor; 819 if (_unnamedListConstructor != null) return _unnamedListConstructor;
809 Selector callConstructor = new Selector.callConstructor( 820 Selector callConstructor = new Selector.callConstructor(
810 const SourceString(""), listClass.getLibrary()); 821 const SourceString(""), listClass.getLibrary());
(...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after
1160 } 1171 }
1161 SourceSpan span = spanFromNode(node); 1172 SourceSpan span = spanFromNode(node);
1162 1173
1163 reportDiagnostic(span, '$message', api.Diagnostic.WARNING); 1174 reportDiagnostic(span, '$message', api.Diagnostic.WARNING);
1164 } 1175 }
1165 1176
1166 void reportError(Spannable node, 1177 void reportError(Spannable node,
1167 MessageKind errorCode, 1178 MessageKind errorCode,
1168 [Map arguments = const {}]) { 1179 [Map arguments = const {}]) {
1169 reportMessage(spanFromSpannable(node), 1180 reportMessage(spanFromSpannable(node),
1170 errorCode.error(arguments), 1181 errorCode.error(arguments, terseDiagnostics),
1171 api.Diagnostic.ERROR); 1182 api.Diagnostic.ERROR);
1172 } 1183 }
1173 1184
1174 void reportFatalError(Spannable node, MessageKind errorCode, 1185 void reportFatalError(Spannable node, MessageKind errorCode,
1175 [Map arguments = const {}]) { 1186 [Map arguments = const {}]) {
1176 reportError(node, errorCode, arguments); 1187 reportError(node, errorCode, arguments);
1177 // TODO(ahe): Make this only abort the current method. 1188 // TODO(ahe): Make this only abort the current method.
1178 throw new CompilerCancelledException( 1189 throw new CompilerCancelledException(
1179 'Error: Cannot continue due to previous error.'); 1190 'Error: Cannot continue due to previous error.');
1180 } 1191 }
1181 1192
1182 // TODO(ahe): Rename to reportWarning when that method has been removed. 1193 // TODO(ahe): Rename to reportWarning when that method has been removed.
1183 void reportWarningCode(Spannable node, MessageKind errorCode, 1194 void reportWarningCode(Spannable node, MessageKind errorCode,
1184 [Map arguments = const {}]) { 1195 [Map arguments = const {}]) {
1185 reportMessage(spanFromSpannable(node), 1196 reportMessage(spanFromSpannable(node),
1186 errorCode.error(arguments), 1197 errorCode.error(arguments, terseDiagnostics),
1187 api.Diagnostic.WARNING); 1198 api.Diagnostic.WARNING);
1188 } 1199 }
1189 1200
1190 void reportInfo(Spannable node, MessageKind errorCode, 1201 void reportInfo(Spannable node, MessageKind errorCode,
1191 [Map arguments = const {}]) { 1202 [Map arguments = const {}]) {
1192 reportMessage(spanFromSpannable(node), 1203 reportMessage(spanFromSpannable(node),
1193 errorCode.error(arguments), 1204 errorCode.error(arguments, terseDiagnostics),
1194 api.Diagnostic.INFO); 1205 api.Diagnostic.INFO);
1195 } 1206 }
1196 1207
1197 void reportHint(Spannable node, MessageKind errorCode, 1208 void reportHint(Spannable node, MessageKind errorCode,
1198 [Map arguments = const {}]) { 1209 [Map arguments = const {}]) {
1199 reportMessage(spanFromSpannable(node), 1210 reportMessage(spanFromSpannable(node),
1200 errorCode.error(arguments), 1211 errorCode.error(arguments, terseDiagnostics),
1201 api.Diagnostic.HINT); 1212 api.Diagnostic.HINT);
1202 } 1213 }
1203 1214
1204 /// For debugging only, print a message with a source location. 1215 /// For debugging only, print a message with a source location.
1205 void reportHere(Spannable node, String debugMessage) { 1216 void reportHere(Spannable node, String debugMessage) {
1206 reportInfo(node, MessageKind.GENERIC, {'text': 'HERE: $debugMessage'}); 1217 reportInfo(node, MessageKind.GENERIC, {'text': 'HERE: $debugMessage'});
1207 } 1218 }
1208 1219
1209 void reportInternalError(Spannable node, String message) { 1220 void reportInternalError(Spannable node, String message) {
1210 reportError( 1221 reportError(
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
1464 1475
1465 void close() {} 1476 void close() {}
1466 1477
1467 toString() => name; 1478 toString() => name;
1468 1479
1469 /// Convenience method for getting an [api.CompilerOutputProvider]. 1480 /// Convenience method for getting an [api.CompilerOutputProvider].
1470 static NullSink outputProvider(String name, String extension) { 1481 static NullSink outputProvider(String name, String extension) {
1471 return new NullSink('$name.$extension'); 1482 return new NullSink('$name.$extension');
1472 } 1483 }
1473 } 1484 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698