aboutsummaryrefslogtreecommitdiff
path: root/src/ast.c
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2024-08-11 23:23:12 +0300
committerKimplul <kimi.h.kuparinen@gmail.com>2024-08-11 23:23:12 +0300
commitd23d03829e5baf947d347f49cc1d7807be6c070b (patch)
treef611d1105868f1d253cf15070b55793ed694861b /src/ast.c
parent3065334aec0f357c88eab144628a798db4a3e5ea (diff)
downloadek-d23d03829e5baf947d347f49cc1d7807be6c070b.tar.gz
ek-d23d03829e5baf947d347f49cc1d7807be6c070b.zip
initial generics for structs
+ Likely still very much full of bugs
Diffstat (limited to 'src/ast.c')
-rw-r--r--src/ast.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/ast.c b/src/ast.c
index d734252..890196b 100644
--- a/src/ast.c
+++ b/src/ast.c
@@ -153,9 +153,14 @@ unsigned ast_flags(struct ast *node, enum ast_flags flags)
return node->f & flags;
}
-void ast_append(struct ast *list, struct ast *elem)
+void ast_append(struct ast **list, struct ast *elem)
{
- struct ast *cur = list;
+ struct ast *cur = *list;
+ if (!cur) {
+ *list = elem;
+ return;
+ }
+
while (cur->n)
cur = cur->n;
@@ -168,9 +173,14 @@ struct ast *ast_prepend(struct ast *list, struct ast *elem)
return elem;
}
-void type_append(struct type *list, struct type *elem)
+void type_append(struct type **list, struct type *elem)
{
- struct type *cur = list;
+ struct type *cur = *list;
+ if (!cur) {
+ *list = elem;
+ return;
+ }
+
while (cur->n)
cur = cur->n;
@@ -681,7 +691,7 @@ size_t align3k(size_t o)
{
size_t rem = o % 3;
if (rem)
- o += rem;
+ o += 3 - rem;
return o;
}