aboutsummaryrefslogtreecommitdiff
path: root/src/lower.c
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2024-04-09 18:23:33 +0300
committerKimplul <kimi.h.kuparinen@gmail.com>2024-04-09 18:23:33 +0300
commiteda6bcd42128a3e555c99a68f5b31c7e85518fe5 (patch)
treea83376bdf90b0e2f30297e5af24210af99f2b36b /src/lower.c
parent451111dc51df69580d04c9965f70531f50e3d509 (diff)
downloadek-eda6bcd42128a3e555c99a68f5b31c7e85518fe5.tar.gz
ek-eda6bcd42128a3e555c99a68f5b31c7e85518fe5.zip
improve struct handling
Diffstat (limited to 'src/lower.c')
-rw-r--r--src/lower.c17
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;