Changeset 185437 in webkit
- Timestamp:
- Jun 10, 2015 4:43:20 PM (9 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 1 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r185432 r185437 1 2015-06-10 Yusuke Suzuki <utatane.tea@gmail.com> 2 3 JavaScript: Drop the “escaped reserved words as identifiers” compatibility measure 4 https://bugs.webkit.org/show_bug.cgi?id=90678 5 6 Reviewed by Darin Adler. 7 8 After ES6, escaped reserved words in identifiers are prohibited. 9 After parsing Identifier, we should perform `m_buffer16.shrink(0)`. 10 11 * parser/Lexer.cpp: 12 (JSC::Lexer<CharacterType>::parseIdentifierSlowCase): 13 * tests/mozilla/ecma_3/Unicode/uc-003.js: 14 (test): Deleted. 15 * tests/stress/reserved-word-with-escape.js: Added. 16 (testSyntax): 17 (testSyntaxError): 18 1 19 2015-06-10 Jordan Harband <ljharb@gmail.com> 2 20 -
trunk/Source/JavaScriptCore/parser/Lexer.cpp
r185419 r185437 1041 1041 template<typename CharacterType> template<bool shouldCreateIdentifier> JSTokenType Lexer<CharacterType>::parseIdentifierSlowCase(JSTokenData* tokenData, unsigned lexerFlags, bool strictMode) 1042 1042 { 1043 const ptrdiff_t remaining = m_codeEnd - m_code;1044 1043 auto identifierStart = currentSourcePtr(); 1045 1044 bool bufferRequired = false; … … 1087 1086 tokenData->ident = nullptr; 1088 1087 1089 if (LIKELY(!bufferRequired && !(lexerFlags & LexerFlagsIgnoreReservedWords))) { 1088 m_buffer16.shrink(0); 1089 1090 if (LIKELY(!(lexerFlags & LexerFlagsIgnoreReservedWords))) { 1090 1091 ASSERT(shouldCreateIdentifier); 1091 // Keywords must not be recognized if there was an \uXXXX in the identifier. 1092 if (remaining < maxTokenLength) { 1093 const HashTableValue* entry = m_vm->keywords->getKeyword(*ident); 1094 ASSERT((remaining < maxTokenLength) || !entry); 1095 if (!entry) 1096 return IDENT; 1097 JSTokenType token = static_cast<JSTokenType>(entry->lexerValue()); 1098 return (token != RESERVED_IF_STRICT) || strictMode ? token : IDENT; 1099 } 1100 return IDENT; 1101 } 1102 1103 m_buffer16.shrink(0); 1092 const HashTableValue* entry = m_vm->keywords->getKeyword(*ident); 1093 if (!entry) 1094 return IDENT; 1095 JSTokenType token = static_cast<JSTokenType>(entry->lexerValue()); 1096 return (token != RESERVED_IF_STRICT) || strictMode ? token : IDENT; 1097 } 1098 1104 1099 return IDENT; 1105 1100 } -
trunk/Source/JavaScriptCore/tests/mozilla/ecma_3/Unicode/uc-003.js
r11995 r185437 31 31 var \u0041 = 5; 32 32 var A\u03B2 = 15; 33 var c\u0061se = 25;34 33 35 34 printStatus ("Escapes in identifiers test."); … … 45 44 reportCompare (16, eval("++A\u03B2"), 46 45 "Escaped non-ASCII Identifier test"); 47 reportCompare (25, eval("c\\u00" + "61se"),48 "Escaped keyword Identifier test");49 reportCompare (26, eval("++c\\u00" + "61se"),50 "Escaped keyword Identifier test");51 46 52 47 exitFunc ("test");
Note: See TracChangeset
for help on using the changeset viewer.