mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-03-21 18:01:15 +00:00
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:
parent
07fbe47294
commit
9ad075b02e
4 changed files with 29 additions and 16 deletions
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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]);
|
||||
|
||||
|
|
|
@ -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 ';'
|
||||
|
|
Loading…
Reference in a new issue