OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Features shared by parsing and pre-parsing scanners. | 5 // Features shared by parsing and pre-parsing scanners. |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <cmath> | 9 #include <cmath> |
10 | 10 |
(...skipping 1120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1131 } | 1131 } |
1132 } | 1132 } |
1133 Advance(); // consume '/' | 1133 Advance(); // consume '/' |
1134 | 1134 |
1135 literal.Complete(); | 1135 literal.Complete(); |
1136 | 1136 |
1137 return true; | 1137 return true; |
1138 } | 1138 } |
1139 | 1139 |
1140 | 1140 |
1141 bool Scanner::ScanLiteralUnicodeEscape() { | |
1142 DCHECK(c0_ == '\\'); | |
1143 AddLiteralChar(c0_); | |
1144 Advance(); | |
1145 int hex_digits_read = 0; | |
1146 if (c0_ == 'u') { | |
1147 AddLiteralChar(c0_); | |
1148 while (hex_digits_read < 4) { | |
1149 Advance(); | |
1150 if (!IsHexDigit(c0_)) break; | |
1151 AddLiteralChar(c0_); | |
1152 ++hex_digits_read; | |
1153 } | |
1154 } | |
1155 return hex_digits_read == 4; | |
1156 } | |
1157 | |
1158 | |
1159 bool Scanner::ScanRegExpFlags() { | 1141 bool Scanner::ScanRegExpFlags() { |
1160 // Scan regular expression flags. | 1142 // Scan regular expression flags. |
1161 LiteralScope literal(this); | 1143 LiteralScope literal(this); |
1162 while (c0_ >= 0 && unicode_cache_->IsIdentifierPart(c0_)) { | 1144 while (c0_ >= 0 && unicode_cache_->IsIdentifierPart(c0_)) { |
1163 if (c0_ != '\\') { | 1145 if (c0_ != '\\') { |
1164 AddLiteralCharAdvance(); | 1146 AddLiteralCharAdvance(); |
1165 } else { | 1147 } else { |
1166 if (!ScanLiteralUnicodeEscape()) { | 1148 return false; |
1167 return false; | |
1168 } | |
1169 Advance(); | |
1170 } | 1149 } |
1171 } | 1150 } |
1172 literal.Complete(); | 1151 literal.Complete(); |
1173 | 1152 |
1174 next_.location.end_pos = source_pos() - 1; | 1153 next_.location.end_pos = source_pos() - 1; |
1175 return true; | 1154 return true; |
1176 } | 1155 } |
1177 | 1156 |
1178 | 1157 |
1179 const AstRawString* Scanner::CurrentSymbol(AstValueFactory* ast_value_factory) { | 1158 const AstRawString* Scanner::CurrentSymbol(AstValueFactory* ast_value_factory) { |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1347 } | 1326 } |
1348 backing_store_.Add(static_cast<uint8_t>((one_byte_length >> 7) | 0x80u)); | 1327 backing_store_.Add(static_cast<uint8_t>((one_byte_length >> 7) | 0x80u)); |
1349 } | 1328 } |
1350 backing_store_.Add(static_cast<uint8_t>(one_byte_length & 0x7f)); | 1329 backing_store_.Add(static_cast<uint8_t>(one_byte_length & 0x7f)); |
1351 | 1330 |
1352 backing_store_.AddBlock(bytes); | 1331 backing_store_.AddBlock(bytes); |
1353 return backing_store_.EndSequence().start(); | 1332 return backing_store_.EndSequence().start(); |
1354 } | 1333 } |
1355 | 1334 |
1356 } } // namespace v8::internal | 1335 } } // namespace v8::internal |
OLD | NEW |