Index: src/scanner.h |
diff --git a/src/scanner.h b/src/scanner.h |
index b6a5603ae63aa64ced53e80ade5fba06710ad994..367714c5b91c8ccfd186a6f6121c98b585d96b77 100644 |
--- a/src/scanner.h |
+++ b/src/scanner.h |
@@ -44,6 +44,9 @@ namespace v8 { |
namespace internal { |
+class ParserRecorder; |
+ |
+ |
// Returns the value (0 .. 15) of a hexadecimal character c. |
// If c is not a legal hexadecimal character, returns a value < 0. |
inline int HexValue(uc32 c) { |
@@ -370,32 +373,13 @@ class Scanner { |
// Returns the location information for the current token |
// (the token last returned by Next()). |
Location location() const { return current_.location; } |
- // Returns the literal string, if any, for the current token (the |
- // token last returned by Next()). The string is 0-terminated. |
- // Literal strings are collected for identifiers, strings, and |
- // numbers. |
- // These functions only give the correct result if the literal |
- // was scanned between calls to StartLiteral() and TerminateLiteral(). |
- Vector<const char> literal_one_byte_string() { |
- ASSERT_NOT_NULL(current_.literal_chars); |
- return current_.literal_chars->one_byte_literal(); |
- } |
- Vector<const uc16> literal_utf16_string() { |
- ASSERT_NOT_NULL(current_.literal_chars); |
- return current_.literal_chars->utf16_literal(); |
- } |
- bool is_literal_one_byte() { |
- ASSERT_NOT_NULL(current_.literal_chars); |
- return current_.literal_chars->is_one_byte(); |
- } |
- bool is_literal_contextual_keyword(Vector<const char> keyword) { |
- ASSERT_NOT_NULL(current_.literal_chars); |
- return current_.literal_chars->is_contextual_keyword(keyword); |
- } |
- int literal_length() const { |
- ASSERT_NOT_NULL(current_.literal_chars); |
- return current_.literal_chars->length(); |
- } |
+ |
+ // Similar functions for the upcoming token. |
+ |
+ // One token look-ahead (past the token returned by Next()). |
+ Token::Value peek() const { return next_.token; } |
+ |
+ Location peek_location() const { return next_.location; } |
bool literal_contains_escapes() const { |
Location location = current_.location; |
@@ -406,38 +390,15 @@ class Scanner { |
} |
return current_.literal_chars->length() != source_length; |
} |
- |
- // Similar functions for the upcoming token. |
- |
- // One token look-ahead (past the token returned by Next()). |
- Token::Value peek() const { return next_.token; } |
- |
- Location peek_location() const { return next_.location; } |
- |
- // Returns the literal string for the next token (the token that |
- // would be returned if Next() were called). |
- Vector<const char> next_literal_one_byte_string() { |
- ASSERT_NOT_NULL(next_.literal_chars); |
- return next_.literal_chars->one_byte_literal(); |
- } |
- Vector<const uc16> next_literal_utf16_string() { |
- ASSERT_NOT_NULL(next_.literal_chars); |
- return next_.literal_chars->utf16_literal(); |
- } |
- bool is_next_literal_one_byte() { |
- ASSERT_NOT_NULL(next_.literal_chars); |
- return next_.literal_chars->is_one_byte(); |
+ bool is_literal_contextual_keyword(Vector<const char> keyword) { |
+ ASSERT_NOT_NULL(current_.literal_chars); |
+ return current_.literal_chars->is_contextual_keyword(keyword); |
} |
bool is_next_contextual_keyword(Vector<const char> keyword) { |
ASSERT_NOT_NULL(next_.literal_chars); |
return next_.literal_chars->is_contextual_keyword(keyword); |
} |
- int next_literal_length() const { |
- ASSERT_NOT_NULL(next_.literal_chars); |
- return next_.literal_chars->length(); |
- } |
- Handle<String> AllocateLiteralString(Isolate* isolate, PretenureFlag tenured); |
Handle<String> AllocateNextLiteralString(Isolate* isolate, |
PretenureFlag tenured); |
Handle<String> AllocateInternalizedString(Isolate* isolate); |
@@ -461,12 +422,12 @@ class Scanner { |
} |
} |
- UnicodeCache* unicode_cache() { return unicode_cache_; } |
+ int FindNumber(DuplicateFinder* finder, int value); |
+ int FindSymbol(DuplicateFinder* finder, int value); |
- static const int kCharacterLookaheadBufferSize = 1; |
+ void LogSymbol(ParserRecorder* log, int position); |
- // Scans octal escape sequence. Also accepts "\0" decimal escape sequence. |
- uc32 ScanOctalEscape(uc32 c, int length); |
+ UnicodeCache* unicode_cache() { return unicode_cache_; } |
// Returns the location of the last seen octal literal. |
Location octal_position() const { return octal_pos_; } |
@@ -519,6 +480,11 @@ class Scanner { |
LiteralBuffer* literal_chars; |
}; |
+ static const int kCharacterLookaheadBufferSize = 1; |
+ |
+ // Scans octal escape sequence. Also accepts "\0" decimal escape sequence. |
+ uc32 ScanOctalEscape(uc32 c, int length); |
+ |
// Call this after setting source_ to the input. |
void Init() { |
// Set c0_ (one character ahead) |
@@ -579,6 +545,47 @@ class Scanner { |
} |
} |
+ // Returns the literal string, if any, for the current token (the |
+ // token last returned by Next()). The string is 0-terminated. |
+ // Literal strings are collected for identifiers, strings, and |
+ // numbers. |
+ // These functions only give the correct result if the literal |
+ // was scanned between calls to StartLiteral() and TerminateLiteral(). |
+ Vector<const char> literal_one_byte_string() { |
+ ASSERT_NOT_NULL(current_.literal_chars); |
+ return current_.literal_chars->one_byte_literal(); |
+ } |
+ Vector<const uc16> literal_utf16_string() { |
+ ASSERT_NOT_NULL(current_.literal_chars); |
+ return current_.literal_chars->utf16_literal(); |
+ } |
+ bool is_literal_one_byte() { |
+ ASSERT_NOT_NULL(current_.literal_chars); |
+ return current_.literal_chars->is_one_byte(); |
+ } |
+ int literal_length() const { |
+ ASSERT_NOT_NULL(current_.literal_chars); |
+ return current_.literal_chars->length(); |
+ } |
+ // Returns the literal string for the next token (the token that |
+ // would be returned if Next() were called). |
+ Vector<const char> next_literal_one_byte_string() { |
+ ASSERT_NOT_NULL(next_.literal_chars); |
+ return next_.literal_chars->one_byte_literal(); |
+ } |
+ Vector<const uc16> next_literal_utf16_string() { |
+ ASSERT_NOT_NULL(next_.literal_chars); |
+ return next_.literal_chars->utf16_literal(); |
+ } |
+ bool is_next_literal_one_byte() { |
+ ASSERT_NOT_NULL(next_.literal_chars); |
+ return next_.literal_chars->is_one_byte(); |
+ } |
+ int next_literal_length() const { |
+ ASSERT_NOT_NULL(next_.literal_chars); |
+ return next_.literal_chars->length(); |
+ } |
+ |
uc32 ScanHexNumber(int expected_length); |
// Scans a single JavaScript token. |