Skip to content

Commit 679b122

Browse files
committed
Feature(compiler): Throw error on too dynamic return type
1 parent 37be049 commit 679b122

1 file changed

Lines changed: 15 additions & 1 deletion

File tree

src/backend/llvm/index.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -292,8 +292,22 @@ function declareFunctionFromDefinition(
292292
builder: llvm.IRBuilder,
293293
name: string
294294
): llvm.Function {
295+
let returnType = llvm.Type.getVoidTy(ctx.llvmContext);
296+
297+
if (stmt.type) {
298+
const nativeReturnType = NativeTypeResolver.getType(ctx.typeChecker.getTypeFromTypeNode(stmt.type), ctx);
299+
if (nativeReturnType) {
300+
returnType = nativeReturnType.getType();
301+
} else {
302+
throw new UnsupportedError(
303+
stmt,
304+
`Unsupported return type`
305+
);
306+
}
307+
}
308+
295309
let fnType = llvm.FunctionType.get(
296-
stmt.type ? NativeTypeResolver.getType(ctx.typeChecker.getTypeFromTypeNode(stmt.type), ctx).getType() : llvm.Type.getVoidTy(ctx.llvmContext),
310+
returnType,
297311
stmt.parameters.map((parameter) => {
298312
if (parameter.type) {
299313
const nativeType = NativeTypeResolver.getType(ctx.typeChecker.getTypeFromTypeNode(parameter.type), ctx);

0 commit comments

Comments
 (0)