From 058a028aef6f056a31d1e9a09fa83d498c553b78 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Wed, 19 Feb 2025 18:50:50 -0500 Subject: Switch to langs using constructors --- typecheck.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'typecheck.c') diff --git a/typecheck.c b/typecheck.c index 7e63396f..cbdbc8cd 100644 --- a/typecheck.c +++ b/typecheck.c @@ -298,9 +298,16 @@ void bind_statement(env_t *env, ast_t *statement) case FunctionDef: { auto def = Match(statement, FunctionDef); const char *name = Match(def->name, Var)->name; + type_t *type = get_function_def_type(env, statement); + if (env->namespace && env->namespace->parent && env->namespace->name && streq(name, env->namespace->name)) { + CORD code = CORD_asprintf("%r%ld", namespace_prefix(env, env->namespace), get_line_number(statement->file, statement->start)); + binding_t binding = {.type=type, .code=code}; + Array$insert(&env->namespace->constructors, &binding, I(0), sizeof(binding)); + break; + } + if (get_binding(env, name)) code_err(def->name, "A %T called '%s' has already been defined", get_binding(env, name)->type, name); - type_t *type = get_function_def_type(env, statement); CORD code = CORD_all(namespace_prefix(env, env->namespace), name); set_binding(env, name, type, code); break; -- cgit v1.2.3