Index: src/scanner.cc |
diff --git a/src/scanner.cc b/src/scanner.cc |
index f7e7db38e332decc91d56b26cd25ad0e5876b3fd..6b2fcb4c5ec6307a7f5326b99dbd5a06e1021142 100755 |
--- a/src/scanner.cc |
+++ b/src/scanner.cc |
@@ -38,7 +38,7 @@ namespace internal { |
// ---------------------------------------------------------------------------- |
// UTF8Buffer |
-UTF8Buffer::UTF8Buffer() : buffer_(kInitialCapacity) { } |
+UTF8Buffer::UTF8Buffer() : buffer_(kInitialCapacity), recording_(false) { } |
UTF8Buffer::~UTF8Buffer() {} |
@@ -123,55 +123,6 @@ void CharacterStreamUTF16Buffer::SeekForward(int pos) { |
} |
-// ExternalStringUTF16Buffer |
-template <typename StringType, typename CharType> |
-ExternalStringUTF16Buffer<StringType, CharType>::ExternalStringUTF16Buffer() |
- : raw_data_(NULL) { } |
- |
- |
-template <typename StringType, typename CharType> |
-void ExternalStringUTF16Buffer<StringType, CharType>::Initialize( |
- Handle<StringType> data, |
- int start_position, |
- int end_position) { |
- ASSERT(!data.is_null()); |
- raw_data_ = data->resource()->data(); |
- |
- ASSERT(end_position <= data->length()); |
- if (start_position > 0) { |
- SeekForward(start_position); |
- } |
- end_ = |
- end_position != Scanner::kNoEndPosition ? end_position : data->length(); |
-} |
- |
- |
-template <typename StringType, typename CharType> |
-uc32 ExternalStringUTF16Buffer<StringType, CharType>::Advance() { |
- if (pos_ < end_) { |
- return raw_data_[pos_++]; |
- } else { |
- // note: currently the following increment is necessary to avoid a |
- // test-parser problem! |
- pos_++; |
- return static_cast<uc32>(-1); |
- } |
-} |
- |
- |
-template <typename StringType, typename CharType> |
-void ExternalStringUTF16Buffer<StringType, CharType>::PushBack(uc32 ch) { |
- pos_--; |
- ASSERT(pos_ >= Scanner::kCharacterLookaheadBufferSize); |
- ASSERT(raw_data_[pos_ - Scanner::kCharacterLookaheadBufferSize] == ch); |
-} |
- |
- |
-template <typename StringType, typename CharType> |
-void ExternalStringUTF16Buffer<StringType, CharType>::SeekForward(int pos) { |
- pos_ = pos; |
-} |
- |
// ---------------------------------------------------------------------------- |
// Scanner::LiteralScope |
@@ -297,7 +248,7 @@ void Scanner::StartLiteral() { |
} |
-void Scanner::AddChar(uc32 c) { |
+void Scanner::AddLiteralChar(uc32 c) { |
literal_buffer_.AddChar(c); |
} |
@@ -312,8 +263,8 @@ void Scanner::DropLiteral() { |
} |
-void Scanner::AddCharAdvance() { |
- AddChar(c0_); |
+void Scanner::AddLiteralCharAdvance() { |
+ AddLiteralChar(c0_); |
Advance(); |
} |
@@ -525,29 +476,29 @@ Token::Value Scanner::ScanJsonString() { |
// Check for control character (0x00-0x1f) or unterminated string (<0). |
if (c0_ < 0x20) return Token::ILLEGAL; |
if (c0_ != '\\') { |
- AddCharAdvance(); |
+ AddLiteralCharAdvance(); |
} else { |
Advance(); |
switch (c0_) { |
case '"': |
case '\\': |
case '/': |
- AddChar(c0_); |
+ AddLiteralChar(c0_); |
break; |
case 'b': |
- AddChar('\x08'); |
+ AddLiteralChar('\x08'); |
break; |
case 'f': |
- AddChar('\x0c'); |
+ AddLiteralChar('\x0c'); |
break; |
case 'n': |
- AddChar('\x0a'); |
+ AddLiteralChar('\x0a'); |
break; |
case 'r': |
- AddChar('\x0d'); |
+ AddLiteralChar('\x0d'); |
break; |
case 't': |
- AddChar('\x09'); |
+ AddLiteralChar('\x09'); |
break; |
case 'u': { |
uc32 value = 0; |
@@ -559,7 +510,7 @@ Token::Value Scanner::ScanJsonString() { |
} |
value = value * 16 + digit; |
} |
- AddChar(value); |
+ AddLiteralChar(value); |
break; |
} |
default: |
@@ -579,31 +530,31 @@ Token::Value Scanner::ScanJsonString() { |
Token::Value Scanner::ScanJsonNumber() { |
LiteralScope literal(this); |
- if (c0_ == '-') AddCharAdvance(); |
+ if (c0_ == '-') AddLiteralCharAdvance(); |
if (c0_ == '0') { |
- AddCharAdvance(); |
+ AddLiteralCharAdvance(); |
// Prefix zero is only allowed if it's the only digit before |
// a decimal point or exponent. |
if ('0' <= c0_ && c0_ <= '9') return Token::ILLEGAL; |
} else { |
if (c0_ < '1' || c0_ > '9') return Token::ILLEGAL; |
do { |
- AddCharAdvance(); |
+ AddLiteralCharAdvance(); |
} while (c0_ >= '0' && c0_ <= '9'); |
} |
if (c0_ == '.') { |
- AddCharAdvance(); |
+ AddLiteralCharAdvance(); |
if (c0_ < '0' || c0_ > '9') return Token::ILLEGAL; |
do { |
- AddCharAdvance(); |
+ AddLiteralCharAdvance(); |
} while (c0_ >= '0' && c0_ <= '9'); |
} |
if (AsciiAlphaToLower(c0_) == 'e') { |
- AddCharAdvance(); |
- if (c0_ == '-' || c0_ == '+') AddCharAdvance(); |
+ AddLiteralCharAdvance(); |
+ if (c0_ == '-' || c0_ == '+') AddLiteralCharAdvance(); |
if (c0_ < '0' || c0_ > '9') return Token::ILLEGAL; |
do { |
- AddCharAdvance(); |
+ AddLiteralCharAdvance(); |
} while (c0_ >= '0' && c0_ <= '9'); |
} |
literal.Complete(); |
@@ -958,7 +909,7 @@ void Scanner::ScanEscape() { |
// According to ECMA-262, 3rd, 7.8.4 (p 18ff) these |
// should be illegal, but they are commonly handled |
// as non-escaped characters by JS VMs. |
- AddChar(c); |
+ AddLiteralChar(c); |
} |
@@ -975,7 +926,7 @@ Token::Value Scanner::ScanString() { |
if (c0_ < 0) return Token::ILLEGAL; |
ScanEscape(); |
} else { |
- AddChar(c); |
+ AddLiteralChar(c); |
} |
} |
if (c0_ != quote) return Token::ILLEGAL; |
@@ -1006,7 +957,7 @@ Token::Value Scanner::Select(uc32 next, Token::Value then, Token::Value else_) { |
// Returns true if any decimal digits were scanned, returns false otherwise. |
void Scanner::ScanDecimalDigits() { |
while (IsDecimalDigit(c0_)) |
- AddCharAdvance(); |
+ AddLiteralCharAdvance(); |
} |
@@ -1018,25 +969,25 @@ Token::Value Scanner::ScanNumber(bool seen_period) { |
LiteralScope literal(this); |
if (seen_period) { |
// we have already seen a decimal point of the float |
- AddChar('.'); |
+ AddLiteralChar('.'); |
ScanDecimalDigits(); // we know we have at least one digit |
} else { |
// if the first character is '0' we must check for octals and hex |
if (c0_ == '0') { |
- AddCharAdvance(); |
+ AddLiteralCharAdvance(); |
// either 0, 0exxx, 0Exxx, 0.xxx, an octal number, or a hex number |
if (c0_ == 'x' || c0_ == 'X') { |
// hex number |
kind = HEX; |
- AddCharAdvance(); |
+ AddLiteralCharAdvance(); |
if (!IsHexDigit(c0_)) { |
// we must have at least one hex digit after 'x'/'X' |
return Token::ILLEGAL; |
} |
while (IsHexDigit(c0_)) { |
- AddCharAdvance(); |
+ AddLiteralCharAdvance(); |
} |
} else if ('0' <= c0_ && c0_ <= '7') { |
// (possible) octal number |
@@ -1047,7 +998,7 @@ Token::Value Scanner::ScanNumber(bool seen_period) { |
break; |
} |
if (c0_ < '0' || '7' < c0_) break; |
- AddCharAdvance(); |
+ AddLiteralCharAdvance(); |
} |
} |
} |
@@ -1056,7 +1007,7 @@ Token::Value Scanner::ScanNumber(bool seen_period) { |
if (kind == DECIMAL) { |
ScanDecimalDigits(); // optional |
if (c0_ == '.') { |
- AddCharAdvance(); |
+ AddLiteralCharAdvance(); |
ScanDecimalDigits(); // optional |
} |
} |
@@ -1067,9 +1018,9 @@ Token::Value Scanner::ScanNumber(bool seen_period) { |
ASSERT(kind != HEX); // 'e'/'E' must be scanned as part of the hex number |
if (kind == OCTAL) return Token::ILLEGAL; // no exponent for octals allowed |
// scan exponent |
- AddCharAdvance(); |
+ AddLiteralCharAdvance(); |
if (c0_ == '+' || c0_ == '-') |
- AddCharAdvance(); |
+ AddLiteralCharAdvance(); |
if (!IsDecimalDigit(c0_)) { |
// we must have at least one decimal digit after 'e'/'E' |
return Token::ILLEGAL; |
@@ -1113,10 +1064,10 @@ Token::Value Scanner::ScanIdentifier() { |
uc32 c = ScanIdentifierUnicodeEscape(); |
// Only allow legal identifier start characters. |
if (!ScannerConstants::kIsIdentifierStart.get(c)) return Token::ILLEGAL; |
- AddChar(c); |
+ AddLiteralChar(c); |
keyword_match.Fail(); |
} else { |
- AddChar(c0_); |
+ AddLiteralChar(c0_); |
keyword_match.AddChar(c0_); |
Advance(); |
} |
@@ -1127,10 +1078,10 @@ Token::Value Scanner::ScanIdentifier() { |
uc32 c = ScanIdentifierUnicodeEscape(); |
// Only allow legal identifier part characters. |
if (!ScannerConstants::kIsIdentifierPart.get(c)) return Token::ILLEGAL; |
- AddChar(c); |
+ AddLiteralChar(c); |
keyword_match.Fail(); |
} else { |
- AddChar(c0_); |
+ AddLiteralChar(c0_); |
keyword_match.AddChar(c0_); |
Advance(); |
} |
@@ -1156,18 +1107,18 @@ bool Scanner::ScanRegExpPattern(bool seen_equal) { |
// constructor. |
LiteralScope literal(this); |
if (seen_equal) |
- AddChar('='); |
+ AddLiteralChar('='); |
while (c0_ != '/' || in_character_class) { |
if (ScannerConstants::kIsLineTerminator.get(c0_) || c0_ < 0) return false; |
if (c0_ == '\\') { // escaped character |
- AddCharAdvance(); |
+ AddLiteralCharAdvance(); |
if (ScannerConstants::kIsLineTerminator.get(c0_) || c0_ < 0) return false; |
- AddCharAdvance(); |
+ AddLiteralCharAdvance(); |
} else { // unescaped character |
if (c0_ == '[') in_character_class = true; |
if (c0_ == ']') in_character_class = false; |
- AddCharAdvance(); |
+ AddLiteralCharAdvance(); |
} |
} |
Advance(); // consume '/' |
@@ -1186,11 +1137,11 @@ bool Scanner::ScanRegExpFlags() { |
if (c != static_cast<uc32>(unibrow::Utf8::kBadChar)) { |
// We allow any escaped character, unlike the restriction on |
// IdentifierPart when it is used to build an IdentifierName. |
- AddChar(c); |
+ AddLiteralChar(c); |
continue; |
} |
} |
- AddCharAdvance(); |
+ AddLiteralCharAdvance(); |
} |
literal.Complete(); |