void CProceso::PrvInstFloatAInt(CProceso* const pProceso) { CStack* pStack = &pProceso->m_Stack; float float_value = pStack->PopFloat(); long int_value = (long) float_value; pStack->PushInt(int_value); }
void CProceso::PrvInstDivInt(CProceso* const pProceso) { CStack* pStack = &pProceso->m_Stack; long int_value2 = pStack->PopInt(); long int_value1 = pStack->PopInt(); long int_value = int_value1 / int_value2; pStack->PushInt(int_value); }
void CProceso::PrvInstIsZeroInt(CProceso* const pProceso) { CStack* pStack = &pProceso->m_Stack; long int_value = pStack->PopInt(); int_value = !int_value; //Si es igual a 0, la negación va a dar distinto de cero (verdadero), sino 0 (falso) pStack->PushInt(int_value); }
void CProceso::PrvInstCompareString(CProceso* const pProceso) { CStack* pStack = &pProceso->m_Stack; CObjetoCadena* cadena_value2 = pStack->PopString(false); CObjetoCadena* cadena_value1 = pStack->PopString(false); int n = strcmp(cadena_value1->ObtenerCadena(), cadena_value2->ObtenerCadena()); cadena_value2->DecrementarUso(); cadena_value1->DecrementarUso(); pStack->PushInt(n); }
void CProceso::PrvRetornarDeFuncion(void) { CFuncion* pCalledFunc = m_pFuncion; CStack* pStack = &m_Stack; CStack::InfoStackFunciones* pInfo = pStack->GetLastLlamadoFuncion(); m_Instruccion = pInfo->Instruccion; m_pFuncion = pInfo->pFuncion; m_pListaInstrucciones = m_pFuncion->ObtenerListaInstrucciones(); switch(pCalledFunc->TipoDevuelto()->ObtenerTipoDato()) { case CTipoDato::TIPO_NINGUNO: case CTipoDato::TIPO_VOID: pStack->PopLlamadoFuncion(); break; case CTipoDato::TIPO_INT: { long l = pStack->PopInt(); //printf("Resultado llamdo función: %d\n", l); pStack->PopLlamadoFuncion(); pStack->PushInt(l); break; } case CTipoDato::TIPO_FLOAT: { float f = pStack->PopFloat(); //printf("Resultado llamdo función: %f\n", f); pStack->PopLlamadoFuncion(); pStack->PushFloat(f); break; } case CTipoDato::TIPO_CADENA: { CObjetoCadena* pCadena = pStack->PopString(false); //printf("Resultado llamdo función: %s\n", (const char*) pCadena->ObtenerCadena()); pStack->PopLlamadoFuncion(); pStack->PushString(pCadena); pCadena->DecrementarUso(); break; } } }