| Index: pkg/compiler/lib/src/tree/dartstring.dart
 | 
| diff --git a/pkg/compiler/lib/src/tree/dartstring.dart b/pkg/compiler/lib/src/tree/dartstring.dart
 | 
| deleted file mode 100644
 | 
| index 72d0b0c060ca0dd37ae01b62ea91cf78bdc36486..0000000000000000000000000000000000000000
 | 
| --- a/pkg/compiler/lib/src/tree/dartstring.dart
 | 
| +++ /dev/null
 | 
| @@ -1,251 +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.
 | 
| -
 | 
| -part of tree;
 | 
| -
 | 
| -/**
 | 
| - * The [DartString] type represents a Dart string value as a sequence of Unicode
 | 
| - * Scalar Values.
 | 
| - * After parsing, any valid [LiteralString] will contain a [DartString]
 | 
| - * representing its content after removing quotes and resolving escapes in
 | 
| - * its source.
 | 
| - */
 | 
| -abstract class DartString extends IterableBase<int> {
 | 
| -  factory DartString.empty() => const LiteralDartString("");
 | 
| -  // This is a convenience constructor. If you need a const literal DartString,
 | 
| -  // use [const LiteralDartString(string)] directly.
 | 
| -  factory DartString.literal(String string) => new LiteralDartString(string);
 | 
| -  factory DartString.rawString(String source, int length) =>
 | 
| -      new RawSourceDartString(source, length);
 | 
| -  factory DartString.escapedString(String source, int length) =>
 | 
| -      new EscapedSourceDartString(source, length);
 | 
| -  factory DartString.concat(DartString first, DartString second) {
 | 
| -    if (first.isEmpty) return second;
 | 
| -    if (second.isEmpty) return first;
 | 
| -    return new ConsDartString(first, second);
 | 
| -  }
 | 
| -  const DartString();
 | 
| -
 | 
| -  /**
 | 
| -   * The length of this [DartString], which is the string length after
 | 
| -   * escapes have been resolved.
 | 
| -   */
 | 
| -  int get length;
 | 
| -  bool get isEmpty => length == 0;
 | 
| -
 | 
| -  Iterator<int> get iterator;
 | 
| -
 | 
| -  /**
 | 
| -   * The string represented by this [DartString].
 | 
| -   */
 | 
| -  String slowToString();
 | 
| -
 | 
| -  bool operator ==(var other) {
 | 
| -    if (other is !DartString) return false;
 | 
| -    DartString otherString = other;
 | 
| -    if (length != otherString.length) return false;
 | 
| -    Iterator it1 = iterator;
 | 
| -    Iterator it2 = otherString.iterator;
 | 
| -    while (it1.moveNext()) {
 | 
| -      if (!it2.moveNext()) return false;
 | 
| -      if (it1.current != it2.current) return false;
 | 
| -    }
 | 
| -    return true;
 | 
| -  }
 | 
| -
 | 
| -  int get hashCode => throw new UnsupportedError('DartString.hashCode');
 | 
| -
 | 
| -  /**
 | 
| -   * A textual representation of this [DartString] with some debugging
 | 
| -   * information.
 | 
| -   */
 | 
| -  String toString() => "DartString#${length}:${slowToString()}";
 | 
| -}
 | 
| -
 | 
| -
 | 
| -/**
 | 
| - * A [DartString] where the content is represented by an actual [String].
 | 
| - */
 | 
| -class LiteralDartString extends DartString {
 | 
| -  final String string;
 | 
| -  const LiteralDartString(this.string);
 | 
| -  int get length => string.length;
 | 
| -  Iterator<int> get iterator => string.codeUnits.iterator;
 | 
| -  String slowToString() => string;
 | 
| -}
 | 
| -
 | 
| -/**
 | 
| - * A [DartString] whereSource the content comes from a slice of the program
 | 
| - * source.
 | 
| - */
 | 
| -abstract class SourceBasedDartString extends DartString {
 | 
| -  /**
 | 
| -   * The source string containing explicit escapes from which this [DartString]
 | 
| -   * is built.
 | 
| -   */
 | 
| -  final String source;
 | 
| -  final int length;
 | 
| -  SourceBasedDartString(this.source, this.length);
 | 
| -  Iterator<int> get iterator;
 | 
| -}
 | 
| -
 | 
| -/**
 | 
| - * Special case of a [SourceBasedDartString] where we know the source doesn't
 | 
| - * contain any escapes.
 | 
| - */
 | 
| -class RawSourceDartString extends SourceBasedDartString {
 | 
| -  RawSourceDartString(source, length) : super(source, length);
 | 
| -  Iterator<int> get iterator => source.codeUnits.iterator;
 | 
| -  String slowToString() => source;
 | 
| -}
 | 
| -
 | 
| -/**
 | 
| - * General case of a [SourceBasedDartString] where the source might contain
 | 
| - * escapes.
 | 
| - */
 | 
| -class EscapedSourceDartString extends SourceBasedDartString {
 | 
| -  String toStringCache;
 | 
| -  EscapedSourceDartString(source, length) : super(source, length);
 | 
| -  Iterator<int> get iterator {
 | 
| -    if (toStringCache != null) return toStringCache.codeUnits.iterator;
 | 
| -    return new StringEscapeIterator(source);
 | 
| -  }
 | 
| -  String slowToString() {
 | 
| -    if (toStringCache != null) return toStringCache;
 | 
| -    StringBuffer buffer = new StringBuffer();
 | 
| -    StringEscapeIterator it = new StringEscapeIterator(source);
 | 
| -    while (it.moveNext()) {
 | 
| -      buffer.writeCharCode(it.current);
 | 
| -    }
 | 
| -    toStringCache = buffer.toString();
 | 
| -    return toStringCache;
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -/**
 | 
| - * The concatenation of two [DartString]s.
 | 
| - */
 | 
| -class ConsDartString extends DartString {
 | 
| -  final DartString left;
 | 
| -  final DartString right;
 | 
| -  final int length;
 | 
| -  String toStringCache;
 | 
| -  ConsDartString(DartString left, DartString right)
 | 
| -      : this.left = left,
 | 
| -        this.right = right,
 | 
| -        length = left.length + right.length;
 | 
| -
 | 
| -  Iterator<int> get iterator => new ConsDartStringIterator(this);
 | 
| -
 | 
| -  String slowToString() {
 | 
| -    if (toStringCache != null) return toStringCache;
 | 
| -    toStringCache = left.slowToString() + right.slowToString();
 | 
| -    return toStringCache;
 | 
| -  }
 | 
| -  String get source => slowToString();
 | 
| -}
 | 
| -
 | 
| -class ConsDartStringIterator implements Iterator<int> {
 | 
| -  HasNextIterator<int> currentIterator;
 | 
| -  DartString right;
 | 
| -  bool hasNextLookAhead;
 | 
| -  int _current = null;
 | 
| -
 | 
| -  ConsDartStringIterator(ConsDartString cons)
 | 
| -      : currentIterator = new HasNextIterator<int>(cons.left.iterator),
 | 
| -        right = cons.right {
 | 
| -    hasNextLookAhead = currentIterator.hasNext;
 | 
| -    if (!hasNextLookAhead) {
 | 
| -      nextPart();
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  int get current => _current;
 | 
| -
 | 
| -  bool moveNext() {
 | 
| -    if (!hasNextLookAhead) {
 | 
| -      _current = null;
 | 
| -      return false;
 | 
| -    }
 | 
| -    _current = currentIterator.next();
 | 
| -    hasNextLookAhead = currentIterator.hasNext;
 | 
| -    if (!hasNextLookAhead) {
 | 
| -      nextPart();
 | 
| -    }
 | 
| -    return true;
 | 
| -  }
 | 
| -  void nextPart() {
 | 
| -    if (right != null) {
 | 
| -      currentIterator = new HasNextIterator<int>(right.iterator);
 | 
| -      right = null;
 | 
| -      hasNextLookAhead = currentIterator.hasNext;
 | 
| -    }
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -/**
 | 
| - *Iterator that returns the actual string contents of a string with escapes.
 | 
| - */
 | 
| -class StringEscapeIterator implements Iterator<int>{
 | 
| -  final Iterator<int> source;
 | 
| -  int _current = null;
 | 
| -
 | 
| -  StringEscapeIterator(String source) : this.source = source.codeUnits.iterator;
 | 
| -
 | 
| -  int get current => _current;
 | 
| -
 | 
| -  bool moveNext() {
 | 
| -    if (!source.moveNext()) {
 | 
| -      _current = null;
 | 
| -      return false;
 | 
| -    }
 | 
| -    int code = source.current;
 | 
| -    if (code != $BACKSLASH) {
 | 
| -      _current = code;
 | 
| -      return true;
 | 
| -    }
 | 
| -    source.moveNext();
 | 
| -    code = source.current;
 | 
| -    switch (code) {
 | 
| -      case $n: _current = $LF; break;
 | 
| -      case $r: _current = $CR; break;
 | 
| -      case $t: _current = $TAB; break;
 | 
| -      case $b: _current = $BS; break;
 | 
| -      case $f: _current = $FF; break;
 | 
| -      case $v: _current = $VTAB; break;
 | 
| -      case $x:
 | 
| -        source.moveNext();
 | 
| -        int value = hexDigitValue(source.current);
 | 
| -        source.moveNext();
 | 
| -        value = value * 16 + hexDigitValue(source.current);
 | 
| -        _current = value;
 | 
| -        break;
 | 
| -      case $u:
 | 
| -        int value = 0;
 | 
| -        source.moveNext();
 | 
| -        code = source.current;
 | 
| -        if (code == $OPEN_CURLY_BRACKET) {
 | 
| -          source.moveNext();
 | 
| -          while (source.current != $CLOSE_CURLY_BRACKET) {
 | 
| -            value = value * 16 + hexDigitValue(source.current);
 | 
| -            source.moveNext();
 | 
| -          }
 | 
| -          _current = value;
 | 
| -          break;
 | 
| -        }
 | 
| -        // Four digit hex value.
 | 
| -        value = hexDigitValue(code);
 | 
| -        for (int i = 0; i < 3; i++) {
 | 
| -          source.moveNext();
 | 
| -          value = value * 16 + hexDigitValue(source.current);
 | 
| -        }
 | 
| -        _current = value;
 | 
| -        break;
 | 
| -      default:
 | 
| -        _current = code;
 | 
| -    }
 | 
| -    return true;
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| 
 |