diff options
Diffstat (limited to 'src/llvm.cpp')
-rw-r--r-- | src/llvm.cpp | 14 |
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(); |