Skip to content

Commit

Permalink
Fix small bug
Browse files Browse the repository at this point in the history
  • Loading branch information
ShortDevelopment committed May 3, 2024
1 parent 31ec493 commit 6c46e4b
Showing 1 changed file with 20 additions and 11 deletions.
31 changes: 20 additions & 11 deletions lib/Runtime/ByteCode/ByteCodeEmitter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,20 +67,29 @@ static void EmitOptionalChainWrapper(ParseNodeUni *pnodeOptChain, ByteCodeGenera
emitChainContent(innerNode);
funcInfo->ReleaseLoc(innerNode);

// Acquire slot for the result value
Js::RegSlot resultSlot = funcInfo->AcquireLoc(pnodeOptChain);
// Copy chain result
byteCodeGenerator->Writer()->Reg2(Js::OpCode::Ld_A, resultSlot, innerNode->location);
if (innerNode->isUsed)
{
Assert(Js::Constants::NoRegister != innerNode->location);

// Skip short-circuiting logic
Js::ByteCodeLabel doneLabel = byteCodeGenerator->Writer()->DefineLabel();
byteCodeGenerator->Writer()->Br(doneLabel);
// Acquire slot for the result value
Js::RegSlot resultSlot = funcInfo->AcquireLoc(pnodeOptChain);
// Copy chain result
byteCodeGenerator->Writer()->Reg2(Js::OpCode::Ld_A, resultSlot, innerNode->location);

// Set `undefined` on short-circuiting
byteCodeGenerator->Writer()->MarkLabel(skipLabel);
byteCodeGenerator->Writer()->Reg2(Js::OpCode::Ld_A_ReuseLoc, resultSlot, funcInfo->undefinedConstantRegister);
// Skip short-circuiting logic
Js::ByteCodeLabel doneLabel = byteCodeGenerator->Writer()->DefineLabel();
byteCodeGenerator->Writer()->Br(doneLabel);

byteCodeGenerator->Writer()->MarkLabel(doneLabel);
// Set `undefined` on short-circuiting
byteCodeGenerator->Writer()->MarkLabel(skipLabel);
byteCodeGenerator->Writer()->Reg2(Js::OpCode::Ld_A_ReuseLoc, resultSlot, funcInfo->undefinedConstantRegister);

byteCodeGenerator->Writer()->MarkLabel(doneLabel);
}
else
{
byteCodeGenerator->Writer()->MarkLabel(skipLabel);
}
funcInfo->currentOptionalChainSkipLabel = previousSkipLabel;
}

Expand Down

0 comments on commit 6c46e4b

Please sign in to comment.