| 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) {
 | 
| 
 |