This commit is contained in:
agra
2026-02-15 12:02:36 +02:00
parent 476bf0d268
commit 2727b5509e
61 changed files with 263 additions and 102 deletions

View File

@@ -4223,8 +4223,16 @@ pub const CodeGen = struct {
fn genSizeOf(self: *CodeGen, call_node: ast.Call) !c.LLVMValueRef {
if (call_node.args.len != 1) return self.emitError("size_of expects exactly 1 argument");
const ty = self.resolveType(call_node.args[0]);
const arg = call_node.args[0];
const ty = self.resolveType(arg);
if (std.meta.eql(ty, Type.void_type)) {
// Uninstantiated generic type function → size of a function pointer
if (arg.data == .identifier or arg.data == .type_expr) {
const name = if (arg.data == .identifier) arg.data.identifier.name else arg.data.type_expr.name;
if (self.generic_templates.contains(name) or self.generic_struct_templates.contains(name)) {
return self.constInt64(self.getTypeSize(self.ptrType()));
}
}
return self.constInt64(0);
}
const llvm_ty = self.typeToLLVM(ty);