aboutsummaryrefslogtreecommitdiffstats
path: root/tuplr.hpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2009-03-15 02:27:15 +0000
committerDavid Robillard <d@drobilla.net>2009-03-15 02:27:15 +0000
commit59117fc8bcd610697a45c0013fc7450de2ee512f (patch)
treed475c5d743cc2defec2db5d34c72ae8888170d5b /tuplr.hpp
parentb2c71ba7fd851af043cebde347647ff82eb828d6 (diff)
downloadresp-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.hpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/tuplr.hpp b/tuplr.hpp
index 130307e..506742a 100644
--- a/tuplr.hpp
+++ b/tuplr.hpp
@@ -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) {