diff options
author | David Robillard <d@drobilla.net> | 2009-03-15 02:27:15 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2009-03-15 02:27:15 +0000 |
commit | 59117fc8bcd610697a45c0013fc7450de2ee512f (patch) | |
tree | d475c5d743cc2defec2db5d34c72ae8888170d5b /tuplr.hpp | |
parent | b2c71ba7fd851af043cebde347647ff82eb828d6 (diff) | |
download | resp-59117fc8bcd610697a45c0013fc7450de2ee512f.tar.gz resp-59117fc8bcd610697a45c0013fc7450de2ee512f.tar.bz2 resp-59117fc8bcd610697a45c0013fc7450de2ee512f.zip |
Make TEnv strictly keyed by ASymbol.
Prettier casting.
git-svn-id: http://svn.drobilla.net/resp/tuplr@93 ad02d1e2-f140-0410-9f75-f8b11f17cedd
Diffstat (limited to 'tuplr.hpp')
-rw-r--r-- | tuplr.hpp | 7 |
1 files changed, 6 insertions, 1 deletions
@@ -153,6 +153,11 @@ struct AST { virtual void constrain(TEnv& tenv, Constraints& c) const {} virtual void lift(CEnv& cenv) {} string str() const { ostringstream ss; ss << this; return ss.str(); } + template<typename T> T as() { + T t = dynamic_cast<T>(this); + if (!t) throw Error("internal error: bad cast", loc); + return t; + } Cursor loc; private: friend class CEnv; @@ -448,7 +453,7 @@ struct Subst : public map<const AType*,AType*> { }; /// Type-Time Environment -struct TEnv : public Env<const AST*,AType*> { +struct TEnv : public Env<const ASymbol*,AType*> { TEnv(PEnv& p) : penv(p), varID(1) {} AType* fresh(const ASymbol* sym) { |