Ignore:
Timestamp:
Jun 10, 2015, 4:43:20 PM (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.
After parsing Identifier, we should perform m_buffer16.shrink(0).

  • parser/Lexer.cpp:

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

  • tests/mozilla/ecma_3/Unicode/uc-003.js:

(test): Deleted.

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

(testSyntax):
(testSyntaxError):

File:
1 edited

Legend:

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

    r185419 r185437  
    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    m_buffer16.shrink(0);
     1089
     1090    if (LIKELY(!(lexerFlags & LexerFlagsIgnoreReservedWords))) {
    10901091        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
    11041099    return IDENT;
    11051100}
Note: See TracChangeset for help on using the changeset viewer.