diff --git a/tools/qfcc/include/expr.h b/tools/qfcc/include/expr.h index 565f2f822..854c5eb08 100644 --- a/tools/qfcc/include/expr.h +++ b/tools/qfcc/include/expr.h @@ -66,6 +66,8 @@ expr_t *append_expr (expr_t *block, expr_t *e); void print_expr (expr_t *e); +void convert_int (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); diff --git a/tools/qfcc/source/pr_imm.c b/tools/qfcc/source/pr_imm.c index 96cd16965..d1b5d98e8 100644 --- a/tools/qfcc/source/pr_imm.c +++ b/tools/qfcc/source/pr_imm.c @@ -188,17 +188,17 @@ PR_ReuseConstant (expr_t *expr, def_t *def) switch (e.type) { case ex_entity: sprintf (rep, "\001entity:%08X\001", e.e.integer_val); - tab = float_imm_defs; + tab = entity_imm_defs; type = &type_entity; break; case ex_field: sprintf (rep, "\001field:%08X\001", e.e.integer_val); - tab = float_imm_defs; + tab = field_imm_defs; type = &type_field; break; case ex_func: sprintf (rep, "\001func:%08X\001", e.e.integer_val); - tab = float_imm_defs; + tab = func_imm_defs; type = &type_function; break; case ex_pointer: diff --git a/tools/qfcc/source/qc-parse.y b/tools/qfcc/source/qc-parse.y index 7e994d7d4..908c7cade 100644 --- a/tools/qfcc/source/qc-parse.y +++ b/tools/qfcc/source/qc-parse.y @@ -246,6 +246,12 @@ opt_initializer } ']' { + if ($3->type == ex_integer) + convert_int ($3); + if ($3->type != ex_float) + error ($3, "invalid type for frame number"); + if ($6->type->type != ev_func) + error ($3, "invalid type for think"); $$ = new_expr (); } begin_function statement_block end_function