diff options
Diffstat (limited to 'src/actualize.c')
| -rw-r--r-- | src/actualize.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/src/actualize.c b/src/actualize.c index 7bb4e55..0c9d09e 100644 --- a/src/actualize.c +++ b/src/actualize.c @@ -2167,6 +2167,7 @@ static int actualize_dot(struct act_state *state, id); if (exists) { assert(exists->t); + exists->uses++; set_type(node, exists->t); return 0; } @@ -2234,18 +2235,15 @@ static int actualize_init(struct act_state *state, struct init_helper arg = vect_at(struct init_helper, init_args, ai); - struct init_helper mem = {0}; - foreach_vec(mi, struct_members) { - mem = vect_at(struct init_helper, struct_members, mi); - if (same_id(mem.id, arg.id)) - goto ok; - } + struct init_helper mem = vect_at(struct init_helper, struct_members, + ai); - semantic_error(scope->fctx, arg.n, "unknown argument %s", - arg.id); - goto err; + /* not the best error message but works for now */ + if (!same_id(arg.id, mem.id)) { + semantic_error(scope->fctx, node, "malformed init"); + goto err; + } -ok: if (!types_match(arg.n->t, mem.n->t)) { type_mismatch(scope, "init type mismatch", arg.n, arg.n->t, mem.n->t); @@ -2344,6 +2342,7 @@ static int actualize_fetch(struct act_state *state, struct scope *scope, return -1; } + member->uses++; set_type(fetch, member->t); return 0; } |
