| Index: lib/compiler/implementation/js_backend/constant_emitter.dart | 
| diff --git a/lib/compiler/implementation/js_backend/constant_emitter.dart b/lib/compiler/implementation/js_backend/constant_emitter.dart | 
| deleted file mode 100644 | 
| index 0deca511506e520c03f7f7743bb3ea8d083cbf20..0000000000000000000000000000000000000000 | 
| --- a/lib/compiler/implementation/js_backend/constant_emitter.dart | 
| +++ /dev/null | 
| @@ -1,252 +0,0 @@ | 
| -// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file | 
| -// for details. All rights reserved. Use of this source code is governed by a | 
| -// BSD-style license that can be found in the LICENSE file. | 
| - | 
| -class ConstantEmitter implements ConstantVisitor { | 
| -  final Compiler compiler; | 
| -  final Namer namer; | 
| - | 
| -  CodeBuffer buffer; | 
| -  bool shouldEmitCanonicalVersion; | 
| - | 
| -  ConstantEmitter(this.compiler, this.namer); | 
| - | 
| -  /** | 
| -   * Unless the constant can be emitted multiple times (as for numbers and | 
| -   * strings) use the canonical name. | 
| -   */ | 
| -  void emitCanonicalVersionOfConstant(Constant constant, CodeBuffer newBuffer) { | 
| -    shouldEmitCanonicalVersion = true; | 
| -    buffer = newBuffer; | 
| -    _visit(constant); | 
| -  } | 
| - | 
| -  /** | 
| -   * Emit the JavaScript code of the constant. If the constant must be | 
| -   * canonicalized this method emits the initialization value. | 
| -   */ | 
| -  void emitJavaScriptCodeForConstant(Constant constant, CodeBuffer newBuffer) { | 
| -    shouldEmitCanonicalVersion = false; | 
| -    buffer = newBuffer; | 
| -    _visit(constant); | 
| -  } | 
| - | 
| -  _visit(Constant constant) { | 
| -    constant.accept(this); | 
| -  } | 
| - | 
| -  void visitSentinel(SentinelConstant constant) { | 
| -    if (shouldEmitCanonicalVersion) { | 
| -      buffer.add(namer.CURRENT_ISOLATE); | 
| -    } else { | 
| -      compiler.internalError( | 
| -          "The parameter sentinel constant does not need specific JS code"); | 
| -    } | 
| -  } | 
| - | 
| -  void visitFunction(FunctionConstant constant) { | 
| -    if (shouldEmitCanonicalVersion) { | 
| -      buffer.add(namer.isolatePropertiesAccess(constant.element)); | 
| -    } else { | 
| -      compiler.internalError( | 
| -          "The function constant does not need specific JS code"); | 
| -    } | 
| -  } | 
| - | 
| -  void visitNull(NullConstant constant) { | 
| -    buffer.add("null"); | 
| -  } | 
| - | 
| -  void visitInt(IntConstant constant) { | 
| -    buffer.add(constant.value.toString()); | 
| -  } | 
| - | 
| -  void visitDouble(DoubleConstant constant) { | 
| -    double value = constant.value; | 
| -    if (value.isNaN()) { | 
| -      buffer.add("(0/0)"); | 
| -    } else if (value == double.INFINITY) { | 
| -      buffer.add("(1/0)"); | 
| -    } else if (value == -double.INFINITY) { | 
| -      buffer.add("(-1/0)"); | 
| -    } else { | 
| -      buffer.add("$value"); | 
| -    } | 
| -  } | 
| - | 
| -  void visitTrue(TrueConstant constant) { | 
| -    buffer.add("true"); | 
| -  } | 
| - | 
| -  void visitFalse(FalseConstant constant) { | 
| -    buffer.add("false"); | 
| -  } | 
| - | 
| -  /** | 
| -   * Write the contents of the quoted string to a [CodeBuffer] in | 
| -   * a form that is valid as JavaScript string literal content. | 
| -   * The string is assumed quoted by single quote characters. | 
| -   */ | 
| -  void writeEscapedString(DartString string, | 
| -                          CodeBuffer buffer, | 
| -                          Node diagnosticNode) { | 
| -    Iterator<int> iterator = string.iterator(); | 
| -    while (iterator.hasNext()) { | 
| -      int code = iterator.next(); | 
| -      if (code === $SQ) { | 
| -        buffer.add(@"\'"); | 
| -      } else if (code === $LF) { | 
| -        buffer.add(@'\n'); | 
| -      } else if (code === $CR) { | 
| -        buffer.add(@'\r'); | 
| -      } else if (code === $LS) { | 
| -        // This Unicode line terminator and $PS are invalid in JS string | 
| -        // literals. | 
| -        buffer.add(@'\u2028'); | 
| -      } else if (code === $PS) { | 
| -        buffer.add(@'\u2029'); | 
| -      } else if (code === $BACKSLASH) { | 
| -        buffer.add(@'\\'); | 
| -      } else { | 
| -        if (code > 0xffff) { | 
| -          compiler.reportError( | 
| -              diagnosticNode, | 
| -              'Unhandled non-BMP character: U+${code.toRadixString(16)}'); | 
| -        } | 
| -        // TODO(lrn): Consider whether all codes above 0x7f really need to | 
| -        // be escaped. We build a Dart string here, so it should be a literal | 
| -        // stage that converts it to, e.g., UTF-8 for a JS interpreter. | 
| -        if (code < 0x20) { | 
| -          buffer.add(@'\x'); | 
| -          if (code < 0x10) buffer.add('0'); | 
| -          buffer.add(code.toRadixString(16)); | 
| -        } else if (code >= 0x80) { | 
| -          if (code < 0x100) { | 
| -            buffer.add(@'\x'); | 
| -          } else { | 
| -            buffer.add(@'\u'); | 
| -            if (code < 0x1000) { | 
| -              buffer.add('0'); | 
| -            } | 
| -          } | 
| -          buffer.add(code.toRadixString(16)); | 
| -        } else { | 
| -          buffer.addCharCode(code); | 
| -        } | 
| -      } | 
| -    } | 
| -  } | 
| - | 
| -  void visitString(StringConstant constant) { | 
| -    buffer.add("'"); | 
| -    writeEscapedString(constant.value, buffer, constant.node); | 
| -    buffer.add("'"); | 
| -  } | 
| - | 
| -  void emitCanonicalVersion(Constant constant) { | 
| -    String name = namer.constantName(constant); | 
| -    buffer.add(namer.isolatePropertiesAccessForConstant(name)); | 
| -  } | 
| - | 
| -  void visitList(ListConstant constant) { | 
| -    if (shouldEmitCanonicalVersion) { | 
| -      emitCanonicalVersion(constant); | 
| -    } else { | 
| -      shouldEmitCanonicalVersion = true; | 
| -      buffer.add("${namer.ISOLATE}.makeConstantList"); | 
| -      buffer.add("(["); | 
| -      for (int i = 0; i < constant.entries.length; i++) { | 
| -        if (i != 0) buffer.add(", "); | 
| -        _visit(constant.entries[i]); | 
| -      } | 
| -      buffer.add("])"); | 
| -    } | 
| -  } | 
| - | 
| -  String getJsConstructor(ClassElement element) { | 
| -    return namer.isolatePropertiesAccess(element); | 
| -  } | 
| - | 
| -  void visitMap(MapConstant constant) { | 
| -    if (shouldEmitCanonicalVersion) { | 
| -      emitCanonicalVersion(constant); | 
| -    } else { | 
| -      void writeJsMap() { | 
| -        buffer.add("{"); | 
| -        int valueIndex = 0; | 
| -        for (int i = 0; i < constant.keys.entries.length; i++) { | 
| -          StringConstant key = constant.keys.entries[i]; | 
| -          if (key.value == MapConstant.PROTO_PROPERTY) continue; | 
| - | 
| -          if (valueIndex != 0) buffer.add(", "); | 
| - | 
| -          // Keys in literal maps must be emitted in place. | 
| -          emitJavaScriptCodeForConstant(key, buffer); | 
| - | 
| -          buffer.add(": "); | 
| -          emitCanonicalVersionOfConstant(constant.values[valueIndex++], buffer); | 
| -        } | 
| -        buffer.add("}"); | 
| -        if (valueIndex != constant.values.length) { | 
| -          compiler.internalError("Bad value count."); | 
| -        } | 
| -      } | 
| - | 
| -      void badFieldCountError() { | 
| -        compiler.internalError( | 
| -          "Compiler and ConstantMap disagree on number of fields."); | 
| -      } | 
| - | 
| -      shouldEmitCanonicalVersion = true; | 
| - | 
| -      ClassElement classElement = constant.type.element; | 
| -      buffer.add("new "); | 
| -      buffer.add(getJsConstructor(classElement)); | 
| -      buffer.add("("); | 
| -      // The arguments of the JavaScript constructor for any given Dart class | 
| -      // are in the same order as the members of the class element. | 
| -      int emittedArgumentCount = 0; | 
| -      classElement.forEachInstanceField( | 
| -          includeBackendMembers: true, | 
| -          includeSuperMembers: true, | 
| -          f: (ClassElement enclosing, Element field) { | 
| -            if (emittedArgumentCount != 0) buffer.add(", "); | 
| -            if (field.name == MapConstant.LENGTH_NAME) { | 
| -              buffer.add(constant.keys.entries.length); | 
| -            } else if (field.name == MapConstant.JS_OBJECT_NAME) { | 
| -              writeJsMap(); | 
| -            } else if (field.name == MapConstant.KEYS_NAME) { | 
| -              emitCanonicalVersionOfConstant(constant.keys, buffer); | 
| -            } else if (field.name == MapConstant.PROTO_VALUE) { | 
| -              assert(constant.protoValue !== null); | 
| -              emitCanonicalVersionOfConstant(constant.protoValue, buffer); | 
| -            } else { | 
| -              badFieldCountError(); | 
| -            } | 
| -            emittedArgumentCount++; | 
| -          }); | 
| -      if ((constant.protoValue === null && emittedArgumentCount != 3) || | 
| -          (constant.protoValue !== null && emittedArgumentCount != 4)) { | 
| -        badFieldCountError(); | 
| -      } | 
| -      buffer.add(")"); | 
| -    } | 
| -  } | 
| - | 
| -  void visitConstructed(ConstructedConstant constant) { | 
| -    if (shouldEmitCanonicalVersion) { | 
| -      emitCanonicalVersion(constant); | 
| -    } else { | 
| -      shouldEmitCanonicalVersion = true; | 
| - | 
| -      buffer.add("new "); | 
| -      buffer.add(getJsConstructor(constant.type.element)); | 
| -      buffer.add("("); | 
| -      for (int i = 0; i < constant.fields.length; i++) { | 
| -        if (i != 0) buffer.add(", "); | 
| -        _visit(constant.fields[i]); | 
| -      } | 
| -      buffer.add(")"); | 
| -    } | 
| -  } | 
| -} | 
|  |