Index: dart/sdk/lib/_internal/compiler/implementation/compiler.dart |
diff --git a/dart/sdk/lib/_internal/compiler/implementation/compiler.dart b/dart/sdk/lib/_internal/compiler/implementation/compiler.dart |
index 01e5cc2813090a642cd612efb2c75984d6a7839b..cbfb3735f24d9ea16cc00dc70bfb2280b04a85b8 100644 |
--- a/dart/sdk/lib/_internal/compiler/implementation/compiler.dart |
+++ b/dart/sdk/lib/_internal/compiler/implementation/compiler.dart |
@@ -234,6 +234,9 @@ abstract class Compiler implements DiagnosticListener { |
ClassElement listClass; |
ClassElement typeClass; |
ClassElement mapClass; |
+ ClassElement deferLoadClass; |
+ ClassElement onLibraryLoadedClass; |
+ |
ClassElement jsInvocationMirrorClass; |
/// Document class from dart:mirrors. |
ClassElement documentClass; |
@@ -291,6 +294,7 @@ abstract class Compiler implements DiagnosticListener { |
ConstantHandler metadataHandler; |
EnqueueTask enqueuer; |
CompilerTask fileReadingTask; |
+ DeferredLoadTask deferredLoadTask; |
static const SourceString MAIN = const SourceString('main'); |
static const SourceString CALL_OPERATOR_NAME = const SourceString('call'); |
@@ -369,6 +373,7 @@ abstract class Compiler implements DiagnosticListener { |
checker = new TypeCheckerTask(this), |
typesTask = new ti.TypesTask(this), |
constantHandler = new ConstantHandler(this, backend.constantSystem), |
+ deferredLoadTask = new DeferredLoadTask(this), |
enqueuer = new EnqueueTask(this)]; |
tasks.addAll(backend.tasks); |
@@ -450,6 +455,8 @@ abstract class Compiler implements DiagnosticListener { |
return spanFromHInstruction(node); |
} else if (node is Element) { |
return spanFromElement(node); |
+ } else if (node is MetadataAnnotation) { |
+ return spanFromTokens(node.beginToken, node.beginToken); |
} else { |
throw 'No error location.'; |
} |
@@ -502,23 +509,25 @@ abstract class Compiler implements DiagnosticListener { |
void initializeSpecialClasses() { |
final List missingCoreClasses = []; |
- ClassElement lookupCoreClass(SourceString name) { |
- ClassElement result = coreLibrary.find(name); |
+ ClassElement lookupCoreClass(String name) { |
+ ClassElement result = coreLibrary.find(new SourceString(name)); |
if (result == null) { |
- missingCoreClasses.add(name.slowToString()); |
+ missingCoreClasses.add(name); |
} |
return result; |
} |
- objectClass = lookupCoreClass(const SourceString('Object')); |
- boolClass = lookupCoreClass(const SourceString('bool')); |
- numClass = lookupCoreClass(const SourceString('num')); |
- intClass = lookupCoreClass(const SourceString('int')); |
- doubleClass = lookupCoreClass(const SourceString('double')); |
- stringClass = lookupCoreClass(const SourceString('String')); |
- functionClass = lookupCoreClass(const SourceString('Function')); |
- listClass = lookupCoreClass(const SourceString('List')); |
- typeClass = lookupCoreClass(const SourceString('Type')); |
- mapClass = lookupCoreClass(const SourceString('Map')); |
+ objectClass = lookupCoreClass('Object'); |
+ boolClass = lookupCoreClass('bool'); |
+ numClass = lookupCoreClass('num'); |
+ intClass = lookupCoreClass('int'); |
+ doubleClass = lookupCoreClass('double'); |
+ stringClass = lookupCoreClass('String'); |
+ functionClass = lookupCoreClass('Function'); |
+ listClass = lookupCoreClass('List'); |
+ typeClass = lookupCoreClass('Type'); |
+ mapClass = lookupCoreClass('Map'); |
+ deferLoadClass = lookupCoreClass('DeferLoad'); |
+ onLibraryLoadedClass = lookupCoreClass('OnLibraryLoaded'); |
if (!missingCoreClasses.isEmpty) { |
internalErrorOnElement(coreLibrary, |
'dart:core library does not contain required classes: ' |
@@ -526,18 +535,17 @@ abstract class Compiler implements DiagnosticListener { |
} |
final List missingHelperClasses = []; |
- ClassElement lookupHelperClass(SourceString name) { |
- ClassElement result = jsHelperLibrary.find(name); |
+ ClassElement lookupHelperClass(String name) { |
+ ClassElement result = jsHelperLibrary.find(new SourceString(name)); |
if (result == null) { |
- missingHelperClasses.add(name.slowToString()); |
+ missingHelperClasses.add(name); |
} |
return result; |
} |
- jsInvocationMirrorClass = |
- lookupHelperClass(const SourceString('JSInvocationMirror')); |
- closureClass = lookupHelperClass(const SourceString('Closure')); |
- dynamicClass = lookupHelperClass(const SourceString('Dynamic_')); |
- nullClass = lookupHelperClass(const SourceString('Null')); |
+ jsInvocationMirrorClass = lookupHelperClass('JSInvocationMirror'); |
+ closureClass = lookupHelperClass('Closure'); |
+ dynamicClass = lookupHelperClass('Dynamic_'); |
+ nullClass = lookupHelperClass('Null'); |
if (!missingHelperClasses.isEmpty) { |
internalErrorOnElement(jsHelperLibrary, |
'dart:_js_helper library does not contain required classes: ' |
@@ -634,6 +642,8 @@ abstract class Compiler implements DiagnosticListener { |
} |
} |
+ deferredLoadTask.registerMainApp(mainApp); |
+ |
log('Resolving...'); |
phase = PHASE_RESOLVING; |
if (analyzeAll) { |