From f28682d6d67ad10f035083bce52724487a6e0b28 Mon Sep 17 00:00:00 2001 From: cs01 Date: Sun, 26 Apr 2026 11:56:56 -0700 Subject: [PATCH 1/2] re-trigger ci From 2d46a7a16ed5c3f007cda388be66ebcc9db583ad Mon Sep 17 00:00:00 2001 From: cs01 Date: Sun, 26 Apr 2026 16:55:37 -0700 Subject: [PATCH 2/2] [type-system] add explicit type dispatch to getFieldLlvmType and methodReturnTypeToLlvm --- src/codegen/expressions/calls.ts | 3 +++ src/codegen/types/objects/class.ts | 10 +++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/codegen/expressions/calls.ts b/src/codegen/expressions/calls.ts index f471edbd..a023b4b0 100644 --- a/src/codegen/expressions/calls.ts +++ b/src/codegen/expressions/calls.ts @@ -1881,6 +1881,9 @@ export class CallExpressionGenerator { return `%${field.tsType}_struct*`; } } + if (field.fieldType === "i8*" || field.fieldType === "double" || field.fieldType === "i1") + return field.fieldType; + if (field.fieldType.startsWith("%")) return field.fieldType; return "i8*"; } diff --git a/src/codegen/types/objects/class.ts b/src/codegen/types/objects/class.ts index 37bbdf6c..66c5bf10 100644 --- a/src/codegen/types/objects/class.ts +++ b/src/codegen/types/objects/class.ts @@ -1488,7 +1488,15 @@ export class ClassGenerator { } } } - return "i8*"; + if (returnType === "any" || returnType === "unknown" || returnType === "object") return "i8*"; + if (returnType === "null" || returnType === "undefined" || returnType === "never") return "i8*"; + if (returnType.startsWith("{")) return "i8*"; + if (returnType.indexOf("=>") !== -1 || returnType.startsWith("(")) return "i8*"; + if (returnType === "i8*" || returnType === "double" || returnType === "i1") return returnType; + if (returnType.startsWith("%")) return returnType; + const ch = returnType.charAt(0); + if (ch === ch.toUpperCase() && ch !== ch.toLowerCase()) return "i8*"; + throw new Error(`methodReturnTypeToLlvm: unrecognized return type '${returnType}'`); } private optionalParamCounter = 0;