Changeset 287531 in webkit for trunk/Source/JavaScriptCore/bytecompiler
- Timestamp:
- Jan 2, 2022, 11:39:38 PM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
r287136 r287531 372 372 ASSERT(m_tag->isDotAccessorNode()); 373 373 DotAccessorNode* dot = static_cast<DotAccessorNode*>(m_tag); 374 tag = generator.newTemporary(); 374 375 base = generator.newTemporary(); 375 376 base = generator.emitNode(base.get(), dot->base()); 376 if (dot->base()->isSuperNode()) { 377 RefPtr<RegisterID> thisValue = generator.ensureThis(); 378 tag = generator.emitGetById(generator.newTemporary(), base.get(), thisValue.get(), dot->identifier()); 379 } else 380 tag = generator.emitGetById(generator.newTemporary(), base.get(), dot->identifier()); 377 tag = dot->emitGetPropertyValue(generator, tag.get(), base.get()); 381 378 } 382 379 … … 3677 3674 3678 3675 generator.emitExpressionInfo(subexpressionDivot(), subexpressionStart(), subexpressionEnd()); 3679 if (m_base->isSuperNode()) { 3680 thisValue = generator.ensureThis(); 3681 generator.emitGetById(result.get(), base.get(), thisValue.get(), m_ident); 3682 } else 3683 generator.emitGetById(result.get(), base.get(), m_ident); 3684 3676 emitGetPropertyValue(generator, result.get(), base.get(), thisValue); 3685 3677 Ref<Label> afterAssignment = generator.newLabel(); 3686 3678 emitShortCircuitAssignment(generator, result.get(), m_operator, afterAssignment.get()); … … 3688 3680 generator.emitNode(result.get(), m_right); 3689 3681 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 3690 if (m_base->isSuperNode()) 3691 generator.emitPutById(base.get(), thisValue.get(), m_ident, result.get()); 3692 else 3693 generator.emitPutById(base.get(), m_ident, result.get()); 3682 emitPutProperty(generator, base.get(), result.get(), thisValue); 3694 3683 generator.emitProfileType(result.get(), divotStart(), divotEnd()); 3695 3684 … … 4137 4126 if (m_lexpr->isDotAccessorNode()) { 4138 4127 DotAccessorNode* assignNode = static_cast<DotAccessorNode*>(m_lexpr); 4139 const Identifier& ident = assignNode->identifier();4140 4128 RefPtr<RegisterID> base = generator.emitNode(assignNode->base()); 4141 4129 generator.emitExpressionInfo(assignNode->divot(), assignNode->divotStart(), assignNode->divotEnd()); 4142 if (assignNode->base()->isSuperNode()) { 4143 RefPtr<RegisterID> thisValue = generator.ensureThis(); 4144 generator.emitPutById(base.get(), thisValue.get(), ident, propertyName); 4145 } else 4146 generator.emitPutById(base.get(), ident, propertyName); 4130 assignNode->emitPutProperty(generator, base.get(), propertyName); 4147 4131 generator.emitProfileType(propertyName, assignNode->divotStart(), assignNode->divotEnd()); 4148 4132 return; 4149 4133 } 4134 4150 4135 if (m_lexpr->isBracketAccessorNode()) { 4151 4136 BracketAccessorNode* assignNode = static_cast<BracketAccessorNode*>(m_lexpr); … … 4290 4275 } else if (m_lexpr->isDotAccessorNode()) { 4291 4276 DotAccessorNode* assignNode = static_cast<DotAccessorNode*>(m_lexpr); 4292 const Identifier& ident = assignNode->identifier();4293 4277 RefPtr<RegisterID> base = generator.emitNode(assignNode->base()); 4294 4295 4278 generator.emitExpressionInfo(assignNode->divot(), assignNode->divotStart(), assignNode->divotEnd()); 4296 if (assignNode->base()->isSuperNode()) { 4297 RefPtr<RegisterID> thisValue = generator.ensureThis(); 4298 generator.emitPutById(base.get(), thisValue.get(), ident, value); 4299 } else 4300 generator.emitPutById(base.get(), ident, value); 4279 assignNode->emitPutProperty(generator, base.get(), value); 4301 4280 generator.emitProfileType(value, assignNode->divotStart(), assignNode->divotEnd()); 4302 4281 } else if (m_lexpr->isBracketAccessorNode()) { … … 5714 5693 RefPtr<RegisterID> base = generator.emitNodeForLeftHandSide(lhs->base(), true, false); 5715 5694 generator.emitExpressionInfo(divotEnd(), divotStart(), divotEnd()); 5716 if (lhs->base()->isSuperNode()) { 5717 RefPtr<RegisterID> thisValue = generator.ensureThis(); 5718 generator.emitPutById(base.get(), thisValue.get(), lhs->identifier(), value); 5719 } else 5720 generator.emitPutById(base.get(), lhs->identifier(), value); 5695 lhs->emitPutProperty(generator, base.get(), value); 5721 5696 generator.emitProfileType(value, divotStart(), divotEnd()); 5722 5697 } else if (m_assignmentTarget->isBracketAccessorNode()) {
Note:
See TracChangeset
for help on using the changeset viewer.