diff options
author | David Robillard <d@drobilla.net> | 2009-03-15 17:40:52 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2009-03-15 17:40:52 +0000 |
commit | 26890bcd5b910603f1955ba125b1602fbc2bfa9d (patch) | |
tree | 9f5d101a34e53cdd3fbc9ccbda46775d0ceeb050 | |
parent | 305b93cf83fc513af85cf459fc9fa240d00c0e1b (diff) | |
download | resp-26890bcd5b910603f1955ba125b1602fbc2bfa9d.tar.gz resp-26890bcd5b910603f1955ba125b1602fbc2bfa9d.tar.bz2 resp-26890bcd5b910603f1955ba125b1602fbc2bfa9d.zip |
Fix REPL variable addressing.
git-svn-id: http://svn.drobilla.net/resp/tuplr@107 ad02d1e2-f140-0410-9f75-f8b11f17cedd
-rw-r--r-- | llvm.cpp | 8 | ||||
-rw-r--r-- | tuplr.hpp | 2 | ||||
-rw-r--r-- | typing.cpp | 2 |
3 files changed, 6 insertions, 6 deletions
@@ -325,7 +325,7 @@ ACall::compile(CEnv& cenv) void ADefinition::lift(CEnv& cenv) { - // Define first for recursion + // Define stub first for recursion cenv.def(at(1)->as<ASymbol*>(), at(2), cenv.type(at(2)), NULL); AClosure* c = at(2)->to<AClosure*>(); if (c) @@ -336,9 +336,11 @@ ADefinition::lift(CEnv& cenv) CValue ADefinition::compile(CEnv& cenv) { - // Define first for recursion + // Define stub first for recursion cenv.def(at(1)->as<ASymbol*>(), at(2), cenv.type(at(2)), NULL); - return cenv.compile(at(2)); + CValue val = cenv.compile(at(2)); + cenv.vals.def(at(1)->as<ASymbol*>(), val); + return val; } CValue @@ -483,7 +483,7 @@ struct TEnv : public Env< const ASymbol*, pair<AST*, AType*> > { } AST* resolve(AST* ast) { ASymbol* sym = ast->to<ASymbol*>(); - return sym ? ref(sym)->first : ast; + return (sym && sym->addr) ? ref(sym)->first : ast; } static Subst unify(const Constraints& c); @@ -156,8 +156,6 @@ ADefinition::constrain(TEnv& tenv, Constraints& c) const const ASymbol* sym = at(1)->to<const ASymbol*>(); if (!sym) throw Error("`def' name is not a symbol", loc); - if (tenv.lookup(sym)) - throw Error(string("`") + at(1)->str() + "' redefined", loc); AType* tvar = tenv.var(at(2)); tenv.def(sym, make_pair(at(2), tvar)); at(2)->constrain(tenv, c); |