diff options
Diffstat (limited to 'llvm.cpp')
-rw-r--r-- | llvm.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
@@ -308,7 +308,7 @@ maybeLookup(CEnv& cenv, AST* ast) { ASymbol* s = dynamic_cast<ASymbol*>(ast); if (s && s->addr) - return cenv.code.deref(s->addr); + return cenv.tenv.deref(s->addr).first; return ast; } @@ -371,8 +371,6 @@ ACall::compile(CEnv& cenv) void ADefinition::lift(CEnv& cenv) { - if (cenv.code.lookup(at(1)->as<ASymbol*>())) - throw Error(string("`") + at(1)->str() + "' redefined", loc); // Define first for recursion cenv.def(at(1)->as<ASymbol*>(), at(2), cenv.type(at(2)), NULL); at(2)->lift(cenv); @@ -381,6 +379,8 @@ ADefinition::lift(CEnv& cenv) CValue ADefinition::compile(CEnv& cenv) { + // Define first for recursion + cenv.def(at(1)->as<ASymbol*>(), at(2), cenv.type(at(2)), NULL); return cenv.compile(at(2)); } |