Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(423)

Side by Side Diff: sdk/lib/_internal/compiler/implementation/scanner/byte_strings.dart

Issue 11783009: Big merge from experimental to bleeding edge. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 /** 5 /**
6 * An abstract string representation. 6 * An abstract string representation.
7 */ 7 */
8 class ByteString implements SourceString { 8 abstract class ByteString extends Iterable<int> implements SourceString {
9 final List<int> bytes; 9 final List<int> bytes;
10 final int offset; 10 final int offset;
11 final int length; 11 final int length;
12 int _hashCode; 12 int _hashCode;
13 13
14 ByteString(List<int> this.bytes, int this.offset, int this.length); 14 ByteString(List<int> this.bytes, int this.offset, int this.length);
15 15
16 String get charset; 16 String get charset;
17 17
18 String slowToString() => new String.fromCharCodes( 18 String slowToString() => new String.fromCharCodes(
19 new Utf8Decoder(bytes, offset, length).decodeRest()); 19 new Utf8Decoder(bytes, offset, length).decodeRest());
20 20
21 String toString() => "ByteString(${slowToString()})"; 21 String toString() => "ByteString(${slowToString()})";
22 22
23 bool operator ==(other) { 23 bool operator ==(other) {
24 throw "should be overridden in subclass"; 24 throw "should be overridden in subclass";
25 } 25 }
26 26
27 Iterator<int> iterator() => new Utf8Decoder(bytes, offset, length); 27 Iterator<int> get iterator => new Utf8Decoder(bytes, offset, length);
28 28
29 int get hashCode { 29 int get hashCode {
30 if (_hashCode == null) { 30 if (_hashCode == null) {
31 _hashCode = computeHashCode(); 31 _hashCode = computeHashCode();
32 } 32 }
33 return _hashCode; 33 return _hashCode;
34 } 34 }
35 35
36 int computeHashCode() { 36 int computeHashCode() {
37 int code = 1; 37 int code = 1;
(...skipping 21 matching lines...) Expand all
59 final String charset = "ASCII"; 59 final String charset = "ASCII";
60 60
61 AsciiString(List<int> bytes, int offset, int length) 61 AsciiString(List<int> bytes, int offset, int length)
62 : super(bytes, offset, length); 62 : super(bytes, offset, length);
63 63
64 static AsciiString of(List<int> bytes, int offset, int length) { 64 static AsciiString of(List<int> bytes, int offset, int length) {
65 AsciiString string = new AsciiString(bytes, offset, length); 65 AsciiString string = new AsciiString(bytes, offset, length);
66 return string; 66 return string;
67 } 67 }
68 68
69 Iterator<int> iterator() => new AsciiStringIterator(bytes); 69 Iterator<int> get iterator => new AsciiStringIterator(bytes);
70 70
71 SourceString copyWithoutQuotes(int initial, int terminal) { 71 SourceString copyWithoutQuotes(int initial, int terminal) {
72 return new AsciiString(bytes, offset + initial, 72 return new AsciiString(bytes, offset + initial,
73 length - initial - terminal); 73 length - initial - terminal);
74 } 74 }
75 75
76 76
77 static AsciiString fromString(String string) { 77 static AsciiString fromString(String string) {
78 List<int> bytes = string.charCodes; 78 List<int> bytes = string.charCodes;
79 return AsciiString.of(bytes, 0, bytes.length); 79 return AsciiString.of(bytes, 0, bytes.length);
80 } 80 }
81 } 81 }
82 82
83 83
84 class AsciiStringIterator implements Iterator<int> { 84 class AsciiStringIterator implements Iterator<int> {
85 final List<int> bytes; 85 final List<int> bytes;
86 int offset; 86 int offset;
87 final int end; 87 final int end;
88 int _current;
89
88 AsciiStringIterator(List<int> bytes) 90 AsciiStringIterator(List<int> bytes)
89 : this.bytes = bytes, offset = 0, end = bytes.length; 91 : this.bytes = bytes, offset = 0, end = bytes.length;
90 AsciiStringIterator.range(List<int> bytes, int from, int length) 92 AsciiStringIterator.range(List<int> bytes, int from, int length)
91 : this.bytes = bytes, offset = from, end = from + length; 93 : this.bytes = bytes, offset = from, end = from + length;
92 bool get hasNext => offset < end; 94
93 int next() => bytes[offset++]; 95 int get current => _current;
96 bool moveNext() {
97 if (offset < end) {
98 _current = bytes[offset++];
99 return true;
100 }
101 _current = null;
102 return false;
103 }
94 } 104 }
95 105
96 106
97 /** 107 /**
98 * A string that consists of characters that can be encoded as UTF-8. 108 * A string that consists of characters that can be encoded as UTF-8.
99 */ 109 */
100 class Utf8String extends ByteString { 110 class Utf8String extends ByteString {
101 final String charset = "UTF8"; 111 final String charset = "UTF8";
102 112
103 Utf8String(List<int> bytes, int offset, int length) 113 Utf8String(List<int> bytes, int offset, int length)
104 : super(bytes, offset, length); 114 : super(bytes, offset, length);
105 115
106 static Utf8String of(List<int> bytes, int offset, int length) { 116 static Utf8String of(List<int> bytes, int offset, int length) {
107 return new Utf8String(bytes, offset, length); 117 return new Utf8String(bytes, offset, length);
108 } 118 }
109 119
110 static Utf8String fromString(String string) { 120 static Utf8String fromString(String string) {
111 throw "not implemented yet"; 121 throw "not implemented yet";
112 } 122 }
113 123
114 Iterator<int> iterator() => new Utf8Decoder(bytes, 0, length); 124 Iterator<int> get iterator => new Utf8Decoder(bytes, 0, length);
115 125
116 SourceString copyWithoutQuotes(int initial, int terminal) { 126 SourceString copyWithoutQuotes(int initial, int terminal) {
117 assert((){ 127 assert((){
118 // Only allow dropping ASCII characters, to guarantee that 128 // Only allow dropping ASCII characters, to guarantee that
119 // the resulting Utf8String is still valid. 129 // the resulting Utf8String is still valid.
120 for (int i = 0; i < initial; i++) { 130 for (int i = 0; i < initial; i++) {
121 if (bytes[offset + i] >= 0x80) return false; 131 if (bytes[offset + i] >= 0x80) return false;
122 } 132 }
123 for (int i = 0; i < terminal; i++) { 133 for (int i = 0; i < terminal; i++) {
124 if (bytes[offset + length - terminal + i] >= 0x80) return false; 134 if (bytes[offset + length - terminal + i] >= 0x80) return false;
(...skipping 10 matching lines...) Expand all
135 * A ByteString-valued token. 145 * A ByteString-valued token.
136 */ 146 */
137 class ByteStringToken extends Token { 147 class ByteStringToken extends Token {
138 final ByteString value; 148 final ByteString value;
139 149
140 ByteStringToken(PrecedenceInfo info, ByteString this.value, int charOffset) 150 ByteStringToken(PrecedenceInfo info, ByteString this.value, int charOffset)
141 : super(info, charOffset); 151 : super(info, charOffset);
142 152
143 String toString() => value.toString(); 153 String toString() => value.toString();
144 } 154 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698