Fixed value return from call

This commit is contained in:
Rafał Grodziński
2025-06-19 11:07:54 +09:00
parent 297c1da1e6
commit d800059115

View File

@@ -52,10 +52,7 @@ void ModuleBuilder::buildFunctionDeclaration(shared_ptr<StatementFunctionDeclara
// build function declaration // build function declaration
llvm::FunctionType *funType = llvm::FunctionType::get(typeForValueType(statement->getReturnValueType()), types, false); llvm::FunctionType *funType = llvm::FunctionType::get(typeForValueType(statement->getReturnValueType()), types, false);
llvm::Function *fun = llvm::Function::Create(funType, llvm::GlobalValue::InternalLinkage, statement->getName(), module.get()); llvm::Function *fun = llvm::Function::Create(funType, llvm::GlobalValue::InternalLinkage, statement->getName(), module.get());
<<<<<<< HEAD
funMap[statement->getName()] = fun; funMap[statement->getName()] = fun;
=======
>>>>>>> c6ace32 (Pass arguments into function)
// define function body // define function body
llvm::BasicBlock *block = llvm::BasicBlock::Create(*context, statement->getName(), fun); llvm::BasicBlock *block = llvm::BasicBlock::Create(*context, statement->getName(), fun);
@@ -157,11 +154,7 @@ llvm::Value *ModuleBuilder::valueForBinary(shared_ptr<ExpressionBinary> expressi
return valueForBinaryReal(expression->getOperation(), leftValue, rightValue); return valueForBinaryReal(expression->getOperation(), leftValue, rightValue);
} }
<<<<<<< HEAD
failed("Unexpected operation"); failed("Unexpected operation");
=======
exit(1);
>>>>>>> c6ace32 (Pass arguments into function)
} }
llvm::Value *ModuleBuilder::valueForBinaryBool(ExpressionBinary::Operation operation, llvm::Value *leftValue, llvm::Value *rightValue) { llvm::Value *ModuleBuilder::valueForBinaryBool(ExpressionBinary::Operation operation, llvm::Value *leftValue, llvm::Value *rightValue) {
@@ -290,7 +283,7 @@ llvm::Value *ModuleBuilder::valueForCall(shared_ptr<ExpressionCall> expression)
llvm::Value *argValue = valueForExpression(argumentExpression); llvm::Value *argValue = valueForExpression(argumentExpression);
argValues.push_back(argValue); argValues.push_back(argValue);
} }
builder->CreateCall(funType, fun, llvm::ArrayRef(argValues)); return builder->CreateCall(funType, fun, llvm::ArrayRef(argValues));
} }
llvm::Type *ModuleBuilder::typeForValueType(ValueType valueType) { llvm::Type *ModuleBuilder::typeForValueType(ValueType valueType) {