From ca93e6f3cb78f65f8eb8aac0d6fae81be2c250e8 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Fri, 27 Sep 2024 14:56:24 -0400 Subject: Simplify code by making `name := use ...` a Use AST instead of a Declare --- typecheck.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'typecheck.c') diff --git a/typecheck.c b/typecheck.c index f993604b..fd0b9d63 100644 --- a/typecheck.c +++ b/typecheck.c @@ -255,11 +255,7 @@ void bind_statement(env_t *env, ast_t *statement) return; if (get_binding(env, name)) code_err(decl->var, "A %T called '%s' has already been defined", get_binding(env, name)->type, name); - if (decl->value->tag == Use) { - (void)load_module(env, decl->value); - } else { - bind_statement(env, decl->value); - } + bind_statement(env, decl->value); type_t *type = get_type(env, decl->value); if (!type) code_err(decl->value, "I couldn't figure out the type of this value"); @@ -394,9 +390,15 @@ void bind_statement(env_t *env, ast_t *statement) if (Table$str_get(*env->types, entry->name)) continue; -//code_err(statement, "This module imports a type called '%s', which would clobber another type", entry->name); Table$str_set(env->types, entry->name, entry->type); } + + ast_t *var = Match(statement, Use)->var; + if (var) { + type_t *type = get_type(env, statement); + assert(type); + set_binding(env, Match(var, Var)->name, new(binding_t, .type=type)); + } break; } case Extern: { -- cgit v1.2.3