aboutsummaryrefslogtreecommitdiff
path: root/src/types.c
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2025-11-23 00:57:47 -0500
committerBruce Hill <bruce@bruce-hill.com>2025-11-23 00:58:30 -0500
commiteff8d4aa8c59c4f8c531eb19389041c44aa49941 (patch)
treee8f1814d48919c7afac7cb1b04fcfe21159eccca /src/types.c
parentcb9d3b1a2c2c59c368f6121a16a9ab928b0ff951 (diff)
Bugfix for stack memory not getting properly detected in places
Diffstat (limited to 'src/types.c')
-rw-r--r--src/types.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/types.c b/src/types.c
index 33c5e55b..73c02807 100644
--- a/src/types.c
+++ b/src/types.c
@@ -249,6 +249,21 @@ PUREFUNC bool has_stack_memory(type_t *t) {
switch (t->tag) {
case PointerType: return Match(t, PointerType)->is_stack;
case OptionalType: return has_stack_memory(Match(t, OptionalType)->type);
+ case ListType: return has_stack_memory(Match(t, ListType)->item_type);
+ case TableType:
+ return has_stack_memory(Match(t, TableType)->key_type) || has_stack_memory(Match(t, TableType)->value_type);
+ case StructType: {
+ for (arg_t *field = Match(t, StructType)->fields; field; field = field->next) {
+ if (has_stack_memory(field->type)) return true;
+ }
+ return false;
+ }
+ case EnumType: {
+ for (tag_t *tag = Match(t, EnumType)->tags; tag; tag = tag->next) {
+ if (tag->type && has_stack_memory(tag->type)) return true;
+ }
+ return false;
+ }
default: return false;
}
}