Browse Source

Always pop the l-value on variable declaration.

Otherwise, it might lead to unexpected behaviour including protected memory access and segmentation fault.
This finally fixes #49.
pull/50/head
Piotr Likoski 1 year ago
parent
commit
6b18e204cd
Signed by: likoski GPG Key ID: D9556DDD74910B18
1 changed files with 2 additions and 0 deletions
  1. +2
    -0
      engine/compiler.c

+ 2
- 0
engine/compiler.c View File

@ -2555,6 +2555,8 @@ static sxi32 PH7_CompileVar(ph7_gen_state *pGen) {
void *p3 = (void *) zDup;
/* Emit OP_DECLARE instruction */
PH7_VmEmitInstr(pGen->pVm, pGen->pIn->nLine, PH7_OP_DECLARE, 0, nType, p3, 0);
/* Pop the l-value */
PH7_VmEmitInstr(pGen->pVm, nLine, PH7_OP_POP, 1, 0, 0, 0);
/* Check if we have an expression to compile */
if(pGen->pIn < pGen->pEnd && (pGen->pIn[2].nType & PH7_TK_EQUAL)) {
/* Compile the expression */

Loading…
Cancel
Save