Ignore:
Timestamp:
Nov 18, 2015, 4:03:26 PM (10 years ago)
Author:
[email protected]
Message:

Unreviewed, rolling out r192436 and r192586.
https://bugs.webkit.org/show_bug.cgi?id=151417

Caused a hang in the inspector and a crash @ google.com.
(Requested by saamyjoon on #webkit).

Reverted changesets:

"Allow any LeftHandSideExpression as a valid
AssignmentElement"
https://bugs.webkit.org/show_bug.cgi?id=151026
http://trac.webkit.org/changeset/192436

"There is a bug when default parameter values are mixed with
destructuring parameter values"
https://bugs.webkit.org/show_bug.cgi?id=151369
http://trac.webkit.org/changeset/192586

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/parser/Parser.h

    r192586 r192597  
    425425    }
    426426   
     427    enum BindingResult {
     428        BindingFailed,
     429        StrictBindingFailed,
     430        BindingSucceeded
     431    };
     432    BindingResult declareBoundParameter(const Identifier* ident)
     433    {
     434        bool isArgumentsIdent = isArguments(m_vm, ident);
     435        auto addResult = m_declaredVariables.add(ident->impl());
     436        addResult.iterator->value.setIsVar(); // Treat destructuring parameters as "var"s.
     437        bool isValidStrictMode = addResult.isNewEntry && !isEval(m_vm, ident) && !isArgumentsIdent;
     438        m_isValidStrictMode = m_isValidStrictMode && isValidStrictMode;
     439   
     440        if (isArgumentsIdent)
     441            m_shadowsArguments = true;
     442        if (!addResult.isNewEntry)
     443            return BindingFailed;
     444        return isValidStrictMode ? BindingSucceeded : StrictBindingFailed;
     445    }
     446
    427447    void getUsedVariables(IdentifierSet& usedVariables)
    428448    {
     
    10351055    bool isValidStrictMode() { return currentScope()->isValidStrictMode(); }
    10361056    DeclarationResultMask declareParameter(const Identifier* ident) { return currentScope()->declareParameter(ident); }
     1057    Scope::BindingResult declareBoundParameter(const Identifier* ident) { return currentScope()->declareBoundParameter(ident); }
    10371058    bool breakIsValid()
    10381059    {
     
    11391160    template <class TreeBuilder> TreeSourceElements parseArrowFunctionSingleExpressionBodySourceElements(TreeBuilder&);
    11401161    template <class TreeBuilder> TreeExpression parseArrowFunctionExpression(TreeBuilder&);
    1141     template <class TreeBuilder> NEVER_INLINE TreeDestructuringPattern createBindingPattern(TreeBuilder&, DestructuringKind, ExportType, const Identifier&, JSToken, AssignmentContext, const Identifier** duplicateIdentifier);
    1142     template <class TreeBuilder> NEVER_INLINE TreeDestructuringPattern createAssignmentElement(TreeBuilder&, TreeExpression&, const JSTextPosition&, const JSTextPosition&);
    1143     template <class TreeBuilder> NEVER_INLINE TreeDestructuringPattern parseBindingOrAssignmentElement(TreeBuilder& context, DestructuringKind, ExportType, const Identifier** duplicateIdentifier, bool* hasDestructuringPattern, AssignmentContext bindingContext, int depth);
    1144     template <class TreeBuilder> NEVER_INLINE TreeDestructuringPattern parseAssignmentElement(TreeBuilder& context, DestructuringKind, ExportType, const Identifier** duplicateIdentifier, bool* hasDestructuringPattern, AssignmentContext bindingContext, int depth);
     1162    template <class TreeBuilder> NEVER_INLINE TreeDestructuringPattern createBindingPattern(TreeBuilder&, DestructuringKind, ExportType, const Identifier&, int depth, JSToken, AssignmentContext, const Identifier** duplicateIdentifier);
    11451163    template <class TreeBuilder> NEVER_INLINE TreeDestructuringPattern parseDestructuringPattern(TreeBuilder&, DestructuringKind, ExportType, const Identifier** duplicateIdentifier = nullptr, bool* hasDestructuringPattern = nullptr, AssignmentContext = AssignmentContext::DeclarationStatement, int depth = 0);
    11461164    template <class TreeBuilder> NEVER_INLINE TreeDestructuringPattern tryParseDestructuringPatternExpression(TreeBuilder&, AssignmentContext);
Note: See TracChangeset for help on using the changeset viewer.