Ignore:
Timestamp:
Jun 10, 2015, 6:25:38 AM (10 years ago)
Author:
Yusuke Suzuki
Message:

JavaScript: Drop the “escaped reserved words as identifiers” compatibility measure
https://bugs.webkit.org/show_bug.cgi?id=90678

Reviewed by Darin Adler.

After ES6, escaped reserved words in identifiers are prohibited.

  • parser/Lexer.cpp:

(JSC::Lexer<CharacterType>::parseIdentifierSlowCase):

  • tests/stress/reserved-word-with-escape.js: Added.

(testSyntax):
(testSyntaxError):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/parser/Lexer.cpp

    r184337 r185414  
    10411041template<typename CharacterType> template<bool shouldCreateIdentifier> JSTokenType Lexer<CharacterType>::parseIdentifierSlowCase(JSTokenData* tokenData, unsigned lexerFlags, bool strictMode)
    10421042{
    1043     const ptrdiff_t remaining = m_codeEnd - m_code;
    10441043    auto identifierStart = currentSourcePtr();
    10451044    bool bufferRequired = false;
     
    10871086        tokenData->ident = nullptr;
    10881087
    1089     if (LIKELY(!bufferRequired && !(lexerFlags & LexerFlagsIgnoreReservedWords))) {
     1088    if (LIKELY(!(lexerFlags & LexerFlagsIgnoreReservedWords))) {
    10901089        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;
     1090        const HashTableValue* entry = m_vm->keywords->getKeyword(*ident);
     1091        if (!entry)
     1092            return IDENT;
     1093        JSTokenType token = static_cast<JSTokenType>(entry->lexerValue());
     1094        return (token != RESERVED_IF_STRICT) || strictMode ? token : IDENT;
    11011095    }
    11021096
Note: See TracChangeset for help on using the changeset viewer.