aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author_ov4 <ov4@ov4.org>2026-10-22 03:30:26 +0000
committer_ov4 <ov4@ov4.org>2026-10-22 03:58:26 +0000
commitf5e6f11dc057d4cef59642efbcb502e002c13977 (patch)
treee1a4f30e588554888645a5a9e526a382f5ad86c5
parent8c2a2b8f9b3f495f329b2ca3c2759e076f9554fd (diff)
refactor(codegen): narrow FunctionGen's call and type helpers
Make getLLVMType and the link-name emitCall overload private, inline the single-use GenerateCall helper into that overload, and drop the argument setName calls in createArgumentAllocas that repeat the names emitPrototype already assigned. The undefined-function diagnostic stays: a link name can be shadowed by another module global (e.g. FUNCTION stderr). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
-rw-r--r--include/cps/FunctionGen.h5
-rw-r--r--lib/CodeGen/FunctionGen.cc18
2 files changed, 6 insertions, 17 deletions
diff --git a/include/cps/FunctionGen.h b/include/cps/FunctionGen.h
index 7bf7eca..95579c4 100644
--- a/include/cps/FunctionGen.h
+++ b/include/cps/FunctionGen.h
@@ -85,6 +85,8 @@ private:
std::function<void(llvm::Value *, const std::string &, int)> RegisterCopy;
void createArgumentAllocas(llvm::Function *F, const std::vector<ParamDecl> &Params, bool IsMethod);
+ llvm::Type *getLLVMType(const std::string &TypeName);
+ llvm::Value *emitCall(const std::string &Callee, const std::vector<llvm::Value*> &Args);
public:
FunctionGen(llvm::LLVMContext &C,
@@ -96,8 +98,6 @@ public:
bool &HadErrorFlag, int &Line)
: Context(C), Module(M), Builder(B), Types(TS), Exceptions(EH), Symbols(Sym), HadError(HadErrorFlag), DiagnosticLine(Line) {}
- llvm::Type *getLLVMType(const std::string &TypeName);
-
void setArrayParamBinder(ArrayParamBinder Binder) { BindArrayParam = std::move(Binder); }
void setCopyRegistrar(std::function<void(llvm::Value *, const std::string &, int)> Registrar) {
@@ -117,7 +117,6 @@ public:
llvm::Function *emitFunctionDef(FunctionDefAST *FuncAST, const std::function<void(StmtAST*)> &StmtEmitter, unsigned ScopeID);
- llvm::Value *emitCall(const std::string &Callee, const std::vector<llvm::Value*> &Args);
llvm::Value *emitCall(const FuncSig &Sig, const std::vector<llvm::Value*> &Args);
void emitReturn(llvm::Value *RetVal);
diff --git a/lib/CodeGen/FunctionGen.cc b/lib/CodeGen/FunctionGen.cc
index 9c9d0f5..4a084d7 100644
--- a/lib/CodeGen/FunctionGen.cc
+++ b/lib/CodeGen/FunctionGen.cc
@@ -57,7 +57,6 @@ void FunctionGen::createArgumentAllocas(Function *F, const std::vector<ParamDecl
}
Value *ArgVal = &(*AI);
++AI;
- ArgVal->setName(P.Name);
if (P.IsArray) {
// Data pointer + kBoundArgsPerDim bounds per dimension; binding
@@ -66,10 +65,8 @@ void FunctionGen::createArgumentAllocas(Function *F, const std::vector<ParamDecl
for (int D = 1; D <= P.Rank; ++D) {
Value *LB = &(*AI);
++AI;
- LB->setName(P.Name + kLowerBoundSuffix + std::to_string(D));
Value *UB = &(*AI);
++AI;
- UB->setName(P.Name + kUpperBoundSuffix + std::to_string(D));
LBs.push_back(LB);
UBs.push_back(UB);
}
@@ -438,14 +435,11 @@ Function *FunctionGen::emitFunctionDef(FunctionDefAST *FuncAST,
return TheFunction;
}
-static Value *GenerateCall(llvm::Module &Module,
- ExceptionHandler &Exceptions,
- const std::string &CalleeName,
- const std::vector<llvm::Value*> &Args,
- bool &HadError, int DiagnosticLine) {
- Function *CalleeF = Module.getFunction(CalleeName);
+llvm::Value *FunctionGen::emitCall(const std::string &Callee, const std::vector<llvm::Value*> &Args) {
+ // A link name can be taken by another module global (e.g. FUNCTION stderr).
+ Function *CalleeF = Module.getFunction(Callee);
if (!CalleeF) {
- sourceError(DiagnosticLine, "Call to undefined function %s", CalleeName.c_str());
+ sourceError(DiagnosticLine, "Call to undefined function %s", Callee.c_str());
HadError = true;
return nullptr;
}
@@ -457,10 +451,6 @@ static Value *GenerateCall(llvm::Module &Module,
return Exceptions.emitCall(CalleeF, Args, "calltmp");
}
-llvm::Value *FunctionGen::emitCall(const std::string &Callee, const std::vector<llvm::Value*> &Args) {
- return GenerateCall(Module, Exceptions, Callee, Args, HadError, DiagnosticLine);
-}
-
llvm::Value *FunctionGen::emitCall(const FuncSig &Sig, const std::vector<llvm::Value*> &Args) {
if (BeforeCall) BeforeCall(Sig);
if (!Sig.IsExternal) return emitCall(Sig.LinkName, Args);