| Index: pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart
 | 
| diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart
 | 
| index 056345b554da1136dfa5c49c9569878e5db0d346..b3be363b6691f8abd69cb8a0f748c8b93d5bb75c 100644
 | 
| --- a/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart
 | 
| +++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart
 | 
| @@ -6,64 +6,50 @@ library dart2js.js_emitter.startup_emitter.model_emitter;
 | 
|  
 | 
|  import 'dart:convert' show JsonEncoder;
 | 
|  
 | 
| -import 'package:js_runtime/shared/embedded_names.dart' show
 | 
| -    CLASS_FIELDS_EXTRACTOR,
 | 
| -    CLASS_ID_EXTRACTOR,
 | 
| -    CREATE_NEW_ISOLATE,
 | 
| -    DEFERRED_INITIALIZED,
 | 
| -    DEFERRED_LIBRARY_URIS,
 | 
| -    DEFERRED_LIBRARY_HASHES,
 | 
| -    GET_TYPE_FROM_NAME,
 | 
| -    INITIALIZE_EMPTY_INSTANCE,
 | 
| -    INITIALIZE_LOADED_HUNK,
 | 
| -    INSTANCE_FROM_CLASS_ID,
 | 
| -    INTERCEPTORS_BY_TAG,
 | 
| -    IS_HUNK_INITIALIZED,
 | 
| -    IS_HUNK_LOADED,
 | 
| -    LEAF_TAGS,
 | 
| -    MANGLED_GLOBAL_NAMES,
 | 
| -    MANGLED_NAMES,
 | 
| -    METADATA,
 | 
| -    NATIVE_SUPERCLASS_TAG_NAME,
 | 
| -    STATIC_FUNCTION_NAME_TO_CLOSURE,
 | 
| -    TYPE_TO_INTERCEPTOR_MAP,
 | 
| -    TYPES;
 | 
| +import 'package:js_runtime/shared/embedded_names.dart'
 | 
| +    show
 | 
| +        CLASS_FIELDS_EXTRACTOR,
 | 
| +        CLASS_ID_EXTRACTOR,
 | 
| +        CREATE_NEW_ISOLATE,
 | 
| +        DEFERRED_INITIALIZED,
 | 
| +        DEFERRED_LIBRARY_URIS,
 | 
| +        DEFERRED_LIBRARY_HASHES,
 | 
| +        GET_TYPE_FROM_NAME,
 | 
| +        INITIALIZE_EMPTY_INSTANCE,
 | 
| +        INITIALIZE_LOADED_HUNK,
 | 
| +        INSTANCE_FROM_CLASS_ID,
 | 
| +        INTERCEPTORS_BY_TAG,
 | 
| +        IS_HUNK_INITIALIZED,
 | 
| +        IS_HUNK_LOADED,
 | 
| +        LEAF_TAGS,
 | 
| +        MANGLED_GLOBAL_NAMES,
 | 
| +        MANGLED_NAMES,
 | 
| +        METADATA,
 | 
| +        NATIVE_SUPERCLASS_TAG_NAME,
 | 
| +        STATIC_FUNCTION_NAME_TO_CLOSURE,
 | 
| +        TYPE_TO_INTERCEPTOR_MAP,
 | 
| +        TYPES;
 | 
|  
 | 
|  import '../../common.dart';
 | 
| -import '../../constants/values.dart' show
 | 
| -    ConstantValue,
 | 
| -    FunctionConstantValue;
 | 
| -import '../../compiler.dart' show
 | 
| -    Compiler;
 | 
| -import '../../core_types.dart' show
 | 
| -    CoreClasses;
 | 
| -import '../../elements/elements.dart' show
 | 
| -    ClassElement,
 | 
| -    FunctionElement;
 | 
| -import '../../hash/sha1.dart' show
 | 
| -    Hasher;
 | 
| +import '../../constants/values.dart' show ConstantValue, FunctionConstantValue;
 | 
| +import '../../compiler.dart' show Compiler;
 | 
| +import '../../core_types.dart' show CoreClasses;
 | 
| +import '../../elements/elements.dart' show ClassElement, FunctionElement;
 | 
| +import '../../hash/sha1.dart' show Hasher;
 | 
|  import '../../io/code_output.dart';
 | 
| -import '../../io/line_column_provider.dart' show
 | 
| -    LineColumnCollector,
 | 
| -    LineColumnProvider;
 | 
| -import '../../io/source_map_builder.dart' show
 | 
| -    SourceMapBuilder;
 | 
| +import '../../io/line_column_provider.dart'
 | 
| +    show LineColumnCollector, LineColumnProvider;
 | 
| +import '../../io/source_map_builder.dart' show SourceMapBuilder;
 | 
|  import '../../js/js.dart' as js;
 | 
| -import '../../js_backend/js_backend.dart' show
 | 
| -    JavaScriptBackend,
 | 
| -    Namer,
 | 
| -    ConstantEmitter;
 | 
| -import '../../util/uri_extras.dart' show
 | 
| -    relativize;
 | 
| +import '../../js_backend/js_backend.dart'
 | 
| +    show JavaScriptBackend, Namer, ConstantEmitter;
 | 
| +import '../../util/uri_extras.dart' show relativize;
 | 
|  
 | 
|  import '../constant_ordering.dart' show deepCompareConstants;
 | 
|  import '../headers.dart';
 | 
| -import '../js_emitter.dart' show
 | 
| -    NativeEmitter;
 | 
| +import '../js_emitter.dart' show NativeEmitter;
 | 
|  
 | 
| -import '../js_emitter.dart' show
 | 
| -    buildTearOffCode,
 | 
| -    NativeGenerator;
 | 
| +import '../js_emitter.dart' show buildTearOffCode, NativeGenerator;
 | 
|  import '../model.dart';
 | 
|  
 | 
|  part 'deferred_fragment_hash.dart';
 | 
| @@ -79,7 +65,6 @@ class ModelEmitter {
 | 
|    // The full code that is written to each hunk part-file.
 | 
|    final Map<Fragment, CodeOutput> outputBuffers = <Fragment, CodeOutput>{};
 | 
|  
 | 
| -
 | 
|    JavaScriptBackend get backend => compiler.backend;
 | 
|  
 | 
|    /// For deferred loading we communicate the initializers via this global var.
 | 
| @@ -92,12 +77,11 @@ class ModelEmitter {
 | 
|    static const String typeNameProperty = r"builtin$cls";
 | 
|  
 | 
|    ModelEmitter(Compiler compiler, Namer namer, this.nativeEmitter,
 | 
| -               this.shouldGenerateSourceMap)
 | 
| +      this.shouldGenerateSourceMap)
 | 
|        : this.compiler = compiler,
 | 
|          this.namer = namer {
 | 
|      this.constantEmitter = new ConstantEmitter(
 | 
| -        compiler, namer, this.generateConstantReference,
 | 
| -        constantListGenerator);
 | 
| +        compiler, namer, this.generateConstantReference, constantListGenerator);
 | 
|    }
 | 
|  
 | 
|    DiagnosticReporter get reporter => compiler.reporter;
 | 
| @@ -117,9 +101,9 @@ class ModelEmitter {
 | 
|    }
 | 
|  
 | 
|    bool isConstantInlinedOrAlreadyEmitted(ConstantValue constant) {
 | 
| -    if (constant.isFunction) return true;    // Already emitted.
 | 
| -    if (constant.isPrimitive) return true;   // Inlined.
 | 
| -    if (constant.isDummy) return true;       // Inlined.
 | 
| +    if (constant.isFunction) return true; // Already emitted.
 | 
| +    if (constant.isPrimitive) return true; // Inlined.
 | 
| +    if (constant.isDummy) return true; // Inlined.
 | 
|      return false;
 | 
|    }
 | 
|  
 | 
| @@ -162,8 +146,8 @@ class ModelEmitter {
 | 
|      if (isConstantInlinedOrAlreadyEmitted(value)) {
 | 
|        return constantEmitter.generate(value);
 | 
|      }
 | 
| -    return js.js('#.#', [namer.globalObjectForConstant(value),
 | 
| -    namer.constantName(value)]);
 | 
| +    return js.js('#.#',
 | 
| +        [namer.globalObjectForConstant(value), namer.constantName(value)]);
 | 
|    }
 | 
|  
 | 
|    int emitProgram(Program program) {
 | 
| @@ -175,7 +159,7 @@ class ModelEmitter {
 | 
|          new FragmentEmitter(compiler, namer, backend, constantEmitter, this);
 | 
|  
 | 
|      Map<DeferredFragment, _DeferredFragmentHash> deferredHashTokens =
 | 
| -      new Map<DeferredFragment, _DeferredFragmentHash>();
 | 
| +        new Map<DeferredFragment, _DeferredFragmentHash>();
 | 
|      for (DeferredFragment fragment in deferredFragments) {
 | 
|        deferredHashTokens[fragment] = new _DeferredFragmentHash(fragment);
 | 
|      }
 | 
| @@ -190,7 +174,7 @@ class ModelEmitter {
 | 
|        js.Expression types =
 | 
|            program.metadataTypesForOutputUnit(fragment.outputUnit);
 | 
|        deferredFragmentsCode[fragment] = fragmentEmitter.emitDeferredFragment(
 | 
| -                fragment, types, program.holders);
 | 
| +          fragment, types, program.holders);
 | 
|      }
 | 
|  
 | 
|      js.TokenCounter counter = new js.TokenCounter();
 | 
| @@ -204,18 +188,16 @@ class ModelEmitter {
 | 
|  
 | 
|      // Now that we have written the deferred hunks, we can update the hash
 | 
|      // tokens in the main-fragment.
 | 
| -    deferredHashTokens.forEach((DeferredFragment key,
 | 
| -                                _DeferredFragmentHash token) {
 | 
| +    deferredHashTokens
 | 
| +        .forEach((DeferredFragment key, _DeferredFragmentHash token) {
 | 
|        token.setHash(hunkHashes[key]);
 | 
|      });
 | 
|  
 | 
|      writeMainFragment(mainFragment, mainCode,
 | 
| -      isSplit: program.deferredFragments.isNotEmpty);
 | 
| +        isSplit: program.deferredFragments.isNotEmpty);
 | 
|  
 | 
| -    if (backend.requiresPreamble &&
 | 
| -        !backend.htmlLibraryIsLoaded) {
 | 
| -      reporter.reportHintMessage(
 | 
| -          NO_LOCATION_SPANNABLE, MessageKind.PREAMBLE);
 | 
| +    if (backend.requiresPreamble && !backend.htmlLibraryIsLoaded) {
 | 
| +      reporter.reportHintMessage(NO_LOCATION_SPANNABLE, MessageKind.PREAMBLE);
 | 
|      }
 | 
|  
 | 
|      if (compiler.options.deferredMapUri != null) {
 | 
| @@ -252,7 +234,8 @@ class ModelEmitter {
 | 
|    }
 | 
|  
 | 
|    js.Statement buildDeferredInitializerGlobal() {
 | 
| -    return js.js.statement('self.#deferredInitializers = '
 | 
| +    return js.js.statement(
 | 
| +        'self.#deferredInitializers = '
 | 
|          'self.#deferredInitializers || Object.create(null);',
 | 
|          {'deferredInitializers': deferredInitializersGlobal});
 | 
|    }
 | 
| @@ -270,18 +253,18 @@ class ModelEmitter {
 | 
|      }
 | 
|  
 | 
|      CodeOutput mainOutput = new StreamCodeOutput(
 | 
| -            compiler.outputProvider('', 'js'),
 | 
| -            codeOutputListeners);
 | 
| +        compiler.outputProvider('', 'js'), codeOutputListeners);
 | 
|      outputBuffers[fragment] = mainOutput;
 | 
|  
 | 
|      js.Program program = new js.Program([
 | 
| -        buildGeneratedBy(),
 | 
| -        new js.Comment(HOOKS_API_USAGE),
 | 
| -        isSplit ? buildDeferredInitializerGlobal() : new js.Block.empty(),
 | 
| -        code]);
 | 
| +      buildGeneratedBy(),
 | 
| +      new js.Comment(HOOKS_API_USAGE),
 | 
| +      isSplit ? buildDeferredInitializerGlobal() : new js.Block.empty(),
 | 
| +      code
 | 
| +    ]);
 | 
|  
 | 
| -    mainOutput.addBuffer(js.createCodeBuffer(program, compiler,
 | 
| -        monitor: compiler.dumpInfoTask));
 | 
| +    mainOutput.addBuffer(
 | 
| +        js.createCodeBuffer(program, compiler, monitor: compiler.dumpInfoTask));
 | 
|  
 | 
|      if (shouldGenerateSourceMap) {
 | 
|        mainOutput.add(generateSourceMapTag(
 | 
| @@ -330,12 +313,13 @@ class ModelEmitter {
 | 
|      //   deferredInitializer[<hash>] = deferredInitializer.current;
 | 
|  
 | 
|      js.Program program = new js.Program([
 | 
| -        buildGeneratedBy(),
 | 
| -        buildDeferredInitializerGlobal(),
 | 
| -        js.js.statement('$deferredInitializersGlobal.current = #', code)]);
 | 
| +      buildGeneratedBy(),
 | 
| +      buildDeferredInitializerGlobal(),
 | 
| +      js.js.statement('$deferredInitializersGlobal.current = #', code)
 | 
| +    ]);
 | 
|  
 | 
| -    output.addBuffer(js.createCodeBuffer(program, compiler,
 | 
| -        monitor: compiler.dumpInfoTask));
 | 
| +    output.addBuffer(
 | 
| +        js.createCodeBuffer(program, compiler, monitor: compiler.dumpInfoTask));
 | 
|  
 | 
|      // Make a unique hash of the code (before the sourcemaps are added)
 | 
|      // This will be used to retrieve the initializing function from the global
 | 
| @@ -357,15 +341,15 @@ class ModelEmitter {
 | 
|          String mapFileName = hunkFileName + ".map";
 | 
|          List<String> mapSegments = sourceMapUri.pathSegments.toList();
 | 
|          mapSegments[mapSegments.length - 1] = mapFileName;
 | 
| -        mapUri = compiler.options.sourceMapUri
 | 
| -            .replace(pathSegments: mapSegments);
 | 
| +        mapUri =
 | 
| +            compiler.options.sourceMapUri.replace(pathSegments: mapSegments);
 | 
|        }
 | 
|  
 | 
|        if (outputUri != null) {
 | 
|          List<String> partSegments = outputUri.pathSegments.toList();
 | 
|          partSegments[partSegments.length - 1] = hunkFileName;
 | 
| -        partUri = compiler.options.outputUri
 | 
| -            .replace(pathSegments: partSegments);
 | 
| +        partUri =
 | 
| +            compiler.options.outputUri.replace(pathSegments: partSegments);
 | 
|        }
 | 
|  
 | 
|        output.add(generateSourceMapTag(mapUri, partUri));
 | 
| @@ -389,17 +373,14 @@ class ModelEmitter {
 | 
|      return '';
 | 
|    }
 | 
|  
 | 
| -
 | 
| -  void outputSourceMap(CodeOutput output,
 | 
| -                       LineColumnProvider lineColumnProvider,
 | 
| -                       String name,
 | 
| -                       [Uri sourceMapUri,
 | 
| -                       Uri fileUri]) {
 | 
| +  void outputSourceMap(
 | 
| +      CodeOutput output, LineColumnProvider lineColumnProvider, String name,
 | 
| +      [Uri sourceMapUri, Uri fileUri]) {
 | 
|      if (!shouldGenerateSourceMap) return;
 | 
|      // Create a source file for the compilation output. This allows using
 | 
|      // [:getLine:] to transform offsets to line numbers in [SourceMapBuilder].
 | 
|      SourceMapBuilder sourceMapBuilder =
 | 
| -    new SourceMapBuilder(sourceMapUri, fileUri, lineColumnProvider);
 | 
| +        new SourceMapBuilder(sourceMapUri, fileUri, lineColumnProvider);
 | 
|      output.forEachSourceLocation(sourceMapBuilder.addMapping);
 | 
|      String sourceMap = sourceMapBuilder.build();
 | 
|      compiler.outputProvider(name, 'js.map')
 | 
| @@ -419,7 +400,7 @@ class ModelEmitter {
 | 
|          "needed for a given deferred library import.";
 | 
|      mapping.addAll(compiler.deferredLoadTask.computeDeferredMap());
 | 
|      compiler.outputProvider(
 | 
| -          compiler.options.deferredMapUri.path, 'deferred_map')
 | 
| +        compiler.options.deferredMapUri.path, 'deferred_map')
 | 
|        ..add(const JsonEncoder.withIndent("  ").convert(mapping))
 | 
|        ..close();
 | 
|    }
 | 
| 
 |