diff options
author | David Robillard <d@drobilla.net> | 2009-10-07 00:04:50 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2009-10-07 00:04:50 +0000 |
commit | 695b447ead5de61d067bda4dcf438fd014a91ca2 (patch) | |
tree | 5e4ccb9c7ebf94a36edf0da3d77d81e1e69c245a | |
parent | eb55f600575a855756d246f07a93381722de7bf4 (diff) | |
download | resp-695b447ead5de61d067bda4dcf438fd014a91ca2.tar.gz resp-695b447ead5de61d067bda4dcf438fd014a91ca2.tar.bz2 resp-695b447ead5de61d067bda4dcf438fd014a91ca2.zip |
Remove double lookup.
git-svn-id: http://svn.drobilla.net/resp/tuplr@203 ad02d1e2-f140-0410-9f75-f8b11f17cedd
-rw-r--r-- | src/constrain.cpp | 5 | ||||
-rw-r--r-- | src/tuplr.hpp | 3 |
2 files changed, 3 insertions, 5 deletions
diff --git a/src/constrain.cpp b/src/constrain.cpp index bdabc52..6f68b4c 100644 --- a/src/constrain.cpp +++ b/src/constrain.cpp @@ -149,14 +149,13 @@ AFn::constrain(TEnv& tenv, Constraints& c) const at(i)->constrain(tenv, cp); AType* bodyT = tenv.var(at(e-1)); - Subst tsubst = unify(cp); + subst = unify(cp); genericType = tup<AType>(loc, tenv.penv.sym("Fn"), - tsubst.apply(protT), tsubst.apply(bodyT), 0); + subst.apply(protT), subst.apply(bodyT), 0); tenv.genericTypes.insert(make_pair(this, genericType)); Object::pool.addRoot(genericType); tenv.pop(); - subst = tsubst; } AType* t = new AType(*genericType); // FIXME: deep copy diff --git a/src/tuplr.hpp b/src/tuplr.hpp index 541e24b..a76f039 100644 --- a/src/tuplr.hpp +++ b/src/tuplr.hpp @@ -571,7 +571,6 @@ inline ostream& operator<<(ostream& out, const Constraints& c) { struct TEnv : public Env< const ASymbol*, pair<AST*, AType*> > { TEnv(PEnv& p) : penv(p), varID(1) {} AType* fresh(const ASymbol* sym) { - assert(sym); AType* ret = new AType(sym->loc, varID++); def(sym, make_pair((AST*)NULL, ret)); return ret; @@ -579,7 +578,7 @@ struct TEnv : public Env< const ASymbol*, pair<AST*, AType*> > { AType* var(const AST* ast=0) { const ASymbol* sym = ast->to<const ASymbol*>(); if (sym) - return deref(lookup(sym)).second; + return ref(sym)->second; Vars::iterator v = vars.find(ast); if (v != vars.end()) |