Unset local for variable, fixes #62
Some checks failed
Build / AerScript (push) Failing after 26s
Some checks failed
Build / AerScript (push) Failing after 26s
This commit is contained in:
22
engine/vm.c
22
engine/vm.c
@@ -2292,6 +2292,28 @@ static sxi32 VmByteCodeExec(
|
||||
}
|
||||
break;
|
||||
}
|
||||
/*
|
||||
* UNSET: * * P3
|
||||
*
|
||||
* Unset a variable. It takes the variable name indexed at P3 operand.
|
||||
*/
|
||||
case PH7_OP_UNSET: {
|
||||
SyString sName;
|
||||
VmFrame *pFrame = pVm->pFrame;
|
||||
SyHashEntry *pEntry;
|
||||
sxu32 nIdx;
|
||||
SyStringInitFromBuf(&sName, pInstr->p3, SyStrlen((const char *)pInstr->p3));
|
||||
/* Find variable in local frame */
|
||||
pEntry = SyHashGet(&pFrame->hVar, (const void *)sName.zString, sName.nByte);
|
||||
if(pEntry) {
|
||||
nIdx = (sxu32)SX_PTR_TO_INT(pEntry->pUserData);
|
||||
/* Delete variable from local frame */
|
||||
SyHashDeleteEntry(&pFrame->hVar, (const void *)sName.zString, sName.nByte, 0);
|
||||
/* Call PH7_VmUnsetMemObj to release the variable */
|
||||
PH7_VmUnsetMemObj(&(*pVm), nIdx, FALSE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
/*
|
||||
* LOADC P1 P2 *
|
||||
*
|
||||
|
Reference in New Issue
Block a user