diff --git a/src/codegen/types/interface-struct-generator.ts b/src/codegen/types/interface-struct-generator.ts index d7b6949f..f1f83c67 100644 --- a/src/codegen/types/interface-struct-generator.ts +++ b/src/codegen/types/interface-struct-generator.ts @@ -159,7 +159,7 @@ export class InterfaceStructGenerator { private tsTypeToLlvmForField(fieldName: string, tsType: string): string { if (tsType === null || tsType === undefined || tsType === "") { - return "i8*"; + throw new Error(`tsTypeToLlvmForField: empty type for field '${fieldName}'`); } if (this.interfaceStructs.has(tsType)) { return "i8*"; @@ -171,7 +171,7 @@ export class InterfaceStructGenerator { private tsTypeToLlvm(tsType: string): string { if (tsType === null || tsType === undefined || tsType === "") { - return "i8*"; + throw new Error("tsTypeToLlvm: empty type"); } if (this.interfaceStructs.has(tsType)) { return "i8*"; diff --git a/src/codegen/types/objects/class.ts b/src/codegen/types/objects/class.ts index 66c5bf10..9477c011 100644 --- a/src/codegen/types/objects/class.ts +++ b/src/codegen/types/objects/class.ts @@ -128,6 +128,15 @@ export class ClassGenerator { if (this.isEnumType(ts)) { return "double"; } + if (ts === "string" || ts === "void" || ts === "any" || ts === "unknown" || ts === "object") + return "i8*"; + if (ts === "null" || ts === "undefined" || ts === "never") return "i8*"; + if (ts.indexOf(" | ") !== -1) return "i8*"; + if (ts.startsWith("{")) return "i8*"; + if (ts.startsWith('"')) return "i8*"; + if (ts.indexOf("=>") !== -1 || ts.startsWith("(")) return "i8*"; + if (ts === "i8*" || ts === "i1") return ts; + if (ts.startsWith("%")) return ts; return "i8*"; } if (ft === "double") return "double"; @@ -170,6 +179,15 @@ export class ClassGenerator { if (this.isEnumType(ts)) { return "double"; } + if (ts === "string" || ts === "void" || ts === "any" || ts === "unknown" || ts === "object") + return "i8*"; + if (ts === "null" || ts === "undefined" || ts === "never") return "i8*"; + if (ts.indexOf(" | ") !== -1) return "i8*"; + if (ts.startsWith("{")) return "i8*"; + if (ts.startsWith('"')) return "i8*"; + if (ts.indexOf("=>") !== -1 || ts.startsWith("(")) return "i8*"; + if (ts === "i8*" || ts === "i1") return ts; + if (ts.startsWith("%")) return ts; return "i8*"; } }