mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-01-30 12:40:42 +00:00
get nil conversions working fully and things like !pointer
This commit is contained in:
parent
681950cf26
commit
3d9c8a9a60
1 changed files with 21 additions and 4 deletions
|
@ -1029,15 +1029,15 @@ test_expr (expr_t *e, int test)
|
|||
break;
|
||||
case ev_field:
|
||||
new = new_expr ();
|
||||
new->type = ex_field;
|
||||
new->type = ex_nil;
|
||||
break;
|
||||
case ev_func:
|
||||
new = new_expr ();
|
||||
new->type = ex_func;
|
||||
new->type = ex_nil;
|
||||
break;
|
||||
case ev_pointer:
|
||||
new = new_expr ();
|
||||
new->type = ex_pointer;
|
||||
new->type = ex_nil;
|
||||
break;
|
||||
case ev_quaternion:
|
||||
new = new_expr ();
|
||||
|
@ -1061,6 +1061,14 @@ convert_int (expr_t *e)
|
|||
e->e.float_val = e->e.integer_val;
|
||||
}
|
||||
|
||||
void
|
||||
convert_nil (expr_t *e, type_t *t)
|
||||
{
|
||||
e->type = expr_types[t->type];
|
||||
if (e->type == ex_pointer)
|
||||
e->e.pointer.type = &type_void;
|
||||
}
|
||||
|
||||
expr_t *
|
||||
binary_expr (int op, expr_t *e1, expr_t *e2)
|
||||
{
|
||||
|
@ -1095,6 +1103,15 @@ binary_expr (int op, expr_t *e1, expr_t *e2)
|
|||
error (e1, "internal error");
|
||||
abort ();
|
||||
}
|
||||
if (op == EQ || op == NE) {
|
||||
if (e1->type == ex_nil) {
|
||||
t1 = t2;
|
||||
convert_nil (e1, t1);
|
||||
} else if (e2->type == ex_nil) {
|
||||
t2 = t1;
|
||||
convert_nil (e2, t2);
|
||||
}
|
||||
}
|
||||
|
||||
if (e1->type == ex_integer
|
||||
&& (t2 == &type_float
|
||||
|
@ -1717,7 +1734,7 @@ assign_expr (expr_t *e1, expr_t *e2)
|
|||
|
||||
if (t1->type != ev_void && e2->type == ex_nil) {
|
||||
t2 = t1;
|
||||
e2->type = expr_types[t2->type];
|
||||
convert_nil (e2, t2);
|
||||
}
|
||||
|
||||
if (t1 != t2)
|
||||
|
|
Loading…
Reference in a new issue