aboutsummaryrefslogtreecommitdiff
path: root/typecheck.c
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2025-03-11 17:03:03 -0400
committerBruce Hill <bruce@bruce-hill.com>2025-03-11 17:03:03 -0400
commitfb2d7b5379663e929ffabfbd8428de5b35ad67c4 (patch)
treec0fdd8d373053cc907c4c18fe12156c400fb09da /typecheck.c
parent888a977132a8494a512d5f1539fc35f464da40a2 (diff)
Add extern structs
Diffstat (limited to 'typecheck.c')
-rw-r--r--typecheck.c11
1 files changed, 2 insertions, 9 deletions
diff --git a/typecheck.c b/typecheck.c
index 3f95168f..c69432de 100644
--- a/typecheck.c
+++ b/typecheck.c
@@ -232,7 +232,7 @@ void prebind_statement(env_t *env, ast_t *statement)
code_err(statement, "A %T called '%s' has already been defined", get_binding(env, def->name)->type, def->name);
env_t *ns_env = namespace_env(env, def->name);
- type_t *type = Type(StructType, .name=def->name, .opaque=true, .env=ns_env); // placeholder
+ type_t *type = Type(StructType, .name=def->name, .opaque=true, .external=def->external, .env=ns_env); // placeholder
Table$str_set(env->types, def->name, type);
set_binding(env, def->name, Type(TypeInfoType, .name=def->name, .type=type, .env=ns_env),
CORD_all(namespace_prefix(env, env->namespace), def->name, "$$info"));
@@ -355,15 +355,8 @@ void bind_statement(env_t *env, ast_t *statement)
type->__data.StructType.fields = fields; // populate placeholder
type->__data.StructType.opaque = false;
- // Default constructor:
- type_t *constructor_t = Type(FunctionType, .args=fields, .ret=type);
- Array$insert(&ns_env->namespace->constructors,
- new(binding_t, .code=CORD_all(namespace_prefix(env, env->namespace), def->name), .type=constructor_t),
- I(0), sizeof(binding_t));
-
- for (ast_list_t *stmt = def->namespace ? Match(def->namespace, Block)->statements : NULL; stmt; stmt = stmt->next) {
+ for (ast_list_t *stmt = def->namespace ? Match(def->namespace, Block)->statements : NULL; stmt; stmt = stmt->next)
bind_statement(ns_env, stmt->ast);
- }
break;
}
case EnumDef: {