Exemplo n.º 1
0
Arquivo: il.c Projeto: tangziwen/tina
static void rt_eval_and ( 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_and ( *value_a,*value_b );
    set_tmp(tmp->tmp_index,&last_tmp_value,TMP_ARITH);
}
Exemplo n.º 2
0
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;
  }
}