static void rt_eval_or ( IL_node *tmp ) { Var *value_a,*value_b; value_a=IL_rt_Evaluate ( tmp->exp->A ); value_b=IL_rt_Evaluate ( tmp->exp->B ); last_tmp_value=var_or ( *value_a, *value_b ); set_tmp(tmp->tmp_index,&last_tmp_value,TMP_ARITH); }
static int operate(struct _var *var_d, struct _var *var_s, struct _operator *operator) { #ifdef DEBUG printf(">>> OPERATING ON %d/%f/%d (%d) %d/%f/%d\n", var_get_int32(var_d), var_get_float(var_d), var_get_type(var_d), operator->operation, var_get_int32(var_s), var_get_float(var_s), var_get_type(var_s)); #endif switch(operator->operation) { case OPER_NOT: return var_not(var_d); case OPER_MUL: return var_mul(var_d, var_s); case OPER_DIV: return var_div(var_d, var_s); case OPER_MOD: return var_mod(var_d, var_s); case OPER_PLUS: return var_add(var_d, var_s); case OPER_MINUS: return var_sub(var_d, var_s); case OPER_LEFT_SHIFT: return var_shift_left(var_d, var_s); case OPER_RIGHT_SHIFT: return var_shift_right(var_d, var_s); case OPER_AND: return var_and(var_d, var_s); case OPER_XOR: return var_xor(var_d, var_s); case OPER_OR: return var_or(var_d, var_s); default: printf("Internal Error: WTF, bad operator %d\n", operator->operation); return 0; } }