From a5c12fd6f4438fc172f28b722e54908b575c6ce1 Mon Sep 17 00:00:00 2001 From: Carson Fleming Date: Fri, 17 Jul 2026 00:38:51 -0400 Subject: before I do something crazy --- scope.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'scope.c') diff --git a/scope.c b/scope.c index a0d4477..2bb686a 100644 --- a/scope.c +++ b/scope.c @@ -11,7 +11,7 @@ static void scope_init(struct scope* scope) { scope->var_cap = DEFAULT_SIZE; } -static void scope_destroy(struct scope* scope) { +void scope_destroy(struct scope* scope) { for (unsigned long long i = 0; i < scope->type_cap; i++) { if (scope->types[i] != NULL) free(scope->types[i]); } @@ -113,44 +113,57 @@ void scope_push(struct scope** p_scope) { } void scope_pop(struct scope** p_scope) { - struct scope* discarded_scope = *p_scope; *p_scope = (*p_scope)->next_out; - scope_destroy(discarded_scope); - free(discarded_scope); } void scope_install_default_types(struct scope* scope) { scope_define_type(scope, (struct type_def) { .name = "void", .sz = 0, + .is_primitive = true, + .is_signed = false, }); scope_define_type(scope, (struct type_def) { .name = "bool", .sz = 1, + .is_primitive = true, + .is_signed = false, }); scope_define_type(scope, (struct type_def) { .name = "char", .sz = 1, + .is_primitive = true, + .is_signed = true, /* implementation defined babyyyyyy */ }); scope_define_type(scope, (struct type_def) { .name = "short", .sz = 2, + .is_primitive = true, + .is_signed = true, }); scope_define_type(scope, (struct type_def) { .name = "int", .sz = 4, + .is_primitive = true, + .is_signed = true, }); scope_define_type(scope, (struct type_def) { .name = "float", .sz = 4, + .is_primitive = true, + .is_signed = true, /* floats can't be unsigned but wtv */ }); scope_define_type(scope, (struct type_def) { .name = "long", .sz = 8, + .is_primitive = true, + .is_signed = true, }); scope_define_type(scope, (struct type_def) { .name = "double", .sz = 8, + .is_primitive = true, + .is_signed = true, /* doubles also can't be unsigned */ }); } -- cgit v1.2.3