From 324b89696ab0d03ab1680a30d94fc8381c82312a Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Wed, 11 Sep 2002 16:21:26 +0000 Subject: [PATCH] create new_*_expr functions for all basic expression types except ex_poitner and use them instead of new_expr and setting the fields each time. Serious code cleanup :) --- tools/qfcc/include/expr.h | 22 ++++- tools/qfcc/source/expr.c | 187 +++++++++++++++++++++++++---------- tools/qfcc/source/method.c | 10 +- tools/qfcc/source/qc-parse.y | 79 ++++----------- 4 files changed, 174 insertions(+), 124 deletions(-) diff --git a/tools/qfcc/include/expr.h b/tools/qfcc/include/expr.h index 662c8bbdc..5872d372a 100644 --- a/tools/qfcc/include/expr.h +++ b/tools/qfcc/include/expr.h @@ -127,15 +127,31 @@ struct type_s *get_type (expr_t *e); etype_t extract_type (expr_t *e); expr_t *new_expr (void); + const char *new_label_name (void); + expr_t *new_label_expr (void); expr_t *new_block_expr (void); expr_t *new_binary_expr (int op, expr_t *e1, expr_t *e2); expr_t *new_unary_expr (int op, expr_t *e1); -expr_t *new_temp_def_expr (struct type_s *type); -expr_t *new_bind_expr (expr_t *e1, expr_t *e2); -expr_t *new_name_expr (const char *name); expr_t *new_def_expr (struct def_s *def); +expr_t *new_temp_def_expr (struct type_s *type); +expr_t *new_nil_expr (void); +expr_t *new_name_expr (const char *name); + +expr_t *new_string_expr (const char *string_val); +expr_t *new_float_expr (float float_val); +expr_t *new_vector_expr (float *vector_val); +expr_t *new_entity_expr (int entity_val); +expr_t *new_field_expr (int field_val); +expr_t *new_func_expr (int func_val); +//expr_t *new_pointer_expr (); +expr_t *new_quaternion_expr (float *quaternion_val); +expr_t *new_integer_expr (int integer_val); +expr_t *new_uinteger_expr (unsigned int uinteger_val); +expr_t *new_short_expr (short short_val); + +expr_t *new_bind_expr (expr_t *e1, expr_t *e2); expr_t *new_self_expr (void); expr_t *new_this_expr (void); diff --git a/tools/qfcc/source/expr.c b/tools/qfcc/source/expr.c index e79c7e040..df92dc98e 100644 --- a/tools/qfcc/source/expr.c +++ b/tools/qfcc/source/expr.c @@ -476,6 +476,15 @@ new_unary_expr (int op, expr_t *e1) return e; } +expr_t * +new_def_expr (def_t *def) +{ + expr_t *e = new_expr (); + e->type = ex_def; + e->e.def = def; + return e; +} + expr_t * new_temp_def_expr (type_t *type) { @@ -486,6 +495,114 @@ new_temp_def_expr (type_t *type) return e; } +expr_t * +new_nil_expr (void) +{ + expr_t *e = new_expr (); + e->type = ex_nil; + return e; +} + +expr_t * +new_name_expr (const char *name) +{ + expr_t *e = new_expr (); + e->type = ex_name; + e->e.string_val = name; + return e; +} + +expr_t * +new_string_expr (const char *string_val) +{ + expr_t *e = new_expr (); + e->type = ex_string; + e->e.string_val = string_val; + return e; +} + +expr_t * +new_float_expr (float float_val) +{ + expr_t *e = new_expr (); + e->type = ex_float; + e->e.float_val = float_val; + return e; +} + +expr_t * +new_vector_expr (float *vector_val) +{ + expr_t *e = new_expr (); + e->type = ex_vector; + memcpy (e->e.vector_val, vector_val, sizeof (e->e.vector_val)); + return e; +} + +expr_t * +new_entity_expr (int entity_val) +{ + expr_t *e = new_expr (); + e->type = ex_entity; + e->e.entity_val = entity_val; + return e; +} + +expr_t * +new_field_expr (int field_val) +{ + expr_t *e = new_expr (); + e->type = ex_field; + e->e.field_val = field_val; + return e; +} + +expr_t * +new_func_expr (int func_val) +{ + expr_t *e = new_expr (); + e->type = ex_func; + e->e.func_val = func_val; + return e; +} + +//expr_t *new_pointer_expr (); +expr_t * +new_quaternion_expr (float *quaternion_val) +{ + expr_t *e = new_expr (); + e->type = ex_quaternion; + memcpy (e->e.quaternion_val, quaternion_val, sizeof (e->e.quaternion_val)); + return e; +} + +expr_t * +new_integer_expr (int integer_val) +{ + expr_t *e = new_expr (); + e->type = ex_integer; + e->e.integer_val = integer_val; + return e; +} + +expr_t * +new_uinteger_expr (unsigned int uinteger_val) +{ + expr_t *e = new_expr (); + e->type = ex_uinteger; + e->e.uinteger_val = uinteger_val; + return e; +} + +expr_t * +new_short_expr (short short_val) +{ + expr_t *e = new_expr (); + e->type = ex_short; + e->e.short_val = short_val; + return e; +} + expr_t * new_bind_expr (expr_t *e1, expr_t *e2) { @@ -503,24 +620,6 @@ new_bind_expr (expr_t *e1, expr_t *e2) return e; } -expr_t * -new_name_expr (const char *name) -{ - expr_t *e = new_expr (); - e->type = ex_name; - e->e.string_val = name; - return e; -} - -expr_t * -new_def_expr (def_t *def) -{ - expr_t *e = new_expr (); - e->type = ex_def; - e->e.def = def; - return e; -} - expr_t * new_self_expr (void) { @@ -1121,6 +1220,7 @@ field_expr (expr_t *e1, expr_t *e2) expr_t * test_expr (expr_t *e, int test) { + static float zero[4] = {0, 0, 0, 0}; expr_t *new = 0; etype_t type; @@ -1142,8 +1242,7 @@ test_expr (expr_t *e, int test) case ev_void: return error (e, "void has no value"); case ev_string: - new = new_expr (); - new->type = ex_string; + new = new_string_expr (0); break; case ev_uinteger: case ev_integer: @@ -1152,32 +1251,25 @@ test_expr (expr_t *e, int test) case ev_float: if (options.code.progsversion == PROG_ID_VERSION) return e; - new = new_expr (); - new->type = ex_float; + new = new_float_expr (0); break; case ev_vector: - new = new_expr (); - new->type = ex_vector; + new = new_vector_expr (zero); break; case ev_entity: - new = new_expr (); - new->type = ex_entity; + new = new_entity_expr (0); break; case ev_field: - new = new_expr (); - new->type = ex_nil; + new = new_field_expr (0); break; case ev_func: - new = new_expr (); - new->type = ex_nil; + new = new_func_expr (0); break; case ev_pointer: - new = new_expr (); - new->type = ex_nil; + new = new_nil_expr (); break; case ev_quaternion: - new = new_expr (); - new->type = ex_quaternion; + new = new_quaternion_expr (zero); break; case ev_struct: case ev_object: @@ -1509,10 +1601,7 @@ unary_expr (int op, expr_t *e) case ex_temp: bitnot_expr: if (options.code.progsversion == PROG_ID_VERSION) { - expr_t *n1 = new_expr (); - - n1->type = ex_integer; - n1->e.integer_val = -1; + expr_t *n1 = new_integer_expr (-1); return binary_expr ('-', n1, e); } else { expr_t *n = new_unary_expr (op, e); @@ -1716,12 +1805,9 @@ function_expr (expr_t *e1, expr_t *e2) e->e.expr.type = ftype->aux_type; append_expr (call, e); if (ftype->aux_type != &type_void) { - expr_t *ret = new_expr (); + expr_t *ret = new_def_expr (new_def (ftype->aux_type, 0, 0)); - ret->type = ex_def; - ret->e.def = new_def (ftype->aux_type, 0, 0); ret->e.def->ofs = def_ret.ofs; - call->e.block.result = ret; } return call; @@ -1734,8 +1820,7 @@ return_expr (function_t *f, expr_t *e) if (f->def->type->aux_type != &type_void) { if (options.traditional) { warning (e, "return from non-void function without a value"); - e = new_expr (); - e->type = ex_nil; + e = new_nil_expr (); } else { e = error (e, "return from non-void function without a value"); return e; @@ -1800,14 +1885,13 @@ conditional_expr (expr_t *cond, expr_t *e1, expr_t *e2) expr_t * incop_expr (int op, expr_t *e, int postop) { - expr_t *one = new_expr (); + expr_t *one; expr_t *incop; if (e->type == ex_error) return e; - one->type = ex_integer; // integer constants get auto-cast to float - one->e.integer_val = 1; + one = new_integer_expr (1); // integer constants get auto-cast to float incop = asx_expr (op, e, one); if (postop) { expr_t *temp; @@ -2149,11 +2233,10 @@ expr_t * encode_expr (type_t *type) { dstring_t *encoding = dstring_newstr (); - expr_t *e = new_expr (); + expr_t *e; encode_type (encoding, type); - e->type = ex_string; - e->e.string_val = encoding->str; + e = new_string_expr (encoding->str); free (encoding); return e; } @@ -2216,8 +2299,6 @@ sizeof_expr (expr_t *expr, struct type_s *type) } if (!type) type = get_type (expr); - expr = new_expr (); - expr->type = ex_integer; - expr->e.integer_val = type_size (type); + expr = new_integer_expr (type_size (type)); return expr; } diff --git a/tools/qfcc/source/method.c b/tools/qfcc/source/method.c index 70c3578dd..7ee87e3d0 100644 --- a/tools/qfcc/source/method.c +++ b/tools/qfcc/source/method.c @@ -183,13 +183,9 @@ copy_keywordargs (const keywordarg_t *kwargs) expr_t * send_message (int super) { - expr_t *e; - - e = new_expr (); - e->type = ex_def; - e->e.def = get_def (&type_IMP, super ? "obj_msgSend_super" : "obj_msgSend", - pr.scope, st_extern); - return e; + return new_def_expr (get_def (&type_IMP, + super ? "obj_msgSend_super" : "obj_msgSend", + pr.scope, st_extern)); } void diff --git a/tools/qfcc/source/qc-parse.y b/tools/qfcc/source/qc-parse.y index 8c13c07e4..e5d137756 100644 --- a/tools/qfcc/source/qc-parse.y +++ b/tools/qfcc/source/qc-parse.y @@ -832,54 +832,19 @@ arg_list ; const - : FLOAT_VAL - { - $$ = new_expr (); - $$->type = ex_float; - $$->e.float_val = $1; - } - | string_val - { - $$ = $1; - } - | VECTOR_VAL - { - $$ = new_expr (); - $$->type = ex_vector; - memcpy ($$->e.vector_val, $1, sizeof ($$->e.vector_val)); - } - | QUATERNION_VAL - { - $$ = new_expr (); - $$->type = ex_quaternion; - memcpy ($$->e.quaternion_val, $1, sizeof ($$->e.quaternion_val)); - } - | INT_VAL - { - $$ = new_expr (); - $$->type = ex_integer; - $$->e.integer_val = $1; - } - | NIL - { - $$ = new_expr (); - $$->type = ex_nil; - } + : FLOAT_VAL { $$ = new_float_expr ($1); } + | string_val { $$ = $1; } + | VECTOR_VAL { $$ = new_vector_expr ($1); } + | QUATERNION_VAL { $$ = new_quaternion_expr ($1); } + | INT_VAL { $$ = new_integer_expr ($1); } + | NIL { $$ = new_nil_expr (); } ; string_val - : STRING_VAL - { - $$ = new_expr (); - $$->type = ex_string; - $$->e.string_val = $1; - } + : STRING_VAL { $$ = new_string_expr ($1); } | string_val STRING_VAL { - expr_t *e = new_expr (); - e->type = ex_string; - e->e.string_val = $2; - $$ = binary_expr ('+', $1, e); + $$ = binary_expr ('+', $1, new_string_expr ($2)); } ; @@ -1277,12 +1242,12 @@ obj_messageexpr receiver : expr - | CLASS_NAME { $$ = new_name_expr ($1); } - | SUPER { $$ = new_name_expr ("super"); } + | CLASS_NAME { $$ = new_name_expr ($1); } + | SUPER { $$ = new_name_expr ("super"); } ; messageargs - : selector { $$ = new_keywordarg ($1, 0); } + : selector { $$ = new_keywordarg ($1, 0); } | keywordarglist ; @@ -1296,12 +1261,12 @@ keywordarglist ; keywordarg - : selector ':' arg_list { $$ = new_keywordarg ($1, $3); } - | ':' arg_list { $$ = new_keywordarg ("", $2); } + : selector ':' arg_list { $$ = new_keywordarg ($1, $3); } + | ':' arg_list { $$ = new_keywordarg ("", $2); } ; selectorarg - : selector { $$ = new_keywordarg ($1, 0); } + : selector { $$ = new_keywordarg ($1, 0); } | keywordnamelist ; @@ -1315,23 +1280,15 @@ keywordnamelist ; keywordname - : selector ':' { $$ = new_keywordarg ($1, 0); } - | ':' { $$ = new_keywordarg ("", 0); } + : selector ':' { $$ = new_keywordarg ($1, 0); } + | ':' { $$ = new_keywordarg ("", 0); } ; obj_string - : '@' STRING_VAL - { - $$ = new_expr (); - $$->type = ex_string; - $$->e.string_val = $2; - } + : '@' STRING_VAL { $$ = new_string_expr ($2); } | obj_string '@' STRING_VAL { - expr_t *e = new_expr (); - e->type = ex_string; - e->e.string_val = $3; - $$ = binary_expr ('+', $1, e); + $$ = binary_expr ('+', $1, new_string_expr ($3)); } ;