Ejemplo n.º 1
0
void ring_vm_inclpjump ( VM *pVM )
{
	List *pVar  ;
	double nNum1,nNum2  ;
	/* Check Scope Life Time */
	if ( RING_VM_IR_READIVALUE(4) != pVM->nActiveScopeID ) {
		RING_VM_IR_OPCODE = ICO_INCJUMP ;
		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 ;
	}
	pVar = (List *) RING_VM_IR_READPVALUE(3) ;
	nNum1 = ring_list_getdouble(pVM->aForStep,ring_list_getsize(pVM->aForStep));
	/* Check Data */
	if ( ring_list_isstring(pVar,RING_VAR_VALUE) ) {
		nNum2 = ring_vm_stringtonum(pVM,ring_list_getstring(pVar,RING_VAR_VALUE));
	}
	else if ( ring_list_isnumber(pVar,RING_VAR_VALUE) ) {
		nNum2 = ring_list_getdouble(pVar,RING_VAR_VALUE) ;
	} else {
		ring_vm_error(pVM,RING_VM_ERROR_FORLOOPDATATYPE);
		return ;
	}
	ring_list_setdouble(pVar,RING_VAR_VALUE,nNum2 + nNum1);
	/* Jump */
	pVM->nPC = RING_VM_IR_READIVALUE(2) ;
}
Ejemplo n.º 2
0
void ring_vm_addnewnumbervar ( VM *pVM,const char *cStr,double x )
{
	List *pList  ;
	pList = ring_vm_newvar2(cStr,pVM->pActiveMem);
	ring_list_setint(pList,RING_VAR_TYPE,RING_VM_NUMBER);
	ring_list_setdouble(pList,RING_VAR_VALUE,x);
}
Ejemplo n.º 3
0
void ring_vm_incpjumpstep1 ( VM *pVM )
{
	List *pVar  ;
	double nNum1  ;
	pVar = (List *) RING_VM_IR_READP ;
	/* We Don't Check Data Type */
	nNum1 = ring_list_getdouble(pVar,RING_VAR_VALUE) ;
	ring_list_setdouble(pVar,RING_VAR_VALUE,nNum1 + 1);
	/* Jump */
	pVM->nPC = RING_VM_IR_READIVALUE(2) ;
}
Ejemplo n.º 4
0
void ring_vm_jumpvarlenum ( VM *pVM )
{
	List *pVar  ;
	double nNum1,nNum2  ;
	if ( ring_vm_findvar(pVM, RING_VM_IR_READC  ) == 0 ) {
		ring_vm_newvar(pVM, RING_VM_IR_READC);
	}
	nNum1 = ring_list_getdouble(pVM->aForStep,ring_list_getsize(pVM->aForStep));
	/* Change Instruction for Performance */
	if ( pVM->nVarScope == RING_VARSCOPE_GLOBAL ) {
		/* Replace JumpVarLENum with JumpVarPLENum for better performance */
		if ( nNum1 == 1.0 ) {
			RING_VM_IR_OPCODE = ICO_JUMPVARPLENUMSTEP1 ;
		} else {
			RING_VM_IR_OPCODE = ICO_JUMPVARPLENUM ;
		}
		ring_item_setpointer(RING_VM_IR_ITEM(1),RING_VM_STACK_READP);
	}
	else if ( pVM->nVarScope == RING_VARSCOPE_LOCAL ) {
		/* Replace JumpVarLENum with JumpVarLPLENum for better performance */
		RING_VM_IR_OPCODE = ICO_JUMPVARLPLENUM ;
		ring_item_setpointer(RING_VM_IR_ITEM(4),RING_VM_STACK_READP);
		ring_item_setint(RING_VM_IR_ITEM(5),ring_list_getint(pVM->aScopeID,ring_list_getsize(pVM->aScopeID)));
		#if RING_SHOWICFINAL
		RING_VM_IR_PARACOUNT = RING_VM_IR_PARACOUNT + 2 ;
		ring_list_addpointer(RING_VM_IR_LIST,RING_VM_STACK_READP);
		ring_list_addint(RING_VM_IR_LIST,ring_list_getint(pVM->aScopeID,ring_list_getsize(pVM->aScopeID)));
		#endif
	}
	pVar = (List *) RING_VM_STACK_READP ;
	RING_VM_STACK_POP ;
	/* Check Data */
	if ( ring_list_isstring(pVar,RING_VAR_VALUE) ) {
		nNum2 = ring_vm_stringtonum(pVM,ring_list_getstring(pVar,RING_VAR_VALUE));
		ring_list_setdouble(pVar,RING_VAR_VALUE,nNum2);
	}
	else if ( ring_list_isnumber(pVar,RING_VAR_VALUE) ) {
		nNum2 = ring_list_getdouble(pVar,RING_VAR_VALUE) ;
	} else {
		ring_vm_error(pVM,RING_VM_ERROR_FORLOOPDATATYPE);
		return ;
	}
	if ( nNum1 < 0 ) {
		if ( ! (nNum2 >= RING_VM_IR_READDVALUE(2)) ) {
			/* Jump */
			pVM->nPC = RING_VM_IR_READIVALUE(3) ;
		}
	} else {
		if ( ! (nNum2 <= RING_VM_IR_READDVALUE(2)) ) {
			/* Jump */
			pVM->nPC = RING_VM_IR_READIVALUE(3) ;
		}
	}
}
Ejemplo n.º 5
0
void ring_vm_incjump ( VM *pVM )
{
	List *pVar  ;
	double nNum1,nNum2  ;
	if ( ring_vm_findvar(pVM, RING_VM_IR_READC ) == 0 ) {
		ring_vm_newvar(pVM, RING_VM_IR_READC);
	}
	nNum1 = ring_list_getdouble(pVM->aForStep,ring_list_getsize(pVM->aForStep));
	/* Change Instruction for Performance */
	if ( pVM->nVarScope == RING_VARSCOPE_GLOBAL ) {
		/* Replace ICO_INCJUMP with IncPJUMP for better performance */
		if ( nNum1 == 1.0 ) {
			RING_VM_IR_OPCODE = ICO_INCPJUMPSTEP1 ;
		} else {
			RING_VM_IR_OPCODE = ICO_INCPJUMP ;
		}
		ring_item_setpointer(RING_VM_IR_ITEM(1),RING_VM_STACK_READP);
	}
	else if ( pVM->nVarScope == RING_VARSCOPE_LOCAL ) {
		/* Replace ICO_INCJUMP with IncLPJUMP for better performance */
		RING_VM_IR_OPCODE = ICO_INCLPJUMP ;
		ring_item_setpointer(RING_VM_IR_ITEM(3),RING_VM_STACK_READP);
		ring_item_setint(RING_VM_IR_ITEM(4),ring_list_getint(pVM->aScopeID,ring_list_getsize(pVM->aScopeID)));
	}
	pVar = (List *) RING_VM_STACK_READP ;
	RING_VM_STACK_POP ;
	/* Check Data */
	if ( ring_list_isstring(pVar,RING_VAR_VALUE) ) {
		nNum2 = ring_vm_stringtonum(pVM,ring_list_getstring(pVar,RING_VAR_VALUE));
		ring_list_setdouble(pVar,RING_VAR_VALUE,nNum2);
	}
	else if ( ring_list_isnumber(pVar,RING_VAR_VALUE) ) {
		nNum2 = ring_list_getdouble(pVar,RING_VAR_VALUE) ;
	} else {
		ring_vm_error(pVM,RING_VM_ERROR_FORLOOPDATATYPE);
		return ;
	}
	ring_list_setdouble(pVar,RING_VAR_VALUE,nNum2 +nNum1);
	/* Jump */
	pVM->nPC = RING_VM_IR_READIVALUE(2) ;
}
Ejemplo n.º 6
0
void ring_vm_incpjump ( VM *pVM )
{
	List *pVar  ;
	double nNum1,nNum2  ;
	pVar = (List *) RING_VM_IR_READP ;
	nNum1 = ring_list_getdouble(pVM->aForStep,ring_list_getsize(pVM->aForStep));
	/* Check Data */
	if ( ring_list_isstring(pVar,RING_VAR_VALUE) ) {
		nNum2 = ring_vm_stringtonum(pVM,ring_list_getstring(pVar,RING_VAR_VALUE));
	}
	else if ( ring_list_isnumber(pVar,RING_VAR_VALUE) ) {
		nNum2 = ring_list_getdouble(pVar,RING_VAR_VALUE) ;
	} else {
		ring_vm_error(pVM,RING_VM_ERROR_FORLOOPDATATYPE);
		return ;
	}
	ring_list_setdouble(pVar,RING_VAR_VALUE,nNum2 + nNum1);
	/* Jump */
	pVM->nPC = RING_VM_IR_READIVALUE(2) ;
}
Ejemplo n.º 7
0
void ring_vm_refmeta_setattribute ( void *pPointer )
{
	List *pList  ;
	char *cStr  ;
	int x  ;
	if ( RING_API_PARACOUNT != 3 ) {
		RING_API_ERROR(RING_API_BADPARACOUNT);
		return ;
	}
	if ( RING_API_ISLIST(1) && RING_API_ISSTRING(2) ) {
		pList = RING_API_GETLIST(1) ;
		if ( ring_vm_oop_isobject(pList) ) {
			pList = ring_list_getlist(pList,RING_OBJECT_OBJECTDATA);
			cStr = RING_API_GETSTRING(2) ;
			ring_string_lower(cStr);
			for ( x = 1 ; x <= ring_list_getsize(pList) ; x++ ) {
				if ( strcmp(ring_list_getstring(ring_list_getlist(pList,x),RING_VAR_NAME),cStr) == 0 ) {
					pList = ring_list_getlist(pList,x) ;
					if ( RING_API_ISNUMBER(3) ) {
						ring_list_setdouble(pList,RING_VAR_VALUE,RING_API_GETNUMBER(3));
					}
					else if ( RING_API_ISSTRING(3) ) {
						ring_list_setstring2(pList,RING_VAR_VALUE,RING_API_GETSTRING(3),RING_API_GETSTRINGSIZE(3));
					}
					else if ( RING_API_ISLIST(3) ) {
						ring_list_setlist(pList,RING_VAR_VALUE);
						pList = ring_list_getlist(pList,RING_VAR_VALUE);
						ring_list_deleteallitems(pList);
						ring_list_copy(pList,RING_API_GETLIST(3));
					}
					return ;
				}
			}
			RING_API_ERROR("Error : Property is not found!");
		} else {
			RING_API_ERROR(RING_API_BADPARATYPE);
		}
	} else {
		RING_API_ERROR(RING_API_BADPARATYPE);
	}
}
Ejemplo n.º 8
0
void ring_vm_incp ( VM *pVM )
{
	List *pVar  ;
	pVar = (List *) RING_VM_IR_READP ;
	ring_list_setdouble(pVar,RING_VAR_VALUE,ring_list_getdouble(pVar,RING_VAR_VALUE) + 1);
}