@@ -3210,7 +3210,7 @@ RegisterID* ShortCircuitReadModifyResolveNode::emitBytecode(BytecodeGenerator& g
32103210 Ref<Label> afterAssignment = generator.newLabel ();
32113211 emitShortCircuitAssignment (generator, result.get (), m_operator, afterAssignment.get ());
32123212
3213- result = generator.emitNode (result.get (), m_right); // Execute side effects first.
3213+ generator.emitNode (result.get (), m_right); // Execute side effects first.
32143214 bool threwException = generator.emitReadOnlyExceptionIfNeeded (var);
32153215
32163216 if (!threwException)
@@ -3227,7 +3227,7 @@ RegisterID* ShortCircuitReadModifyResolveNode::emitBytecode(BytecodeGenerator& g
32273227 Ref<Label> afterAssignment = generator.newLabel ();
32283228 emitShortCircuitAssignment (generator, result.get (), m_operator, afterAssignment.get ());
32293229
3230- result = generator.emitNode (result.get (), m_right);
3230+ generator.emitNode (result.get (), m_right);
32313231 generator.move (local.get (), result.get ());
32323232 generator.emitProfileType (result.get (), var, divotStart (), divotEnd ());
32333233
@@ -3240,7 +3240,7 @@ RegisterID* ShortCircuitReadModifyResolveNode::emitBytecode(BytecodeGenerator& g
32403240 Ref<Label> afterAssignment = generator.newLabel ();
32413241 emitShortCircuitAssignment (generator, result.get (), m_operator, afterAssignment.get ());
32423242
3243- result = generator.emitNode (result.get (), m_right);
3243+ generator.emitNode (result.get (), m_right);
32443244 generator.emitProfileType (result.get (), var, divotStart (), divotEnd ());
32453245
32463246 generator.emitLabel (afterAssignment.get ());
@@ -3250,26 +3250,28 @@ RegisterID* ShortCircuitReadModifyResolveNode::emitBytecode(BytecodeGenerator& g
32503250 generator.emitExpressionInfo (newDivot, divotStart (), newDivot);
32513251 RefPtr<RegisterID> scope = generator.emitResolveScope (nullptr , var);
32523252
3253- RefPtr<RegisterID> result = generator.emitGetFromScope (generator.tempDestination (dst), scope.get (), var, ThrowIfNotFound);
3254- generator.emitTDZCheckIfNecessary (var, result.get (), nullptr );
3253+ RefPtr<RegisterID> uncheckedResult = generator.newTemporary ();
3254+
3255+ generator.emitGetFromScope (uncheckedResult.get (), scope.get (), var, ThrowIfNotFound);
3256+ generator.emitTDZCheckIfNecessary (var, uncheckedResult.get (), nullptr );
32553257
32563258 Ref<Label> afterAssignment = generator.newLabel ();
3257- emitShortCircuitAssignment (generator, result .get (), m_operator, afterAssignment.get ());
3259+ emitShortCircuitAssignment (generator, uncheckedResult .get (), m_operator, afterAssignment.get ());
32583260
3259- generator.emitNode (result .get (), m_right); // Execute side effects first.
3261+ generator.emitNode (uncheckedResult .get (), m_right); // Execute side effects first.
32603262
32613263 bool threwException = isReadOnly ? generator.emitReadOnlyExceptionIfNeeded (var) : false ;
32623264
32633265 if (!threwException)
32643266 generator.emitExpressionInfo (divot (), divotStart (), divotEnd ());
32653267
32663268 if (!isReadOnly) {
3267- result = generator.emitPutToScope (scope.get (), var, result .get (), ThrowIfNotFound, InitializationMode::NotInitialization);
3268- generator.emitProfileType (result .get (), var, divotStart (), divotEnd ());
3269+ generator.emitPutToScope (scope.get (), var, uncheckedResult .get (), ThrowIfNotFound, InitializationMode::NotInitialization);
3270+ generator.emitProfileType (uncheckedResult .get (), var, divotStart (), divotEnd ());
32693271 }
32703272
32713273 generator.emitLabel (afterAssignment.get ());
3272- return generator.move (dst, result .get ());
3274+ return generator.move (generator. finalDestination ( dst, uncheckedResult. get ()), uncheckedResult .get ());
32733275}
32743276
32753277// ------------------------------ AssignResolveNode -----------------------------------
@@ -3383,24 +3385,24 @@ RegisterID* ShortCircuitReadModifyDotNode::emitBytecode(BytecodeGenerator& gener
33833385 RefPtr<RegisterID> base = generator.emitNodeForLeftHandSide (m_base, m_rightHasAssignments, m_right->isPure (generator));
33843386 RefPtr<RegisterID> thisValue;
33853387
3386- RefPtr<RegisterID> result;
3388+ RefPtr<RegisterID> result = generator. tempDestination (dst) ;
33873389
33883390 generator.emitExpressionInfo (subexpressionDivot (), subexpressionStart (), subexpressionEnd ());
33893391 if (m_base->isSuperNode ()) {
33903392 thisValue = generator.ensureThis ();
3391- result = generator.emitGetById (generator. tempDestination (dst ), base.get (), thisValue.get (), m_ident);
3393+ generator.emitGetById (result. get ( ), base.get (), thisValue.get (), m_ident);
33923394 } else
3393- result = generator.emitGetById (generator. tempDestination (dst ), base.get (), m_ident);
3395+ generator.emitGetById (result. get ( ), base.get (), m_ident);
33943396
33953397 Ref<Label> afterAssignment = generator.newLabel ();
33963398 emitShortCircuitAssignment (generator, result.get (), m_operator, afterAssignment.get ());
33973399
3398- result = generator.emitNode (result.get (), m_right);
3400+ generator.emitNode (result.get (), m_right);
33993401 generator.emitExpressionInfo (divot (), divotStart (), divotEnd ());
34003402 if (m_base->isSuperNode ())
3401- result = generator.emitPutById (base.get (), thisValue.get (), m_ident, result.get ());
3403+ generator.emitPutById (base.get (), thisValue.get (), m_ident, result.get ());
34023404 else
3403- result = generator.emitPutById (base.get (), m_ident, result.get ());
3405+ generator.emitPutById (base.get (), m_ident, result.get ());
34043406 generator.emitProfileType (result.get (), divotStart (), divotEnd ());
34053407
34063408 generator.emitLabel (afterAssignment.get ());
@@ -3479,24 +3481,24 @@ RegisterID* ShortCircuitReadModifyBracketNode::emitBytecode(BytecodeGenerator& g
34793481 RefPtr<RegisterID> property = generator.emitNodeForLeftHandSideForProperty (m_subscript, m_rightHasAssignments, m_right->isPure (generator));
34803482 RefPtr<RegisterID> thisValue;
34813483
3482- RefPtr<RegisterID> result;
3484+ RefPtr<RegisterID> result = generator. tempDestination (dst) ;
34833485
34843486 generator.emitExpressionInfo (subexpressionDivot (), subexpressionStart (), subexpressionEnd ());
34853487 if (m_base->isSuperNode ()) {
34863488 thisValue = generator.ensureThis ();
3487- result = generator.emitGetByVal (generator. tempDestination (dst ), base.get (), thisValue.get (), property.get ());
3489+ generator.emitGetByVal (result. get ( ), base.get (), thisValue.get (), property.get ());
34883490 } else
3489- result = generator.emitGetByVal (generator. tempDestination (dst ), base.get (), property.get ());
3491+ generator.emitGetByVal (result. get ( ), base.get (), property.get ());
34903492
34913493 Ref<Label> afterAssignment = generator.newLabel ();
34923494 emitShortCircuitAssignment (generator, result.get (), m_operator, afterAssignment.get ());
34933495
3494- result = generator.emitNode (result.get (), m_right);
3496+ generator.emitNode (result.get (), m_right);
34953497 generator.emitExpressionInfo (divot (), divotStart (), divotEnd ());
34963498 if (m_base->isSuperNode ())
3497- result = generator.emitPutByVal (base.get (), thisValue.get (), property.get (), result.get ());
3499+ generator.emitPutByVal (base.get (), thisValue.get (), property.get (), result.get ());
34983500 else
3499- result = generator.emitPutByVal (base.get (), property.get (), result.get ());
3501+ generator.emitPutByVal (base.get (), property.get (), result.get ());
35003502 generator.emitProfileType (result.get (), divotStart (), divotEnd ());
35013503
35023504 generator.emitLabel (afterAssignment.get ());
0 commit comments