From 2d8d5ffaee9701955828413f844afa1b3767f748 Mon Sep 17 00:00:00 2001 From: Kimplul Date: Sat, 11 Jan 2025 00:52:21 +0200 Subject: futher struct continuation work --- src/ast.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'src/ast.c') diff --git a/src/ast.c b/src/ast.c index 024cebf..0571c12 100644 --- a/src/ast.c +++ b/src/ast.c @@ -699,7 +699,9 @@ static size_t struct_size(struct type *t) return (size_t)t->size; size_t size = 0; - foreach_node(n, struct_body(t->d)) { + + struct ast *base = chain_base(t->d); + foreach_node(n, struct_body(base)) { if (n->k != AST_VAR_DEF) continue; @@ -734,7 +736,8 @@ size_t type_offsetof(struct type *t, char *m) assert(t->k == TYPE_STRUCT); size_t offset = 0; - foreach_node(n, struct_body(t->d)) { + struct ast *base = chain_base(t->d); + foreach_node(n, struct_body(base)) { if (n->k != AST_VAR_DEF) continue; @@ -784,3 +787,18 @@ struct ast *chain_base(struct ast *node) return node; } + +struct ast *clone_chain(struct ast *chain) +{ + if (!chain) + return NULL; + + struct ast *new = clone_ast(chain); + if (!new) + return NULL; + + if (chain->chain) + new->chain = clone_chain(chain->chain); + + return new; +} -- cgit v1.3