From 260effd4bf77e2760a400c97cdfec6ffa7d06f3f Mon Sep 17 00:00:00 2001 From: Raphael Amorim Date: Sat, 25 Jul 2026 12:02:07 +0200 Subject: [PATCH] named-type fallback chases module aliases before giving up --- crates/jam-sema/src/codegen_context.rs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/crates/jam-sema/src/codegen_context.rs b/crates/jam-sema/src/codegen_context.rs index c473267..91e5274 100644 --- a/crates/jam-sema/src/codegen_context.rs +++ b/crates/jam-sema/src/codegen_context.rs @@ -1983,6 +1983,14 @@ impl<'ctx> CodegenContext<'ctx> { Ok(self.ctx.i8_type()) } } else { + // Alias chase: `const ParseResult = Result(u64, str);` + // binds a Named to a GenericCall (or another Named) — + // instantiate and lower the target. + let alias = self.lookup_type_alias(&self.str_name(k.a)); + if !alias.is_none() && alias != ty { + let resolved = self.resolve_generic_call_instantiate(alias)?; + return self.get_llvm_type(resolved); + } Err(format!( "unresolved Named type `{}` (subst/alias/chained resolution \ not yet ported)", @@ -2070,7 +2078,15 @@ impl<'ctx> CodegenContext<'ctx> { let padded = align_up(mps, mpa); return Ok(if padded == 0 { 2 * mpa } else { mpa + padded }); } - Err("type_size: unresolved user type (subst/alias resolution deferred)".into()) + { + // Alias chase, mirroring get_llvm_type's Named fallback. + let alias = self.lookup_type_alias(&self.str_name(k.a)); + if !alias.is_none() && alias != ty { + let resolved = self.resolve_generic_call_instantiate(alias)?; + return self.type_size(resolved); + } + } + Err(format!("type_size: unresolved user type `{}` (subst/alias resolution deferred)", self.str_name(k.a))) } TypeKind::Union => match self.union_fields(ty) { Some(fields) => self.union_size(fields), -- knotmirror 0.0.1