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

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: Variable initialized too early. 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 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 * maps. 324 * maps.
325 */ 325 */
326 final Uri sourceMapUri; 326 final Uri sourceMapUri;
327 327
328 /** 328 /**
329 * The name to use for the global JS object in JS output. Default 329 * The name to use for the global JS object in JS output. Default
330 * value is "$". 330 * value is "$".
331 */ 331 */
332 final String globalJsName; 332 final String globalJsName;
333 333
334 /// Emit terse diagnostics without howToFix.
335 final bool terseDiagnostics;
336
334 final api.CompilerOutputProvider outputProvider; 337 final api.CompilerOutputProvider outputProvider;
335 338
336 bool disableInlining = false; 339 bool disableInlining = false;
337 340
338 List<Uri> librariesToAnalyzeWhenRun; 341 List<Uri> librariesToAnalyzeWhenRun;
339 342
340 final Tracer tracer; 343 final Tracer tracer;
341 344
342 CompilerTask measuredTask; 345 CompilerTask measuredTask;
343 Element _currentElement; 346 Element _currentElement;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
380 383
381 // Initialized after mirrorSystemClass has been resolved. 384 // Initialized after mirrorSystemClass has been resolved.
382 FunctionElement mirrorSystemGetNameFunction; 385 FunctionElement mirrorSystemGetNameFunction;
383 386
384 // Initialized when dart:_collection-dev is loaded. 387 // Initialized when dart:_collection-dev is loaded.
385 ClassElement symbolImplementationClass; 388 ClassElement symbolImplementationClass;
386 389
387 // Initialized when symbolImplementationClass has been resolved. 390 // Initialized when symbolImplementationClass has been resolved.
388 FunctionElement symbolValidatedConstructor; 391 FunctionElement symbolValidatedConstructor;
389 392
393 // Initialized when mirrorsUsedClass has been resolved.
394 FunctionElement mirrorsUsedConstructor;
395
390 // Initialized when dart:mirrors is loaded. 396 // Initialized when dart:mirrors is loaded.
391 ClassElement deferredLibraryClass; 397 ClassElement deferredLibraryClass;
392 398
393 ClassElement jsInvocationMirrorClass; 399 ClassElement jsInvocationMirrorClass;
394 /// Document class from dart:mirrors. 400 /// Document class from dart:mirrors.
395 ClassElement documentClass; 401 ClassElement documentClass;
396 Element assertMethod; 402 Element assertMethod;
397 Element identicalFunction; 403 Element identicalFunction;
398 Element functionApplyMethod; 404 Element functionApplyMethod;
399 Element invokeOnMethod; 405 Element invokeOnMethod;
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
518 this.analyzeAllFlag: false, 524 this.analyzeAllFlag: false,
519 bool analyzeOnly: false, 525 bool analyzeOnly: false,
520 bool analyzeSignaturesOnly: false, 526 bool analyzeSignaturesOnly: false,
521 this.rejectDeprecatedFeatures: false, 527 this.rejectDeprecatedFeatures: false,
522 this.checkDeprecationInSdk: false, 528 this.checkDeprecationInSdk: false,
523 this.preserveComments: false, 529 this.preserveComments: false,
524 this.verbose: false, 530 this.verbose: false,
525 this.sourceMapUri: null, 531 this.sourceMapUri: null,
526 this.buildId: UNDETERMINED_BUILD_ID, 532 this.buildId: UNDETERMINED_BUILD_ID,
527 this.globalJsName: r'$', 533 this.globalJsName: r'$',
534 this.terseDiagnostics: false,
528 outputProvider, 535 outputProvider,
529 List<String> strips: const []}) 536 List<String> strips: const []})
530 : this.analyzeOnly = analyzeOnly || analyzeSignaturesOnly, 537 : this.analyzeOnly = analyzeOnly || analyzeSignaturesOnly,
531 this.analyzeSignaturesOnly = analyzeSignaturesOnly, 538 this.analyzeSignaturesOnly = analyzeSignaturesOnly,
532 this.outputProvider = (outputProvider == null) 539 this.outputProvider = (outputProvider == null)
533 ? NullSink.outputProvider 540 ? NullSink.outputProvider
534 : outputProvider { 541 : outputProvider {
535 world = new World(this); 542 world = new World(this);
536 543
537 closureMapping.ClosureNamer closureNamer; 544 closureMapping.ClosureNamer closureNamer;
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
739 746
740 void onClassResolved(ClassElement cls) { 747 void onClassResolved(ClassElement cls) {
741 if (mirrorSystemClass == cls) { 748 if (mirrorSystemClass == cls) {
742 mirrorSystemGetNameFunction = 749 mirrorSystemGetNameFunction =
743 cls.lookupLocalMember(const SourceString('getName')); 750 cls.lookupLocalMember(const SourceString('getName'));
744 } else if (symbolClass == cls) { 751 } else if (symbolClass == cls) {
745 symbolConstructor = cls.constructors.head; 752 symbolConstructor = cls.constructors.head;
746 } else if (symbolImplementationClass == cls) { 753 } else if (symbolImplementationClass == cls) {
747 symbolValidatedConstructor = symbolImplementationClass.lookupConstructor( 754 symbolValidatedConstructor = symbolImplementationClass.lookupConstructor(
748 symbolValidatedConstructorSelector); 755 symbolValidatedConstructorSelector);
756 } else if (mirrorsUsedClass == cls) {
757 mirrorsUsedConstructor = cls.constructors.head;
749 } 758 }
750 } 759 }
751 760
752 LibraryElement scanBuiltinLibrary(String filename); 761 LibraryElement scanBuiltinLibrary(String filename);
753 762
754 void initializeSpecialClasses() { 763 void initializeSpecialClasses() {
755 final List missingCoreClasses = []; 764 final List missingCoreClasses = [];
756 ClassElement lookupCoreClass(String name) { 765 ClassElement lookupCoreClass(String name) {
757 ClassElement result = coreLibrary.find(new SourceString(name)); 766 ClassElement result = coreLibrary.find(new SourceString(name));
758 if (result == null) { 767 if (result == null) {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
794 boundClosureClass = lookupHelperClass('BoundClosure'); 803 boundClosureClass = lookupHelperClass('BoundClosure');
795 closureClass = lookupHelperClass('Closure'); 804 closureClass = lookupHelperClass('Closure');
796 dynamicClass = lookupHelperClass('Dynamic_'); 805 dynamicClass = lookupHelperClass('Dynamic_');
797 nullClass = lookupHelperClass('Null'); 806 nullClass = lookupHelperClass('Null');
798 if (!missingHelperClasses.isEmpty) { 807 if (!missingHelperClasses.isEmpty) {
799 internalErrorOnElement(jsHelperLibrary, 808 internalErrorOnElement(jsHelperLibrary,
800 'dart:_js_helper library does not contain required classes: ' 809 'dart:_js_helper library does not contain required classes: '
801 '$missingHelperClasses'); 810 '$missingHelperClasses');
802 } 811 }
803 812
804 types = new Types(this, dynamicClass); 813 if (types == null) {
814 types = new Types(this, dynamicClass);
815 }
805 backend.initializeHelperClasses(); 816 backend.initializeHelperClasses();
806 817
807 dynamicClass.ensureResolved(this); 818 dynamicClass.ensureResolved(this);
808 } 819 }
809 820
810 Element _unnamedListConstructor; 821 Element _unnamedListConstructor;
811 Element get unnamedListConstructor { 822 Element get unnamedListConstructor {
812 if (_unnamedListConstructor != null) return _unnamedListConstructor; 823 if (_unnamedListConstructor != null) return _unnamedListConstructor;
813 Selector callConstructor = new Selector.callConstructor( 824 Selector callConstructor = new Selector.callConstructor(
814 const SourceString(""), listClass.getLibrary()); 825 const SourceString(""), listClass.getLibrary());
(...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after
1164 } 1175 }
1165 SourceSpan span = spanFromNode(node); 1176 SourceSpan span = spanFromNode(node);
1166 1177
1167 reportDiagnostic(span, '$message', api.Diagnostic.WARNING); 1178 reportDiagnostic(span, '$message', api.Diagnostic.WARNING);
1168 } 1179 }
1169 1180
1170 void reportError(Spannable node, 1181 void reportError(Spannable node,
1171 MessageKind errorCode, 1182 MessageKind errorCode,
1172 [Map arguments = const {}]) { 1183 [Map arguments = const {}]) {
1173 reportMessage(spanFromSpannable(node), 1184 reportMessage(spanFromSpannable(node),
1174 errorCode.error(arguments), 1185 errorCode.error(arguments, terseDiagnostics),
1175 api.Diagnostic.ERROR); 1186 api.Diagnostic.ERROR);
1176 } 1187 }
1177 1188
1178 void reportFatalError(Spannable node, MessageKind errorCode, 1189 void reportFatalError(Spannable node, MessageKind errorCode,
1179 [Map arguments = const {}]) { 1190 [Map arguments = const {}]) {
1180 reportError(node, errorCode, arguments); 1191 reportError(node, errorCode, arguments);
1181 // TODO(ahe): Make this only abort the current method. 1192 // TODO(ahe): Make this only abort the current method.
1182 throw new CompilerCancelledException( 1193 throw new CompilerCancelledException(
1183 'Error: Cannot continue due to previous error.'); 1194 'Error: Cannot continue due to previous error.');
1184 } 1195 }
1185 1196
1186 // TODO(ahe): Rename to reportWarning when that method has been removed. 1197 // TODO(ahe): Rename to reportWarning when that method has been removed.
1187 void reportWarningCode(Spannable node, MessageKind errorCode, 1198 void reportWarningCode(Spannable node, MessageKind errorCode,
1188 [Map arguments = const {}]) { 1199 [Map arguments = const {}]) {
1189 reportMessage(spanFromSpannable(node), 1200 reportMessage(spanFromSpannable(node),
1190 errorCode.error(arguments), 1201 errorCode.error(arguments, terseDiagnostics),
1191 api.Diagnostic.WARNING); 1202 api.Diagnostic.WARNING);
1192 } 1203 }
1193 1204
1194 void reportInfo(Spannable node, MessageKind errorCode, 1205 void reportInfo(Spannable node, MessageKind errorCode,
1195 [Map arguments = const {}]) { 1206 [Map arguments = const {}]) {
1196 reportMessage(spanFromSpannable(node), 1207 reportMessage(spanFromSpannable(node),
1197 errorCode.error(arguments), 1208 errorCode.error(arguments, terseDiagnostics),
1198 api.Diagnostic.INFO); 1209 api.Diagnostic.INFO);
1199 } 1210 }
1200 1211
1201 void reportHint(Spannable node, MessageKind errorCode, 1212 void reportHint(Spannable node, MessageKind errorCode,
1202 [Map arguments = const {}]) { 1213 [Map arguments = const {}]) {
1203 reportMessage(spanFromSpannable(node), 1214 reportMessage(spanFromSpannable(node),
1204 errorCode.error(arguments), 1215 errorCode.error(arguments, terseDiagnostics),
1205 api.Diagnostic.HINT); 1216 api.Diagnostic.HINT);
1206 } 1217 }
1207 1218
1208 /// For debugging only, print a message with a source location. 1219 /// For debugging only, print a message with a source location.
1209 void reportHere(Spannable node, String debugMessage) { 1220 void reportHere(Spannable node, String debugMessage) {
1210 reportInfo(node, MessageKind.GENERIC, {'text': 'HERE: $debugMessage'}); 1221 reportInfo(node, MessageKind.GENERIC, {'text': 'HERE: $debugMessage'});
1211 } 1222 }
1212 1223
1213 void reportInternalError(Spannable node, String message) { 1224 void reportInternalError(Spannable node, String message) {
1214 reportError( 1225 reportError(
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
1486 1497
1487 void close() {} 1498 void close() {}
1488 1499
1489 toString() => name; 1500 toString() => name;
1490 1501
1491 /// Convenience method for getting an [api.CompilerOutputProvider]. 1502 /// Convenience method for getting an [api.CompilerOutputProvider].
1492 static NullSink outputProvider(String name, String extension) { 1503 static NullSink outputProvider(String name, String extension) {
1493 return new NullSink('$name.$extension'); 1504 return new NullSink('$name.$extension');
1494 } 1505 }
1495 } 1506 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698