Index: frog/leg/scanner/byte_strings.dart |
=================================================================== |
--- frog/leg/scanner/byte_strings.dart (revision 5925) |
+++ frog/leg/scanner/byte_strings.dart (working copy) |
@@ -1,141 +0,0 @@ |
-// Copyright (c) 2011, 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. |
- |
-/** |
- * An abstract string representation. |
- */ |
-class ByteString implements SourceString { |
- final List<int> bytes; |
- final int offset; |
- final int length; |
- int _hashCode; |
- |
- ByteString(List<int> this.bytes, int this.offset, int this.length); |
- |
- abstract String get charset(); |
- |
- String slowToString() => new String.fromCharCodes( |
- new Utf8Decoder(bytes, offset, length).decodeRest()); |
- |
- String toString() => "ByteString(${slowToString()})"; |
- |
- bool operator ==(other) { |
- throw "should be overridden in subclass"; |
- } |
- |
- Iterator<int> iterator() => new Utf8Decoder(bytes, offset, length); |
- |
- int hashCode() { |
- if (_hashCode === null) { |
- _hashCode = computeHashCode(); |
- } |
- return _hashCode; |
- } |
- |
- int computeHashCode() { |
- int code = 1; |
- int end = offset + length; |
- for (int i = offset; i < end; i++) { |
- code += 19 * code + bytes[i]; |
- } |
- return code; |
- } |
- |
- printOn(StringBuffer sb) { |
- sb.add(slowToString()); |
- } |
- |
- bool isEmpty() => length == 0; |
-} |
- |
-/** |
- * A string that consists purely of 7bit ASCII characters. |
- */ |
-class AsciiString extends ByteString { |
- final String charset = "ASCII"; |
- |
- AsciiString(List<int> bytes, int offset, int length) |
- : super(bytes, offset, length); |
- |
- static AsciiString of(List<int> bytes, int offset, int length) { |
- AsciiString string = new AsciiString(bytes, offset, length); |
- return string; |
- } |
- |
- Iterator<int> iterator() => new AsciiStringIterator(bytes); |
- |
- SourceString copyWithoutQuotes(int initial, int terminal) { |
- return new AsciiString(bytes, offset + initial, |
- length - initial - terminal); |
- } |
- |
- |
- static AsciiString fromString(String string) { |
- List<int> bytes = string.charCodes(); |
- return AsciiString.of(bytes, 0, bytes.length); |
- } |
-} |
- |
- |
-class AsciiStringIterator implements Iterator<int> { |
- final List<int> bytes; |
- int offset; |
- final int end; |
- AsciiStringIterator(List<int> bytes) |
- : this.bytes = bytes, offset = 0, end = bytes.length; |
- AsciiStringIterator.range(List<int> bytes, int from, int length) |
- : this.bytes = bytes, offset = from, end = from + length; |
- bool hasNext() => offset < end; |
- int next() => bytes[offset++]; |
-} |
- |
- |
-/** |
- * A string that consists of characters that can be encoded as UTF-8. |
- */ |
-class Utf8String extends ByteString { |
- final String charset = "UTF8"; |
- |
- Utf8String(List<int> bytes, int offset, int length) |
- : super(bytes, offset, length); |
- |
- static Utf8String of(List<int> bytes, int offset, int length) { |
- return new Utf8String(bytes, offset, length); |
- } |
- |
- static Utf8String fromString(String string) { |
- throw "not implemented yet"; |
- } |
- |
- Iterator<int> iterator() => new Utf8Decoder(bytes, 0, length); |
- |
- SourceString copyWithoutQuotes(int initial, int terminal) { |
- assert((){ |
- // Only allow dropping ASCII characters, to guarantee that |
- // the resulting Utf8String is still valid. |
- for (int i = 0; i < initial; i++) { |
- if (bytes[offset + i] >= 0x80) return false; |
- } |
- for (int i = 0; i < terminal; i++) { |
- if (bytes[offset + length - terminal + i] >= 0x80) return false; |
- } |
- return true; |
- }); |
- // TODO(lrn): Check that first and last bytes use the same type of quotes. |
- return new Utf8String(bytes, offset + initial, |
- length - initial - terminal); |
- } |
-} |
- |
-/** |
- * A ByteString-valued token. |
- */ |
-class ByteStringToken extends Token { |
- final ByteString value; |
- |
- ByteStringToken(PrecedenceInfo info, ByteString this.value, int charOffset) |
- : super(info, charOffset); |
- |
- String toString() => value.toString(); |
-} |