| OLD | NEW | 
|---|
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. | 
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without | 
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are | 
| 4 // met: | 4 // met: | 
| 5 // | 5 // | 
| 6 //     * Redistributions of source code must retain the above copyright | 6 //     * Redistributions of source code must retain the above copyright | 
| 7 //       notice, this list of conditions and the following disclaimer. | 7 //       notice, this list of conditions and the following disclaimer. | 
| 8 //     * Redistributions in binary form must reproduce the above | 8 //     * Redistributions in binary form must reproduce the above | 
| 9 //       copyright notice, this list of conditions and the following | 9 //       copyright notice, this list of conditions and the following | 
| 10 //       disclaimer in the documentation and/or other materials provided | 10 //       disclaimer in the documentation and/or other materials provided | 
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 88 } | 88 } | 
| 89 | 89 | 
| 90 | 90 | 
| 91 | 91 | 
| 92 // ---------------------------------------------------------------------------- | 92 // ---------------------------------------------------------------------------- | 
| 93 // JavaScriptScanner | 93 // JavaScriptScanner | 
| 94 | 94 | 
| 95 JavaScriptScanner::JavaScriptScanner(UnicodeCache* scanner_contants) | 95 JavaScriptScanner::JavaScriptScanner(UnicodeCache* scanner_contants) | 
| 96     : Scanner(scanner_contants), | 96     : Scanner(scanner_contants), | 
| 97       octal_pos_(Location::invalid()), | 97       octal_pos_(Location::invalid()), | 
| 98       harmony_block_scoping_(false) { } | 98       harmony_scoping_(false) { } | 
| 99 | 99 | 
| 100 | 100 | 
| 101 void JavaScriptScanner::Initialize(UC16CharacterStream* source) { | 101 void JavaScriptScanner::Initialize(UC16CharacterStream* source) { | 
| 102   source_ = source; | 102   source_ = source; | 
| 103   // Need to capture identifiers in order to recognize "get" and "set" | 103   // Need to capture identifiers in order to recognize "get" and "set" | 
| 104   // in object literals. | 104   // in object literals. | 
| 105   Init(); | 105   Init(); | 
| 106   // Skip initial whitespace allowing HTML comment ends just like | 106   // Skip initial whitespace allowing HTML comment ends just like | 
| 107   // after a newline and scan first token. | 107   // after a newline and scan first token. | 
| 108   has_line_terminator_before_next_ = true; | 108   has_line_terminator_before_next_ = true; | 
| (...skipping 756 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 865   KEYWORD("for", Token::FOR)                                        \ | 865   KEYWORD("for", Token::FOR)                                        \ | 
| 866   KEYWORD("function", Token::FUNCTION)                              \ | 866   KEYWORD("function", Token::FUNCTION)                              \ | 
| 867   KEYWORD_GROUP('i')                                                \ | 867   KEYWORD_GROUP('i')                                                \ | 
| 868   KEYWORD("if", Token::IF)                                          \ | 868   KEYWORD("if", Token::IF)                                          \ | 
| 869   KEYWORD("implements", Token::FUTURE_STRICT_RESERVED_WORD)         \ | 869   KEYWORD("implements", Token::FUTURE_STRICT_RESERVED_WORD)         \ | 
| 870   KEYWORD("import", Token::FUTURE_RESERVED_WORD)                    \ | 870   KEYWORD("import", Token::FUTURE_RESERVED_WORD)                    \ | 
| 871   KEYWORD("in", Token::IN)                                          \ | 871   KEYWORD("in", Token::IN)                                          \ | 
| 872   KEYWORD("instanceof", Token::INSTANCEOF)                          \ | 872   KEYWORD("instanceof", Token::INSTANCEOF)                          \ | 
| 873   KEYWORD("interface", Token::FUTURE_STRICT_RESERVED_WORD)          \ | 873   KEYWORD("interface", Token::FUTURE_STRICT_RESERVED_WORD)          \ | 
| 874   KEYWORD_GROUP('l')                                                \ | 874   KEYWORD_GROUP('l')                                                \ | 
| 875   KEYWORD("let", harmony_block_scoping                              \ | 875   KEYWORD("let", harmony_scoping                                    \ | 
| 876                  ? Token::LET : Token::FUTURE_STRICT_RESERVED_WORD) \ | 876                  ? Token::LET : Token::FUTURE_STRICT_RESERVED_WORD) \ | 
| 877   KEYWORD_GROUP('n')                                                \ | 877   KEYWORD_GROUP('n')                                                \ | 
| 878   KEYWORD("new", Token::NEW)                                        \ | 878   KEYWORD("new", Token::NEW)                                        \ | 
| 879   KEYWORD("null", Token::NULL_LITERAL)                              \ | 879   KEYWORD("null", Token::NULL_LITERAL)                              \ | 
| 880   KEYWORD_GROUP('p')                                                \ | 880   KEYWORD_GROUP('p')                                                \ | 
| 881   KEYWORD("package", Token::FUTURE_STRICT_RESERVED_WORD)            \ | 881   KEYWORD("package", Token::FUTURE_STRICT_RESERVED_WORD)            \ | 
| 882   KEYWORD("private", Token::FUTURE_STRICT_RESERVED_WORD)            \ | 882   KEYWORD("private", Token::FUTURE_STRICT_RESERVED_WORD)            \ | 
| 883   KEYWORD("protected", Token::FUTURE_STRICT_RESERVED_WORD)          \ | 883   KEYWORD("protected", Token::FUTURE_STRICT_RESERVED_WORD)          \ | 
| 884   KEYWORD("public", Token::FUTURE_STRICT_RESERVED_WORD)             \ | 884   KEYWORD("public", Token::FUTURE_STRICT_RESERVED_WORD)             \ | 
| 885   KEYWORD_GROUP('r')                                                \ | 885   KEYWORD_GROUP('r')                                                \ | 
| (...skipping 13 matching lines...) Expand all  Loading... | 
| 899   KEYWORD("void", Token::VOID)                                      \ | 899   KEYWORD("void", Token::VOID)                                      \ | 
| 900   KEYWORD_GROUP('w')                                                \ | 900   KEYWORD_GROUP('w')                                                \ | 
| 901   KEYWORD("while", Token::WHILE)                                    \ | 901   KEYWORD("while", Token::WHILE)                                    \ | 
| 902   KEYWORD("with", Token::WITH)                                      \ | 902   KEYWORD("with", Token::WITH)                                      \ | 
| 903   KEYWORD_GROUP('y')                                                \ | 903   KEYWORD_GROUP('y')                                                \ | 
| 904   KEYWORD("yield", Token::FUTURE_STRICT_RESERVED_WORD) | 904   KEYWORD("yield", Token::FUTURE_STRICT_RESERVED_WORD) | 
| 905 | 905 | 
| 906 | 906 | 
| 907 static Token::Value KeywordOrIdentifierToken(const char* input, | 907 static Token::Value KeywordOrIdentifierToken(const char* input, | 
| 908                                              int input_length, | 908                                              int input_length, | 
| 909                                              bool harmony_block_scoping) { | 909                                              bool harmony_scoping) { | 
| 910   ASSERT(input_length >= 1); | 910   ASSERT(input_length >= 1); | 
| 911   const int kMinLength = 2; | 911   const int kMinLength = 2; | 
| 912   const int kMaxLength = 10; | 912   const int kMaxLength = 10; | 
| 913   if (input_length < kMinLength || input_length > kMaxLength) { | 913   if (input_length < kMinLength || input_length > kMaxLength) { | 
| 914     return Token::IDENTIFIER; | 914     return Token::IDENTIFIER; | 
| 915   } | 915   } | 
| 916   switch (input[0]) { | 916   switch (input[0]) { | 
| 917     default: | 917     default: | 
| 918 #define KEYWORD_GROUP_CASE(ch)                                \ | 918 #define KEYWORD_GROUP_CASE(ch)                                \ | 
| 919       break;                                                  \ | 919       break;                                                  \ | 
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 975     // Fallthrough if no longer able to complete keyword. | 975     // Fallthrough if no longer able to complete keyword. | 
| 976     return ScanIdentifierSuffix(&literal); | 976     return ScanIdentifierSuffix(&literal); | 
| 977   } | 977   } | 
| 978 | 978 | 
| 979   literal.Complete(); | 979   literal.Complete(); | 
| 980 | 980 | 
| 981   if (next_.literal_chars->is_ascii()) { | 981   if (next_.literal_chars->is_ascii()) { | 
| 982     Vector<const char> chars = next_.literal_chars->ascii_literal(); | 982     Vector<const char> chars = next_.literal_chars->ascii_literal(); | 
| 983     return KeywordOrIdentifierToken(chars.start(), | 983     return KeywordOrIdentifierToken(chars.start(), | 
| 984                                     chars.length(), | 984                                     chars.length(), | 
| 985                                     harmony_block_scoping_); | 985                                     harmony_scoping_); | 
| 986   } | 986   } | 
| 987 | 987 | 
| 988   return Token::IDENTIFIER; | 988   return Token::IDENTIFIER; | 
| 989 } | 989 } | 
| 990 | 990 | 
| 991 | 991 | 
| 992 Token::Value JavaScriptScanner::ScanIdentifierSuffix(LiteralScope* literal) { | 992 Token::Value JavaScriptScanner::ScanIdentifierSuffix(LiteralScope* literal) { | 
| 993   // Scan the rest of the identifier characters. | 993   // Scan the rest of the identifier characters. | 
| 994   while (unicode_cache_->IsIdentifierPart(c0_)) { | 994   while (unicode_cache_->IsIdentifierPart(c0_)) { | 
| 995     if (c0_ == '\\') { | 995     if (c0_ == '\\') { | 
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1101       } | 1101       } | 
| 1102     } | 1102     } | 
| 1103   } | 1103   } | 
| 1104   literal.Complete(); | 1104   literal.Complete(); | 
| 1105 | 1105 | 
| 1106   next_.location.end_pos = source_pos() - 1; | 1106   next_.location.end_pos = source_pos() - 1; | 
| 1107   return true; | 1107   return true; | 
| 1108 } | 1108 } | 
| 1109 | 1109 | 
| 1110 } }  // namespace v8::internal | 1110 } }  // namespace v8::internal | 
| OLD | NEW | 
|---|