Skip to content

Commit a11038a

Browse files
Remove useless copy
1 parent 6c46e4b commit a11038a

File tree

1 file changed

+14
-14
lines changed

1 file changed

+14
-14
lines changed

lib/Runtime/ByteCode/ByteCodeEmitter.cpp

+14-14
Original file line numberDiff line numberDiff line change
@@ -67,29 +67,29 @@ static void EmitOptionalChainWrapper(ParseNodeUni *pnodeOptChain, ByteCodeGenera
6767
emitChainContent(innerNode);
6868
funcInfo->ReleaseLoc(innerNode);
6969

70-
if (innerNode->isUsed)
70+
Js::ByteCodeLabel doneLabel = Js::Constants::NoRegister;
71+
if (pnodeOptChain->isUsed)
7172
{
72-
Assert(Js::Constants::NoRegister != innerNode->location);
73-
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);
73+
Assert(innerNode->isUsed);
7874

7975
// Skip short-circuiting logic
80-
Js::ByteCodeLabel doneLabel = byteCodeGenerator->Writer()->DefineLabel();
76+
doneLabel = byteCodeGenerator->Writer()->DefineLabel();
8177
byteCodeGenerator->Writer()->Br(doneLabel);
78+
}
79+
80+
byteCodeGenerator->Writer()->MarkLabel(skipLabel);
81+
82+
if (pnodeOptChain->isUsed)
83+
{
84+
// Acquire slot for the result value
85+
Js::RegSlot resultSlot = funcInfo->AcquireLoc(pnodeOptChain);
86+
Assert(Js::Constants::NoRegister != resultSlot);
87+
Assert(resultSlot == innerNode->location);
8288

8389
// Set `undefined` on short-circuiting
84-
byteCodeGenerator->Writer()->MarkLabel(skipLabel);
8590
byteCodeGenerator->Writer()->Reg2(Js::OpCode::Ld_A_ReuseLoc, resultSlot, funcInfo->undefinedConstantRegister);
86-
8791
byteCodeGenerator->Writer()->MarkLabel(doneLabel);
8892
}
89-
else
90-
{
91-
byteCodeGenerator->Writer()->MarkLabel(skipLabel);
92-
}
9393
funcInfo->currentOptionalChainSkipLabel = previousSkipLabel;
9494
}
9595

0 commit comments

Comments
 (0)