Index: src/scanner-base.cc |
diff --git a/src/scanner-base.cc b/src/scanner-base.cc |
index 2066b5a1e6553d4da67ebc3eb646e7c71dc2af34..9715ca995c65c784c5a0959396ec9de8bf965536 100644 |
--- a/src/scanner-base.cc |
+++ b/src/scanner-base.cc |
@@ -1,4 +1,4 @@ |
-// Copyright 2010 the V8 project authors. All rights reserved. |
+// Copyright 2011 the V8 project authors. All rights reserved. |
// Redistribution and use in source and binary forms, with or without |
// modification, are permitted provided that the following conditions are |
// met: |
@@ -35,29 +35,11 @@ namespace v8 { |
namespace internal { |
// ---------------------------------------------------------------------------- |
-// Compound predicates. |
- |
-bool ScannerConstants::IsIdentifier(unibrow::CharacterStream* buffer) { |
- // Checks whether the buffer contains an identifier (no escape). |
- if (!buffer->has_more()) return false; |
- if (!kIsIdentifierStart.get(buffer->GetNext())) { |
- return false; |
- } |
- while (buffer->has_more()) { |
- if (!kIsIdentifierPart.get(buffer->GetNext())) { |
- return false; |
- } |
- } |
- return true; |
-} |
- |
-// ---------------------------------------------------------------------------- |
// Scanner |
-Scanner::Scanner(ScannerConstants* scanner_constants) |
- : scanner_constants_(scanner_constants), |
- octal_pos_(kNoOctalLocation) { |
-} |
+Scanner::Scanner(UnicodeCache* unicode_cache) |
+ : unicode_cache_(unicode_cache), |
+ octal_pos_(kNoOctalLocation) { } |
uc32 Scanner::ScanHexEscape(uc32 c, int length) { |
@@ -114,7 +96,7 @@ uc32 Scanner::ScanOctalEscape(uc32 c, int length) { |
// ---------------------------------------------------------------------------- |
// JavaScriptScanner |
-JavaScriptScanner::JavaScriptScanner(ScannerConstants* scanner_contants) |
+JavaScriptScanner::JavaScriptScanner(UnicodeCache* scanner_contants) |
: Scanner(scanner_contants) { } |
@@ -144,9 +126,9 @@ bool JavaScriptScanner::SkipWhiteSpace() { |
while (true) { |
// We treat byte-order marks (BOMs) as whitespace for better |
// compatibility with Spidermonkey and other JavaScript engines. |
- while (scanner_constants_->IsWhiteSpace(c0_) || IsByteOrderMark(c0_)) { |
+ while (unicode_cache_->IsWhiteSpace(c0_) || IsByteOrderMark(c0_)) { |
// IsWhiteSpace() includes line terminators! |
- if (scanner_constants_->IsLineTerminator(c0_)) { |
+ if (unicode_cache_->IsLineTerminator(c0_)) { |
// Ignore line terminators, but remember them. This is necessary |
// for automatic semicolon insertion. |
has_line_terminator_before_next_ = true; |
@@ -186,7 +168,7 @@ Token::Value JavaScriptScanner::SkipSingleLineComment() { |
// separately by the lexical grammar and becomes part of the |
// stream of input elements for the syntactic grammar (see |
// ECMA-262, section 7.4, page 12). |
- while (c0_ >= 0 && !scanner_constants_->IsLineTerminator(c0_)) { |
+ while (c0_ >= 0 && !unicode_cache_->IsLineTerminator(c0_)) { |
Advance(); |
} |
@@ -451,7 +433,7 @@ void JavaScriptScanner::Scan() { |
break; |
default: |
- if (scanner_constants_->IsIdentifierStart(c0_)) { |
+ if (unicode_cache_->IsIdentifierStart(c0_)) { |
token = ScanIdentifierOrKeyword(); |
} else if (IsDecimalDigit(c0_)) { |
token = ScanNumber(false); |
@@ -499,7 +481,7 @@ void JavaScriptScanner::ScanEscape() { |
Advance(); |
// Skip escaped newlines. |
- if (scanner_constants_->IsLineTerminator(c)) { |
+ if (unicode_cache_->IsLineTerminator(c)) { |
// Allow CR+LF newlines in multiline string literals. |
if (IsCarriageReturn(c) && IsLineFeed(c0_)) Advance(); |
// Allow LF+CR newlines in multiline string literals. |
@@ -542,7 +524,7 @@ Token::Value JavaScriptScanner::ScanString() { |
LiteralScope literal(this); |
while (c0_ != quote && c0_ >= 0 |
- && !scanner_constants_->IsLineTerminator(c0_)) { |
+ && !unicode_cache_->IsLineTerminator(c0_)) { |
uc32 c = c0_; |
Advance(); |
if (c == '\\') { |
@@ -641,7 +623,7 @@ Token::Value JavaScriptScanner::ScanNumber(bool seen_period) { |
// not be an identifier start or a decimal digit; see ECMA-262 |
// section 7.8.3, page 17 (note that we read only one decimal digit |
// if the value is 0). |
- if (IsDecimalDigit(c0_) || scanner_constants_->IsIdentifierStart(c0_)) |
+ if (IsDecimalDigit(c0_) || unicode_cache_->IsIdentifierStart(c0_)) |
return Token::ILLEGAL; |
literal.Complete(); |
@@ -663,14 +645,14 @@ uc32 JavaScriptScanner::ScanIdentifierUnicodeEscape() { |
Token::Value JavaScriptScanner::ScanIdentifierOrKeyword() { |
- ASSERT(scanner_constants_->IsIdentifierStart(c0_)); |
+ ASSERT(unicode_cache_->IsIdentifierStart(c0_)); |
LiteralScope literal(this); |
KeywordMatcher keyword_match; |
// Scan identifier start character. |
if (c0_ == '\\') { |
uc32 c = ScanIdentifierUnicodeEscape(); |
// Only allow legal identifier start characters. |
- if (!scanner_constants_->IsIdentifierStart(c)) return Token::ILLEGAL; |
+ if (!unicode_cache_->IsIdentifierStart(c)) return Token::ILLEGAL; |
AddLiteralChar(c); |
return ScanIdentifierSuffix(&literal); |
} |
@@ -683,7 +665,7 @@ Token::Value JavaScriptScanner::ScanIdentifierOrKeyword() { |
} |
// Scan the rest of the identifier characters. |
- while (scanner_constants_->IsIdentifierPart(c0_)) { |
+ while (unicode_cache_->IsIdentifierPart(c0_)) { |
if (c0_ != '\\') { |
uc32 next_char = c0_; |
Advance(); |
@@ -701,11 +683,11 @@ Token::Value JavaScriptScanner::ScanIdentifierOrKeyword() { |
Token::Value JavaScriptScanner::ScanIdentifierSuffix(LiteralScope* literal) { |
// Scan the rest of the identifier characters. |
- while (scanner_constants_->IsIdentifierPart(c0_)) { |
+ while (unicode_cache_->IsIdentifierPart(c0_)) { |
if (c0_ == '\\') { |
uc32 c = ScanIdentifierUnicodeEscape(); |
// Only allow legal identifier part characters. |
- if (!scanner_constants_->IsIdentifierPart(c)) return Token::ILLEGAL; |
+ if (!unicode_cache_->IsIdentifierPart(c)) return Token::ILLEGAL; |
AddLiteralChar(c); |
} else { |
AddLiteralChar(c0_); |
@@ -735,10 +717,10 @@ bool JavaScriptScanner::ScanRegExpPattern(bool seen_equal) { |
AddLiteralChar('='); |
while (c0_ != '/' || in_character_class) { |
- if (scanner_constants_->IsLineTerminator(c0_) || c0_ < 0) return false; |
+ if (unicode_cache_->IsLineTerminator(c0_) || c0_ < 0) return false; |
if (c0_ == '\\') { // Escape sequence. |
AddLiteralCharAdvance(); |
- if (scanner_constants_->IsLineTerminator(c0_) || c0_ < 0) return false; |
+ if (unicode_cache_->IsLineTerminator(c0_) || c0_ < 0) return false; |
AddLiteralCharAdvance(); |
// If the escape allows more characters, i.e., \x??, \u????, or \c?, |
// only "safe" characters are allowed (letters, digits, underscore), |
@@ -764,7 +746,7 @@ bool JavaScriptScanner::ScanRegExpPattern(bool seen_equal) { |
bool JavaScriptScanner::ScanRegExpFlags() { |
// Scan regular expression flags. |
LiteralScope literal(this); |
- while (scanner_constants_->IsIdentifierPart(c0_)) { |
+ while (unicode_cache_->IsIdentifierPart(c0_)) { |
if (c0_ == '\\') { |
uc32 c = ScanIdentifierUnicodeEscape(); |
if (c != static_cast<uc32>(unibrow::Utf8::kBadChar)) { |