Skip to content

Commit 6c46e4b

Browse files
Fix small bug
1 parent 31ec493 commit 6c46e4b

File tree

1 file changed

+20
-11
lines changed

1 file changed

+20
-11
lines changed

lib/Runtime/ByteCode/ByteCodeEmitter.cpp

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -67,20 +67,29 @@ static void EmitOptionalChainWrapper(ParseNodeUni *pnodeOptChain, ByteCodeGenera
6767
emitChainContent(innerNode);
6868
funcInfo->ReleaseLoc(innerNode);
6969

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

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

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

83-
byteCodeGenerator->Writer()->MarkLabel(doneLabel);
83+
// Set `undefined` on short-circuiting
84+
byteCodeGenerator->Writer()->MarkLabel(skipLabel);
85+
byteCodeGenerator->Writer()->Reg2(Js::OpCode::Ld_A_ReuseLoc, resultSlot, funcInfo->undefinedConstantRegister);
86+
87+
byteCodeGenerator->Writer()->MarkLabel(doneLabel);
88+
}
89+
else
90+
{
91+
byteCodeGenerator->Writer()->MarkLabel(skipLabel);
92+
}
8493
funcInfo->currentOptionalChainSkipLabel = previousSkipLabel;
8594
}
8695

0 commit comments

Comments
 (0)