Пример #1
0
void ring_vm_pushplocal ( VM *pVM )
{
	/* Check Scope Life Time */
	if ( RING_VM_IR_READIVALUE(4) != pVM->nActiveScopeID ) {
		RING_VM_IR_OPCODE = ICO_LOADADDRESS ;
		ring_list_deliteminsidelist(pVM->aNewByteCodeItems,RING_VM_IR_ITEM(3));
		ring_list_deliteminsidelist(pVM->aNewByteCodeItems,RING_VM_IR_ITEM(4));
		#if RING_SHOWICFINAL
		RING_VM_IR_PARACOUNT = RING_VM_IR_PARACOUNT - 2 ;
		ring_list_deleteitem(RING_VM_IR_LIST,ring_list_getsize(RING_VM_IR_LIST));
		ring_list_deleteitem(RING_VM_IR_LIST,ring_list_getsize(RING_VM_IR_LIST));
		#endif
		pVM->nPC-- ;
		return ;
	}
	RING_VM_STACK_PUSHPVALUE(RING_VM_IR_READPVALUE(3)) ;
	RING_VM_STACK_OBJTYPE = RING_OBJTYPE_VARIABLE ;
}
Пример #2
0
void ring_vm_restorestack ( VM *pVM,List *pList )
{
	int x  ;
	List *pList2  ;
	pVM->nSP = 0 ;
	if ( ring_list_getsize(pList) == 0 ) {
		return ;
	}
	for ( x = ring_list_getsize(pList) ; x >= 1 ; x-- ) {
		if ( ring_list_isstring(pList,x) ) {
			RING_VM_STACK_PUSHCVALUE(ring_list_getstring(pList,x));
		}
		else if ( ring_list_isnumber(pList,x) ) {
			RING_VM_STACK_PUSHNVALUE(ring_list_getdouble(pList,x));
		}
		else if ( ring_list_islist(pList,x) ) {
			pList2 = ring_list_getlist(pList,x);
			RING_VM_STACK_PUSHPVALUE(ring_list_getpointer(pList2,1));
			RING_VM_STACK_OBJTYPE = ring_list_getint(pList2,2) ;
		}
	}
}