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

Unified Diff: src/scanner-base.cc

Issue 7616009: Parse harmony let declarations. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Updated tests. Created 9 years, 4 months 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
Index: src/scanner-base.cc
diff --git a/src/scanner-base.cc b/src/scanner-base.cc
index e4590b1261ecfe6d2159fa45a0564b57008b1216..0e59661b600999700775032ab6fa331e27627b31 100644
--- a/src/scanner-base.cc
+++ b/src/scanner-base.cc
@@ -74,7 +74,8 @@ uc32 Scanner::ScanHexEscape(uc32 c, int length) {
// JavaScriptScanner
JavaScriptScanner::JavaScriptScanner(UnicodeCache* scanner_contants)
- : Scanner(scanner_contants), octal_pos_(Location::invalid()) { }
+ : Scanner(scanner_contants),
+ octal_pos_(Location::invalid()) { }
void JavaScriptScanner::Initialize(UC16CharacterStream* source) {
@@ -813,71 +814,74 @@ uc32 JavaScriptScanner::ScanIdentifierUnicodeEscape() {
// ----------------------------------------------------------------------------
// Keyword Matcher
-#define KEYWORDS(KEYWORD_GROUP, KEYWORD) \
- KEYWORD_GROUP('b') \
- KEYWORD("break", BREAK) \
- KEYWORD_GROUP('c') \
- KEYWORD("case", CASE) \
- KEYWORD("catch", CATCH) \
- KEYWORD("class", FUTURE_RESERVED_WORD) \
- KEYWORD("const", CONST) \
- KEYWORD("continue", CONTINUE) \
- KEYWORD_GROUP('d') \
- KEYWORD("debugger", DEBUGGER) \
- KEYWORD("default", DEFAULT) \
- KEYWORD("delete", DELETE) \
- KEYWORD("do", DO) \
- KEYWORD_GROUP('e') \
- KEYWORD("else", ELSE) \
- KEYWORD("enum", FUTURE_RESERVED_WORD) \
- KEYWORD("export", FUTURE_RESERVED_WORD) \
- KEYWORD("extends", FUTURE_RESERVED_WORD) \
- KEYWORD_GROUP('f') \
- KEYWORD("false", FALSE_LITERAL) \
- KEYWORD("finally", FINALLY) \
- KEYWORD("for", FOR) \
- KEYWORD("function", FUNCTION) \
- KEYWORD_GROUP('i') \
- KEYWORD("if", IF) \
- KEYWORD("implements", FUTURE_STRICT_RESERVED_WORD) \
- KEYWORD("import", FUTURE_RESERVED_WORD) \
- KEYWORD("in", IN) \
- KEYWORD("instanceof", INSTANCEOF) \
- KEYWORD("interface", FUTURE_STRICT_RESERVED_WORD) \
- KEYWORD_GROUP('l') \
- KEYWORD("let", FUTURE_STRICT_RESERVED_WORD) \
- KEYWORD_GROUP('n') \
- KEYWORD("new", NEW) \
- KEYWORD("null", NULL_LITERAL) \
- KEYWORD_GROUP('p') \
- KEYWORD("package", FUTURE_STRICT_RESERVED_WORD) \
- KEYWORD("private", FUTURE_STRICT_RESERVED_WORD) \
- KEYWORD("protected", FUTURE_STRICT_RESERVED_WORD) \
- KEYWORD("public", FUTURE_STRICT_RESERVED_WORD) \
- KEYWORD_GROUP('r') \
- KEYWORD("return", RETURN) \
- KEYWORD_GROUP('s') \
- KEYWORD("static", FUTURE_STRICT_RESERVED_WORD) \
- KEYWORD("super", FUTURE_RESERVED_WORD) \
- KEYWORD("switch", SWITCH) \
- KEYWORD_GROUP('t') \
- KEYWORD("this", THIS) \
- KEYWORD("throw", THROW) \
- KEYWORD("true", TRUE_LITERAL) \
- KEYWORD("try", TRY) \
- KEYWORD("typeof", TYPEOF) \
- KEYWORD_GROUP('v') \
- KEYWORD("var", VAR) \
- KEYWORD("void", VOID) \
- KEYWORD_GROUP('w') \
- KEYWORD("while", WHILE) \
- KEYWORD("with", WITH) \
- KEYWORD_GROUP('y') \
- KEYWORD("yield", FUTURE_STRICT_RESERVED_WORD)
+#define KEYWORDS(KEYWORD_GROUP, KEYWORD) \
+ KEYWORD_GROUP('b') \
+ KEYWORD("break", Token::BREAK) \
+ KEYWORD_GROUP('c') \
+ KEYWORD("case", Token::CASE) \
+ KEYWORD("catch", Token::CATCH) \
+ KEYWORD("class", Token::FUTURE_RESERVED_WORD) \
+ KEYWORD("const", Token::CONST) \
+ KEYWORD("continue", Token::CONTINUE) \
+ KEYWORD_GROUP('d') \
+ KEYWORD("debugger", Token::DEBUGGER) \
+ KEYWORD("default", Token::DEFAULT) \
+ KEYWORD("delete", Token::DELETE) \
+ KEYWORD("do", Token::DO) \
+ KEYWORD_GROUP('e') \
+ KEYWORD("else", Token::ELSE) \
+ KEYWORD("enum", Token::FUTURE_RESERVED_WORD) \
+ KEYWORD("export", Token::FUTURE_RESERVED_WORD) \
+ KEYWORD("extends", Token::FUTURE_RESERVED_WORD) \
+ KEYWORD_GROUP('f') \
+ KEYWORD("false", Token::FALSE_LITERAL) \
+ KEYWORD("finally", Token::FINALLY) \
+ KEYWORD("for", Token::FOR) \
+ KEYWORD("function", Token::FUNCTION) \
+ KEYWORD_GROUP('i') \
+ KEYWORD("if", Token::IF) \
+ KEYWORD("implements", Token::FUTURE_STRICT_RESERVED_WORD) \
+ KEYWORD("import", Token::FUTURE_RESERVED_WORD) \
+ KEYWORD("in", Token::IN) \
+ KEYWORD("instanceof", Token::INSTANCEOF) \
+ KEYWORD("interface", Token::FUTURE_STRICT_RESERVED_WORD) \
+ KEYWORD_GROUP('l') \
+ KEYWORD("let", harmony_block_scoping \
+ ? Token::LET : Token::FUTURE_STRICT_RESERVED_WORD) \
+ KEYWORD_GROUP('n') \
+ KEYWORD("new", Token::NEW) \
+ KEYWORD("null", Token::NULL_LITERAL) \
+ KEYWORD_GROUP('p') \
+ KEYWORD("package", Token::FUTURE_STRICT_RESERVED_WORD) \
+ KEYWORD("private", Token::FUTURE_STRICT_RESERVED_WORD) \
+ KEYWORD("protected", Token::FUTURE_STRICT_RESERVED_WORD) \
+ KEYWORD("public", Token::FUTURE_STRICT_RESERVED_WORD) \
+ KEYWORD_GROUP('r') \
+ KEYWORD("return", Token::RETURN) \
+ KEYWORD_GROUP('s') \
+ KEYWORD("static", Token::FUTURE_STRICT_RESERVED_WORD) \
+ KEYWORD("super", Token::FUTURE_RESERVED_WORD) \
+ KEYWORD("switch", Token::SWITCH) \
+ KEYWORD_GROUP('t') \
+ KEYWORD("this", Token::THIS) \
+ KEYWORD("throw", Token::THROW) \
+ KEYWORD("true", Token::TRUE_LITERAL) \
+ KEYWORD("try", Token::TRY) \
+ KEYWORD("typeof", Token::TYPEOF) \
+ KEYWORD_GROUP('v') \
+ KEYWORD("var", Token::VAR) \
+ KEYWORD("void", Token::VOID) \
+ KEYWORD_GROUP('w') \
+ KEYWORD("while", Token::WHILE) \
+ KEYWORD("with", Token::WITH) \
+ KEYWORD_GROUP('y') \
+ KEYWORD("yield", Token::FUTURE_STRICT_RESERVED_WORD)
static Token::Value KeywordOrIdentifierToken(const char* input,
- int input_length) {
+ int input_length,
+ bool harmony_block_scoping) {
+
ASSERT(input_length >= 1);
const int kMinLength = 2;
const int kMaxLength = 10;
@@ -906,7 +910,7 @@ static Token::Value KeywordOrIdentifierToken(const char* input,
(keyword_length <= 7 || input[7] == keyword[7]) && \
(keyword_length <= 8 || input[8] == keyword[8]) && \
(keyword_length <= 9 || input[9] == keyword[9])) { \
- return Token::token; \
+ return token; \
} \
}
KEYWORDS(KEYWORD_GROUP_CASE, KEYWORD)
@@ -947,7 +951,9 @@ Token::Value JavaScriptScanner::ScanIdentifierOrKeyword() {
if (next_.literal_chars->is_ascii()) {
Vector<const char> chars = next_.literal_chars->ascii_literal();
- return KeywordOrIdentifierToken(chars.start(), chars.length());
+ return KeywordOrIdentifierToken(chars.start(),
+ chars.length(),
+ harmony_block_scoping_);
}
return Token::IDENTIFIER;
« no previous file with comments | « src/scanner-base.h ('k') | src/scopes.cc » ('j') | test/mjsunit/harmony/block-let-declaration.js » ('J')

Powered by Google App Engine
This is Rietveld 408576698