aboutsummaryrefslogtreecommitdiffstats
path: root/llvm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm.cpp')
-rw-r--r--llvm.cpp10
1 files changed, 4 insertions, 6 deletions
diff --git a/llvm.cpp b/llvm.cpp
index 7786bf5..4585a7c 100644
--- a/llvm.cpp
+++ b/llvm.cpp
@@ -220,7 +220,7 @@ AClosure::liftCall(CEnv& cenv, const vector<AType*>& argsT)
assert(argsT.size() == prot()->size());
ATuple* genericProtT = genericType->at(1)->as<ATuple*>();
for (size_t i = 0; i < argsT.size(); ++i)
- argsSubst[genericProtT->at(i)->to<AType*>()] = argsT.at(i)->to<AType*>();
+ argsSubst[*genericProtT->at(i)->to<AType*>()] = argsT.at(i)->to<AType*>();
thisType = argsSubst.apply(genericType)->as<AType*>();
if (!thisType->concrete())
throw Error("unable to resolve concrete type for function", loc);
@@ -310,11 +310,9 @@ ACall::compile(CEnv& cenv)
TEnv::GenericTypes::const_iterator gt = cenv.tenv.genericTypes.find(c);
assert(gt != cenv.tenv.genericTypes.end());
- const AType* polyT = gt->second;
- AType* fnT = new AType(loc, cenv.penv.sym("Fn"), protT, polyT->at(polyT->size()-1), 0);
-
- Function* f = (Function*)c->funcs.find(fnT);
- if (!f) throw Error("callee failed to compile", loc);
+ AType* fnT = new AType(loc, cenv.penv.sym("Fn"), protT, cenv.type(this), 0);
+ Function* f = (Function*)c->funcs.find(fnT);
+ if (!f) throw Error((format("callee failed to compile for type %1%") % fnT->str()).str(), loc);
vector<Value*> params(size() - 1);
for (size_t i = 1; i < size(); ++i)