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/bytecompiler/NodesCodegen.cpp

    r192436 r192597  
    33983398    identifiers.append(m_boundProperty);
    33993399}
    3400 
    3401 void AssignmentElementNode::collectBoundIdentifiers(Vector<Identifier>&) const
    3402 {
    3403 }
    3404 
    3405 void AssignmentElementNode::bindValue(BytecodeGenerator& generator, RegisterID* value) const
    3406 {
    3407     if (m_assignmentTarget->isResolveNode()) {
    3408         ResolveNode* lhs = static_cast<ResolveNode*>(m_assignmentTarget);
    3409         Variable var = generator.variable(lhs->identifier());
    3410         bool isReadOnly = var.isReadOnly();
    3411         if (RegisterID* local = var.local()) {
    3412             generator.emitTDZCheckIfNecessary(var, local, nullptr);
    3413 
    3414             if (isReadOnly)
    3415                 generator.emitReadOnlyExceptionIfNeeded(var);
    3416             else {
    3417                 generator.invalidateForInContextForLocal(local);
    3418                 generator.moveToDestinationIfNeeded(local, value);
    3419                 generator.emitProfileType(local, divotStart(), divotEnd());
    3420             }
    3421             return;
    3422         }
    3423         if (generator.isStrictMode())
    3424             generator.emitExpressionInfo(divotEnd(), divotStart(), divotEnd());
    3425         RefPtr<RegisterID> scope = generator.emitResolveScope(nullptr, var);
    3426         generator.emitTDZCheckIfNecessary(var, nullptr, scope.get());
    3427         if (isReadOnly) {
    3428             bool threwException = generator.emitReadOnlyExceptionIfNeeded(var);
    3429             if (threwException)
    3430                 return;
    3431         }
    3432         generator.emitExpressionInfo(divotEnd(), divotStart(), divotEnd());
    3433         if (!isReadOnly) {
    3434             generator.emitPutToScope(scope.get(), var, value, generator.isStrictMode() ? ThrowIfNotFound : DoNotThrowIfNotFound, NotInitialization);
    3435             generator.emitProfileType(value, var, divotStart(), divotEnd());
    3436         }
    3437     } else if (m_assignmentTarget->isDotAccessorNode()) {
    3438         DotAccessorNode* lhs = static_cast<DotAccessorNode*>(m_assignmentTarget);
    3439         RefPtr<RegisterID> base = generator.emitNodeForLeftHandSide(lhs->base(), true, false);
    3440         generator.emitExpressionInfo(divotEnd(), divotStart(), divotEnd());
    3441         generator.emitPutById(base.get(), lhs->identifier(), value);
    3442         generator.emitProfileType(value, divotStart(), divotEnd());
    3443     } else if (m_assignmentTarget->isBracketAccessorNode()) {
    3444         BracketAccessorNode* lhs = static_cast<BracketAccessorNode*>(m_assignmentTarget);
    3445         RefPtr<RegisterID> base = generator.emitNodeForLeftHandSide(lhs->base(), true, false);
    3446         RefPtr<RegisterID> property = generator.emitNodeForLeftHandSide(lhs->subscript(), true, false);
    3447         generator.emitExpressionInfo(divotEnd(), divotStart(), divotEnd());
    3448         generator.emitPutByVal(base.get(), property.get(), value);
    3449         generator.emitProfileType(value, divotStart(), divotEnd());
    3450     }
    3451 }
    3452 
    3453 void AssignmentElementNode::toString(StringBuilder& builder) const
    3454 {
    3455     if (m_assignmentTarget->isResolveNode())
    3456         builder.append(static_cast<ResolveNode*>(m_assignmentTarget)->identifier().string());
    3457 }
    3458 
     3400   
    34593401RegisterID* SpreadExpressionNode::emitBytecode(BytecodeGenerator&, RegisterID*)
    34603402{
Note: See TracChangeset for help on using the changeset viewer.