make if/while/for use test_expr, make test_expr fix the new exp line/file,

fix some string const issues
This commit is contained in:
Bill Currie 2001-07-24 22:30:31 +00:00
parent 07fbe47294
commit 9ad075b02e
4 changed files with 29 additions and 16 deletions

View file

@ -65,6 +65,8 @@ expr_t *new_unary_expr (int op, expr_t *e1);
expr_t *append_expr (expr_t *block, expr_t *e);
void print_expr (expr_t *e);
expr_t *test_expr (expr_t *e, int test);
expr_t *binary_expr (int op, expr_t *e1, expr_t *e2);
expr_t *unary_expr (int op, expr_t *e);
expr_t *function_expr (expr_t *e1, expr_t *e2);

View file

@ -357,8 +357,8 @@ do_op_string (int op, expr_t *e1, expr_t *e2)
char *buf;
char *s1, *s2;
s1 = e1->e.string_val;
s2 = e2->e.string_val;
s1 = e1->e.string_val ? e1->e.string_val : "";
s2 = e2->e.string_val ? e2->e.string_val : "";
switch (op) {
case '+':
@ -619,7 +619,7 @@ field_expr (expr_t *e1, expr_t *e2)
return e;
}
static expr_t *
expr_t *
test_expr (expr_t *e, int test)
{
expr_t *new = 0;
@ -669,7 +669,12 @@ test_expr (expr_t *e, int test)
new->type = ex_quaternion;
break;
}
return binary_expr (NE, e, new);
new->line = e->line;
new->file = e->file;
new = binary_expr (NE, e, new);
new->line = e->line;
new->file = e->file;
return new;
}
void
@ -932,9 +937,9 @@ function_expr (expr_t *e1, expr_t *e2)
if (err)
return err;
} else {
for (e = e2; e; e = e->next)
if (e->type == ex_integer)
warning (e, "passing integer consant into ... function");
//for (e = e2; e; e = e->next)
// if (e->type == ex_integer)
// warning (e, "passing integer consant into ... function");
}
e = new_binary_expr ('c', e1, e2);
e->e.expr.type = ftype->aux_type;

View file

@ -178,6 +178,12 @@ PR_ReuseConstant (expr_t *expr, def_t *def)
pointer_imm_defs = Hash_NewTable (16381, int_imm_get_key, 0, "pointer");
quaternion_imm_defs = Hash_NewTable (16381, quaternion_imm_get_key, 0, 0);
integer_imm_defs = Hash_NewTable (16381, int_imm_get_key, 0, "integer");
Hash_Add (string_imm_defs, PR_NewDef (&type_string, ".imm", 0));
Hash_Add (float_imm_defs, PR_NewDef (&type_float, ".imm", 0));
Hash_Add (entity_imm_defs, PR_NewDef (&type_entity, ".imm", 0));
Hash_Add (pointer_imm_defs, PR_NewDef (&type_pointer, ".imm", 0));
Hash_Add (integer_imm_defs, PR_NewDef (&type_integer, ".imm", 0));
}
switch (e.type) {
case ex_entity:
@ -214,7 +220,7 @@ PR_ReuseConstant (expr_t *expr, def_t *def)
type = &type_float;
break;
case ex_string:
r = e.e.string_val;
r = e.e.string_val ? e.e.string_val : "";
tab = string_imm_defs;
type = &type_string;
break;
@ -266,7 +272,7 @@ PR_ReuseConstant (expr_t *expr, def_t *def)
cn->initialized = 1;
// copy the immediate to the global area
if (e.type == ex_string)
e.e.integer_val = CopyString (e.e.string_val);
e.e.integer_val = CopyString (r);
memcpy (pr_globals + cn->ofs, &e.e, 4 * type_size[type->type]);

View file

@ -331,13 +331,13 @@ statement
$$ = new_block_expr ();
e = new_binary_expr ('n', $3, l2);
e = new_binary_expr ('n', test_expr ($3, 1), l2);
e->line = $3->line;
e->file = $3->file;
append_expr ($$, e);
append_expr ($$, l1);
append_expr ($$, $5);
e = new_binary_expr ('i', $3, l1);
e = new_binary_expr ('i', test_expr ($3, 1), l1);
e->line = $3->line;
e->file = $3->file;
append_expr ($$, e);
@ -351,7 +351,7 @@ statement
append_expr ($$, l1);
append_expr ($$, $2);
append_expr ($$, new_binary_expr ('i', $5, l1));
append_expr ($$, new_binary_expr ('i', test_expr ($5, 1), l1));
}
| LOCAL type
{
@ -370,7 +370,7 @@ statement
$$ = new_block_expr ();
e = new_binary_expr ('n', $3, l1);
e = new_binary_expr ('n', test_expr ($3, 1), l1);
e->line = $3->line;
e->file = $3->file;
append_expr ($$, e);
@ -385,7 +385,7 @@ statement
$$ = new_block_expr ();
e = new_binary_expr ('n', $3, l1);
e = new_binary_expr ('n', test_expr ($3, 1), l1);
e->line = $3->line;
e->file = $3->file;
append_expr ($$, e);
@ -407,11 +407,11 @@ statement
$$ = new_block_expr ();
append_expr ($$, $3);
append_expr ($$, new_binary_expr ('n', $5, l2));
append_expr ($$, new_binary_expr ('n', test_expr ($5, 1), l2));
append_expr ($$, l1);
append_expr ($$, $9);
append_expr ($$, $7);
append_expr ($$, new_binary_expr ('i', $5, l1));
append_expr ($$, new_binary_expr ('i', test_expr ($5, 1), l1));
append_expr ($$, l2);
}
| expr ';'