static void eval_binary_double(CRB_Interpreter *inter, ExpressionType operator, double left, double right, CRB_Value *result, int line_number) { if(dkc_is_math_operator(operator)){ result->type = CRB_DOUBLE_VALUE; } else if(dkc_is_compare_operator(operator)){ result->type = CRB_BOOLEAN_VALUE; } else { DBG_panic(("operator..%d\n", operator)); } switch(operator){ case BOOLEAN_EXPRESSION: case INT_EXPRESSION: case DOUBLE_EXPRESSION: case STIRNG_EXPRESSION: case IDENTIFIER_EXPERSSION: case ASSIGN_EXPRESSION: DBG_panic(("bad case..%d\n", operator)); break; case ADD_EXPRESSION: result->u.double_value = left + right; break; case SUB_EXPRESSION: result->u.double_value = left - right; break; case MUL_EXPERSSION: result->u.double_value = left * right; break; case DIV_EXPERSSION: result->u.double_value = left / right; break; case MOD_EXPRESSION: result->u.double_value = fmod(left, right); break; case LOGICAL_AND_EXPRESSION: case LOGICAL_OR_EXPRESSION: DBG_panic(("bad case ..%d", operator)); break; case EQ_EXPRESSION: result->u.double_value = left == right; break; case NE_EXPRESSION: result->u.dou_value = left != right; break; case GT_EXPRESSION: result->u.int_value = left > right; break; case GE_EXPRESSION: result->u.int_value = left >= right; break; case LT_EXPRESSION: result->u.int_value = left < right; break; case LE_EXPRESSION: result->u.int_value = left <= right; break; case MINUS_EXPRESSION: case FUNCTION_CALL_EXPRESSION: case NULL_EXPRESSION: case EXPRESSION_TYPE_COUNT_PLUS_1: default: DBG_panic(("bad defualt..%d", operator)); } }
static void eval_binary_int(SIMCAR_Interpreter *inter, ExpressionType operato, int left, int right, SIMCAR_Value *result, int line_number) { if (dkc_is_math_operator(operato)) { result->type = SIMCAR_INT_VALUE; } else if (dkc_is_compare_operator(operato)) { result->type = SIMCAR_BOOLEAN_VALUE; } else { DBG_panic(("operator..%d\n", operato)); } switch (operato) { case BOOLEAN_EXPRESSION: /* FALLTHRU */ case INT_EXPRESSION: /* FALLTHRU */ case DOUBLE_EXPRESSION: /* FALLTHRU */ case STRING_EXPRESSION: /* FALLTHRU */ case IDENTIFIER_EXPRESSION: /* FALLTHRU */ case ASSIGN_EXPRESSION: DBG_panic(("bad case...%d", operato)); break; case ADD_EXPRESSION: result->u.int_value = left + right; break; case SUB_EXPRESSION: result->u.int_value = left - right; break; case MUL_EXPRESSION: result->u.int_value = left * right; break; case DIV_EXPRESSION: result->u.int_value = left / right; break; case MOD_EXPRESSION: result->u.int_value = left % right; break; case LOGICAL_AND_EXPRESSION: /* FALLTHRU */ case LOGICAL_OR_EXPRESSION: DBG_panic(("bad case...%d", operato)); break; case EQ_EXPRESSION: result->u.boolean_value = left == right; break; case NE_EXPRESSION: result->u.boolean_value = left != right; break; case GT_EXPRESSION: result->u.boolean_value = left > right; break; case GE_EXPRESSION: result->u.boolean_value = left >= right; break; case LT_EXPRESSION: result->u.boolean_value = left < right; break; case LE_EXPRESSION: result->u.boolean_value = left <= right; break; case MINUS_EXPRESSION: /* FALLTHRU */ case FUNCTION_CALL_EXPRESSION: /* FALLTHRU */ case METHOD_CALL_EXPRESSION: /* FALLTHRU */ case NULL_EXPRESSION: /* FALLTHRU */ case ARRAY_EXPRESSION: /* FALLTHRU */ case INDEX_EXPRESSION: /* FALLTHRU */ case INCREMENT_EXPRESSION: /* FALLTHRU */ case DECREMENT_EXPRESSION: /* FALLTHRU */ case EXPRESSION_TYPE_COUNT_PLUS_1: /* FALLTHRU */ default: DBG_panic(("bad case...%d", operato)); } }