Always pop the l-value on variable declaration.
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				 The build was successful.
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	 The build was successful.
				
			Otherwise, it might lead to unexpected behaviour including protected memory access and segmentation fault. This finally fixes #49.
This commit is contained in:
		@@ -2555,6 +2555,8 @@ static sxi32 PH7_CompileVar(ph7_gen_state *pGen) {
 | 
				
			|||||||
			void *p3 = (void *) zDup;
 | 
								void *p3 = (void *) zDup;
 | 
				
			||||||
			/* Emit OP_DECLARE instruction */
 | 
								/* Emit OP_DECLARE instruction */
 | 
				
			||||||
			PH7_VmEmitInstr(pGen->pVm, pGen->pIn->nLine, PH7_OP_DECLARE, 0, nType, p3, 0);
 | 
								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 */
 | 
								/* Check if we have an expression to compile */
 | 
				
			||||||
			if(pGen->pIn < pGen->pEnd && (pGen->pIn[2].nType & PH7_TK_EQUAL)) {
 | 
								if(pGen->pIn < pGen->pEnd && (pGen->pIn[2].nType & PH7_TK_EQUAL)) {
 | 
				
			||||||
				/* Compile the expression */
 | 
									/* Compile the expression */
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user