Cleanup after 2c37807370 - get rid of global keyword, #29.
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				 The build was successful.
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	 The build was successful.
				
			This commit is contained in:
		
							
								
								
									
										70
									
								
								engine/vm.c
									
									
									
									
									
								
							
							
						
						
									
										70
									
								
								engine/vm.c
									
									
									
									
									
								
							@@ -529,48 +529,6 @@ static sxi32 VmEnterFrame(
 | 
			
		||||
	}
 | 
			
		||||
	return SXRET_OK;
 | 
			
		||||
}
 | 
			
		||||
/*
 | 
			
		||||
 * Link a foreign variable with the TOP most active frame.
 | 
			
		||||
 * Refer to the PH7_OP_UPLINK instruction implementation for more
 | 
			
		||||
 * information.
 | 
			
		||||
 */
 | 
			
		||||
static sxi32 VmFrameLink(ph7_vm *pVm, SyString *pName) {
 | 
			
		||||
	VmFrame *pTarget, *pFrame;
 | 
			
		||||
	SyHashEntry *pEntry = 0;
 | 
			
		||||
	sxi32 rc;
 | 
			
		||||
	/* Point to the upper frame */
 | 
			
		||||
	pFrame = pVm->pFrame;
 | 
			
		||||
	while(pFrame->pParent && (pFrame->iFlags & VM_FRAME_EXCEPTION)) {
 | 
			
		||||
		/* Safely ignore the exception frame */
 | 
			
		||||
		pFrame = pFrame->pParent;
 | 
			
		||||
	}
 | 
			
		||||
	pTarget = pFrame;
 | 
			
		||||
	pFrame = pTarget->pParent;
 | 
			
		||||
	while(pFrame) {
 | 
			
		||||
		if((pFrame->iFlags & VM_FRAME_EXCEPTION) == 0) {
 | 
			
		||||
			/* Query the current frame */
 | 
			
		||||
			pEntry = SyHashGet(&pFrame->hVar, (const void *)pName->zString, pName->nByte);
 | 
			
		||||
			if(pEntry) {
 | 
			
		||||
				/* Variable found */
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		/* Point to the upper frame */
 | 
			
		||||
		pFrame = pFrame->pParent;
 | 
			
		||||
	}
 | 
			
		||||
	if(pEntry == 0) {
 | 
			
		||||
		/* Inexistent variable */
 | 
			
		||||
		return SXERR_NOTFOUND;
 | 
			
		||||
	}
 | 
			
		||||
	/* Link to the current frame */
 | 
			
		||||
	rc = SyHashInsert(&pTarget->hVar, pEntry->pKey, pEntry->nKeyLen, pEntry->pUserData);
 | 
			
		||||
	if(rc == SXRET_OK) {
 | 
			
		||||
		sxu32 nIdx;
 | 
			
		||||
		nIdx = SX_PTR_TO_INT(pEntry->pUserData);
 | 
			
		||||
		PH7_VmRefObjInstall(&(*pVm), nIdx, SyHashLastEntry(&pTarget->hVar), 0, 0);
 | 
			
		||||
	}
 | 
			
		||||
	return rc;
 | 
			
		||||
}
 | 
			
		||||
/*
 | 
			
		||||
 * Leave the top-most active frame.
 | 
			
		||||
 */
 | 
			
		||||
@@ -4349,31 +4307,6 @@ static sxi32 VmByteCodeExec(
 | 
			
		||||
					}
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
			/*
 | 
			
		||||
			 * OP_UPLINK P1 * *
 | 
			
		||||
			 * Link a variable to the top active VM frame.
 | 
			
		||||
			 * This is used to implement the 'global' PHP construct.
 | 
			
		||||
			 */
 | 
			
		||||
			case PH7_OP_UPLINK: {
 | 
			
		||||
					if(pVm->pFrame->pParent) {
 | 
			
		||||
						ph7_value *pLink = &pTos[-pInstr->iP1 + 1];
 | 
			
		||||
						SyString sName;
 | 
			
		||||
						/* Perform the link */
 | 
			
		||||
						while(pLink <= pTos) {
 | 
			
		||||
							if((pLink->iFlags & MEMOBJ_STRING) == 0) {
 | 
			
		||||
								/* Force a string cast */
 | 
			
		||||
								PH7_MemObjToString(pLink);
 | 
			
		||||
							}
 | 
			
		||||
							SyStringInitFromBuf(&sName, SyBlobData(&pLink->sBlob), SyBlobLength(&pLink->sBlob));
 | 
			
		||||
							if(sName.nByte > 0) {
 | 
			
		||||
								VmFrameLink(&(*pVm), &sName);
 | 
			
		||||
							}
 | 
			
		||||
							pLink++;
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
					VmPopOperand(&pTos, pInstr->iP1);
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
			/*
 | 
			
		||||
			 * OP_LOAD_EXCEPTION * P2 P3
 | 
			
		||||
			 * Push an exception in the corresponding container so that
 | 
			
		||||
@@ -6043,9 +5976,6 @@ static const char *VmInstrToString(sxi32 nOp) {
 | 
			
		||||
		case PH7_OP_MEMBER:
 | 
			
		||||
			zOp = "MEMBER     ";
 | 
			
		||||
			break;
 | 
			
		||||
		case PH7_OP_UPLINK:
 | 
			
		||||
			zOp = "UPLINK     ";
 | 
			
		||||
			break;
 | 
			
		||||
		case PH7_OP_ERR_CTRL:
 | 
			
		||||
			zOp = "ERR_CTRL   ";
 | 
			
		||||
			break;
 | 
			
		||||
 
 | 
			
		||||
@@ -1365,7 +1365,6 @@ enum ph7_vm_op {
 | 
			
		||||
	PH7_OP_LOAD_REF,     /* Load reference */
 | 
			
		||||
	PH7_OP_STORE_REF,    /* Store a reference to a variable*/
 | 
			
		||||
	PH7_OP_MEMBER,       /* Class member run-time access */
 | 
			
		||||
	PH7_OP_UPLINK,       /* Run-Time frame link */
 | 
			
		||||
	PH7_OP_CVT_NULL,     /* NULL cast */
 | 
			
		||||
	PH7_OP_CVT_ARRAY,    /* Array cast */
 | 
			
		||||
	PH7_OP_CVT_OBJ,      /* Object cast */
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user