}
else
{
- /* TODO: type checking and EA l-values */
+ /* TODO: type checking */
if(dpas_sem_is_rvalue(args[param]))
{
- value_args[param] = dpas_sem_get_value(args[param]);
+ value_args[param] = dpas_sem_get_value
+ (dpas_lvalue_to_rvalue(args[param]));
}
else
{
jit_value_t value; \
value = func \
(dpas_current_function(), \
- dpas_sem_get_value(arg1), \
- dpas_sem_get_value(arg2)); \
+ dpas_sem_get_value(dpas_lvalue_to_rvalue(arg1)), \
+ dpas_sem_get_value(dpas_lvalue_to_rvalue(arg2))); \
dpas_sem_set_rvalue \
(yyval.semvalue, jit_value_get_type(value), value); \
} \
jit_value_t value; \
value = func \
(dpas_current_function(), \
- dpas_sem_get_value(arg1), \
- dpas_sem_get_value(arg2)); \
+ dpas_sem_get_value(dpas_lvalue_to_rvalue(arg1)), \
+ dpas_sem_get_value(dpas_lvalue_to_rvalue(arg2))); \
dpas_sem_set_rvalue \
(yyval.semvalue, jit_value_get_type(value), value); \
} \
jit_value_t value; \
value = func \
(dpas_current_function(), \
- dpas_sem_get_value(arg1), \
- dpas_sem_get_value(arg2)); \
+ dpas_sem_get_value(dpas_lvalue_to_rvalue(arg1)), \
+ dpas_sem_get_value(dpas_lvalue_to_rvalue(arg2))); \
dpas_sem_set_rvalue \
(yyval.semvalue, jit_value_get_type(value), value); \
} \
BooleanExpression
: Expression {
/* TODO: type checking */
- $$ = $1;
+ $$ = dpas_lvalue_to_rvalue($1);
}
;
{
jit_value_t value;
value = jit_insn_neg
- (dpas_current_function(), dpas_sem_get_value($2));
+ (dpas_current_function(),
+ dpas_sem_get_value(dpas_lvalue_to_rvalue($2)));
dpas_sem_set_rvalue($$, jit_value_get_type(value), value);
}
}
jit_label_t label1 = jit_label_undefined;
jit_label_t label2 = jit_label_undefined;
jit_value_t value, const_value;
+ $1 = dpas_lvalue_to_rvalue($1);
+ $3 = dpas_lvalue_to_rvalue($3);
if(!jit_insn_branch_if
(dpas_current_function(),
dpas_sem_get_value($1), &label1))
jit_label_t label1 = jit_label_undefined;
jit_label_t label2 = jit_label_undefined;
jit_value_t value, const_value;
+ $1 = dpas_lvalue_to_rvalue($1);
+ $3 = dpas_lvalue_to_rvalue($3);
if(!jit_insn_branch_if_not
(dpas_current_function(),
dpas_sem_get_value($1), &label1))
}
| K_NOT Factor {
jit_value_t value;
+ $2 = dpas_lvalue_to_rvalue($2);
if(dpas_sem_is_rvalue($2) &&
dpas_type_is_boolean(dpas_sem_get_type($2)))
{