aboutsummaryrefslogtreecommitdiffstats
path: root/src/llvm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/llvm.cpp')
-rw-r--r--src/llvm.cpp14
1 files changed, 4 insertions, 10 deletions
diff --git a/src/llvm.cpp b/src/llvm.cpp
index 8e3ea50..7ba3d54 100644
--- a/src/llvm.cpp
+++ b/src/llvm.cpp
@@ -128,8 +128,7 @@ struct LLVMEngine : public Engine {
}
CFunc startFunction(CEnv& cenv,
- const std::string& name, const AType* retT, const ATuple& argsT,
- const vector<string> argNames)
+ const std::string& name, const ATuple* args, const AType* retT, const ATuple& argsT)
{
Function::LinkageTypes linkage = Function::ExternalLinkage;
@@ -152,9 +151,8 @@ struct LLVMEngine : public Engine {
// Set argument names in generated code
Function::arg_iterator a = f->arg_begin();
- if (!argNames.empty())
- for (vector<string>::const_iterator i = argNames.begin(); i != argNames.end(); ++a, ++i)
- a->setName(*i);
+ for (ATuple::const_iterator i = args->begin(); i != args->end(); ++a, ++i)
+ a->setName((*i)->as<const ASymbol*>()->cppstr);
BasicBlock* bb = BasicBlock::Create(context, "entry", f);
builder.SetInsertPoint(bb);
@@ -330,13 +328,9 @@ LLVMEngine::compileFunction(CEnv& cenv, const AFn* fn, const AType* type)
const AType* argsT = type->prot()->as<const AType*>();
const AType* retT = type->last()->as<const AType*>();
- vector<string> argNames;
- for (ATuple::const_iterator i = fn->prot()->begin(); i != fn->prot()->end(); ++i)
- argNames.push_back((*i)->str());
-
// Write function declaration
const string name = (fn->name == "") ? cenv.penv.gensymstr("_fn") : fn->name;
- Function* f = llFunc(cenv.engine()->startFunction(cenv, name, retT, *argsT, argNames));
+ Function* f = llFunc(cenv.engine()->startFunction(cenv, name, fn->prot(), retT, *argsT));
cenv.push();