diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2025-11-23 00:57:47 -0500 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2025-11-23 00:58:30 -0500 |
| commit | eff8d4aa8c59c4f8c531eb19389041c44aa49941 (patch) | |
| tree | e8f1814d48919c7afac7cb1b04fcfe21159eccca /src/types.c | |
| parent | cb9d3b1a2c2c59c368f6121a16a9ab928b0ff951 (diff) | |
Bugfix for stack memory not getting properly detected in places
Diffstat (limited to 'src/types.c')
| -rw-r--r-- | src/types.c | 15 |
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; } } |
