diff options
| author | Kimplul <kimi.h.kuparinen@gmail.com> | 2024-04-09 18:23:33 +0300 |
|---|---|---|
| committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2024-04-09 18:23:33 +0300 |
| commit | eda6bcd42128a3e555c99a68f5b31c7e85518fe5 (patch) | |
| tree | a83376bdf90b0e2f30297e5af24210af99f2b36b /src/lower.c | |
| parent | 451111dc51df69580d04c9965f70531f50e3d509 (diff) | |
| download | ek-eda6bcd42128a3e555c99a68f5b31c7e85518fe5.tar.gz ek-eda6bcd42128a3e555c99a68f5b31c7e85518fe5.zip | |
improve struct handling
Diffstat (limited to 'src/lower.c')
| -rw-r--r-- | src/lower.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/src/lower.c b/src/lower.c index bf36fae..9ad9a53 100644 --- a/src/lower.c +++ b/src/lower.c @@ -273,8 +273,10 @@ static int lower_var(struct lower_state *s, struct ast *v, { assert(v->k == AST_VAR_DEF); struct vec input = retval_create(); - if (lower_expr(s, var_init(v), &input)) + if (lower_expr(s, var_init(v), &input)) { + retval_destroy(&input); return -1; + } /* if we have a struct, we should add the member name to the base name * */ @@ -847,16 +849,13 @@ int lower(struct scope *root) if (!scope_flags(root, SCOPE_FILE)) return 0; - for (struct visible *v = root->vars; v; v = v->next) { - assert(v->node); - if (lower_global_var(v->node)) - return -1; - } - - for (struct visible *p = root->procs; p; p = p->next) { + foreach_visible(p, root->symbols) { assert(p->node); - if (lower_proc(p->node)) + struct ast *node = p->node; + if (node->k == AST_PROC_DEF && lower_proc(p->node)) return -1; + + /** @todo variables, structs, etc. */ } return 0; |
