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

Unified Diff: src/scanner.cc

Issue 435003: Patch for allowing several V8 instances in process:... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 11 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/scanner.h ('k') | src/scopeinfo.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/scanner.cc
===================================================================
--- src/scanner.cc (revision 3427)
+++ src/scanner.cc (working copy)
@@ -37,15 +37,8 @@
// Character predicates
-unibrow::Predicate<IdentifierStart, 128> Scanner::kIsIdentifierStart;
-unibrow::Predicate<IdentifierPart, 128> Scanner::kIsIdentifierPart;
-unibrow::Predicate<unibrow::LineTerminator, 128> Scanner::kIsLineTerminator;
-unibrow::Predicate<unibrow::WhiteSpace, 128> Scanner::kIsWhiteSpace;
+ScannerData::ScannerData() {}
-
-StaticResource<Scanner::Utf8Decoder> Scanner::utf8_decoder_;
-
-
// ----------------------------------------------------------------------------
// UTF8Buffer
@@ -323,7 +316,9 @@
// ----------------------------------------------------------------------------
// Scanner
-Scanner::Scanner(bool pre) : stack_overflow_(false), is_pre_parsing_(pre) { }
+Scanner::Scanner(bool pre) : stack_overflow_(false), is_pre_parsing_(pre),
+ scanner_data_(v8_context()->scanner_data_) {
+}
void Scanner::Init(Handle<String> source, unibrow::CharacterStream* stream,
@@ -417,6 +412,10 @@
bool Scanner::SkipWhiteSpace() {
+ unibrow::Predicate<unibrow::WhiteSpace, 128>& kIsWhiteSpace =
+ scanner_data_.kIsWhiteSpace_;
+ unibrow::Predicate<unibrow::LineTerminator, 128>& kIsLineTerminator =
+ scanner_data_.kIsLineTerminator_;
int start_position = source_pos();
while (true) {
@@ -459,6 +458,8 @@
Token::Value Scanner::SkipSingleLineComment() {
Advance();
+ unibrow::Predicate<unibrow::LineTerminator, 128>& kIsLineTerminator =
+ scanner_data_.kIsLineTerminator_;
// The line terminator at the end of the line is not considered
// to be part of the single-line comment; it is recognized
// separately by the lexical grammar and becomes part of the
@@ -513,6 +514,11 @@
void Scanner::Scan() {
+ unibrow::Predicate<IdentifierPart, 128>& kIsIdentifierPart =
+ scanner_data_.kIsIdentifierPart_;
+ unibrow::Predicate<IdentifierStart, 128>& kIsIdentifierStart =
+ scanner_data_.kIsIdentifierStart_;
+
next_.literal_buffer = NULL;
Token::Value token;
has_line_terminator_before_next_ = false;
@@ -809,7 +815,7 @@
Advance();
// Skip escaped newlines.
- if (kIsLineTerminator.get(c)) {
+ if (scanner_data_.kIsLineTerminator_.get(c)) {
// Allow CR+LF newlines in multiline string literals.
if (IsCarriageReturn(c) && IsLineFeed(c0_)) Advance();
// Allow LF+CR newlines in multiline string literals.
@@ -851,6 +857,8 @@
Advance(); // consume quote
StartLiteral();
+ unibrow::Predicate<unibrow::LineTerminator, 128>& kIsLineTerminator =
+ scanner_data_.kIsLineTerminator_;
while (c0_ != quote && c0_ >= 0 && !kIsLineTerminator.get(c0_)) {
uc32 c = c0_;
Advance();
@@ -965,7 +973,8 @@
// 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_) || kIsIdentifierStart.get(c0_))
+ if (IsDecimalDigit(c0_) ||
+ scanner_data_.kIsIdentifierStart_.get(c0_))
return Token::ILLEGAL;
return Token::NUMBER;
@@ -985,8 +994,11 @@
Token::Value Scanner::ScanIdentifier() {
- ASSERT(kIsIdentifierStart.get(c0_));
+ unibrow::Predicate<IdentifierPart, 128>& kIsIdentifierPart =
+ scanner_data_.kIsIdentifierPart_;
+ ASSERT(scanner_data_.kIsIdentifierStart_.get(c0_));
+
StartLiteral();
KeywordMatcher keyword_match;
@@ -994,7 +1006,7 @@
if (c0_ == '\\') {
uc32 c = ScanIdentifierUnicodeEscape();
// Only allow legal identifier start characters.
- if (!kIsIdentifierStart.get(c)) return Token::ILLEGAL;
+ if (!scanner_data_.kIsIdentifierStart_.get(c)) return Token::ILLEGAL;
AddChar(c);
keyword_match.Fail();
} else {
@@ -1025,9 +1037,13 @@
bool Scanner::IsIdentifier(unibrow::CharacterStream* buffer) {
+ ScannerData& scanner_data = v8_context()->scanner_data_;
+ unibrow::Predicate<IdentifierPart, 128>& kIsIdentifierPart =
+ scanner_data.kIsIdentifierPart_;
+
// Checks whether the buffer contains an identifier (no escape).
if (!buffer->has_more()) return false;
- if (!kIsIdentifierStart.get(buffer->GetNext())) return false;
+ if (!scanner_data.kIsIdentifierStart_.get(buffer->GetNext())) return false;
while (buffer->has_more()) {
if (!kIsIdentifierPart.get(buffer->GetNext())) return false;
}
@@ -1051,6 +1067,9 @@
if (seen_equal)
AddChar('=');
+ unibrow::Predicate<unibrow::LineTerminator, 128>& kIsLineTerminator =
+ scanner_data_.kIsLineTerminator_;
+
while (c0_ != '/' || in_character_class) {
if (kIsLineTerminator.get(c0_) || c0_ < 0)
return false;
@@ -1077,6 +1096,9 @@
bool Scanner::ScanRegExpFlags() {
// Scan regular expression flags.
StartLiteral();
+ unibrow::Predicate<IdentifierPart, 128>& kIsIdentifierPart =
+ scanner_data_.kIsIdentifierPart_;
+
while (kIsIdentifierPart.get(c0_)) {
if (c0_ == '\\') {
uc32 c = ScanIdentifierUnicodeEscape();
« no previous file with comments | « src/scanner.h ('k') | src/scopeinfo.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698