diff --git a/tools/qfcc/include/expr.h b/tools/qfcc/include/expr.h index 5671ac357..ad8f96864 100644 --- a/tools/qfcc/include/expr.h +++ b/tools/qfcc/include/expr.h @@ -136,11 +136,11 @@ typedef struct ex_func_s { typedef struct { int size; struct expr_s *e[1]; -} ex_list_t; +} ex_boollist_t; typedef struct { - ex_list_t *true_list; - ex_list_t *false_list; + ex_boollist_t *true_list; + ex_boollist_t *false_list; struct expr_s *e; } ex_bool_t; @@ -441,7 +441,8 @@ expr_t *new_label_ref (ex_label_t *label); */ expr_t *new_state_expr (expr_t *frame, expr_t *think, expr_t *step); -expr_t *new_bool_expr (ex_list_t *true_list, ex_list_t *false_list, expr_t *e); +expr_t *new_bool_expr (ex_boollist_t *true_list, ex_boollist_t *false_list, + expr_t *e); /** Create a new statement block expression node. @@ -828,7 +829,7 @@ void dump_dot_expr (void *e, const char *filename); expr_t *convert_nil (expr_t *e, struct type_s *t); expr_t *test_expr (expr_t *e); -void backpatch (ex_list_t *list, expr_t *label); +void backpatch (ex_boollist_t *list, expr_t *label); expr_t *convert_bool (expr_t *e, int block); expr_t *convert_from_bool (expr_t *e, struct type_s *type); expr_t *bool_expr (int op, expr_t *label, expr_t *e1, expr_t *e2); diff --git a/tools/qfcc/source/expr.c b/tools/qfcc/source/expr.c index a65832d7d..86886efb4 100644 --- a/tools/qfcc/source/expr.c +++ b/tools/qfcc/source/expr.c @@ -290,7 +290,7 @@ copy_expr (expr_t *e) n->file = pr.source_file; if (e->e.boolean.true_list) { int count = e->e.boolean.true_list->size; - size_t size = (size_t)&((ex_list_t *) 0)->e[count]; + size_t size = field_offset (ex_boollist_t, e[count]); n->e.boolean.true_list = malloc (size); while (count--) n->e.boolean.true_list->e[count] = @@ -298,7 +298,7 @@ copy_expr (expr_t *e) } if (e->e.boolean.false_list) { int count = e->e.boolean.false_list->size; - size_t size = (size_t)&((ex_list_t *) 0)->e[count]; + size_t size = field_offset (ex_boollist_t, e[count]); n->e.boolean.false_list = malloc (size); while (count--) n->e.boolean.false_list->e[count] = @@ -501,7 +501,7 @@ new_state_expr (expr_t *frame, expr_t *think, expr_t *step) } expr_t * -new_bool_expr (ex_list_t *true_list, ex_list_t *false_list, expr_t *e) +new_bool_expr (ex_boollist_t *true_list, ex_boollist_t *false_list, expr_t *e) { expr_t *b = new_expr (); diff --git a/tools/qfcc/source/expr_bool.c b/tools/qfcc/source/expr_bool.c index 4f8258129..6628b5493 100644 --- a/tools/qfcc/source/expr_bool.c +++ b/tools/qfcc/source/expr_bool.c @@ -164,7 +164,7 @@ test_expr (expr_t *e) } void -backpatch (ex_list_t *list, expr_t *label) +backpatch (ex_boollist_t *list, expr_t *label) { int i; expr_t *e; @@ -185,10 +185,10 @@ backpatch (ex_list_t *list, expr_t *label) } } -static ex_list_t * -merge (ex_list_t *l1, ex_list_t *l2) +static ex_boollist_t * +merge (ex_boollist_t *l1, ex_boollist_t *l2) { - ex_list_t *m; + ex_boollist_t *m; if (!l1 && !l2) return 0; @@ -196,19 +196,19 @@ merge (ex_list_t *l1, ex_list_t *l2) return l1; if (!l1) return l2; - m = malloc ((size_t)&((ex_list_t *)0)->e[l1->size + l2->size]); + m = malloc (field_offset (ex_boollist_t, e[l1->size + l2->size])); m->size = l1->size + l2->size; memcpy (m->e, l1->e, l1->size * sizeof (expr_t *)); memcpy (m->e + l1->size, l2->e, l2->size * sizeof (expr_t *)); return m; } -static ex_list_t * +static ex_boollist_t * make_list (expr_t *e) { - ex_list_t *m; + ex_boollist_t *m; - m = malloc ((size_t)&((ex_list_t *) 0)->e[1]); + m = malloc (field_offset (ex_boollist_t, e[1])); m->size = 1; m->e[0] = e; return m;