Mercurial > repos > tabletprog
comparison interp.js @ 238:3bfc00e4f5e5
Eval lambda assignments at macro expandion time so they can be called by macros
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 05 Jan 2014 19:27:41 -0800 |
parents | 97c3e33cd3f4 |
children | dc5f487247ee |
comparison
equal
deleted
inserted
replaced
237:dae093baf36c | 238:3bfc00e4f5e5 |
---|---|
738 if (expr.expression instanceof funcall && expr.expression.name == 'macro:') { | 738 if (expr.expression instanceof funcall && expr.expression.name == 'macro:') { |
739 env.defMacro(expr.symbol.name, exp.expression.args[0].eval(env)); | 739 env.defMacro(expr.symbol.name, exp.expression.args[0].eval(env)); |
740 } else { | 740 } else { |
741 env.syms[expr.symbol.cleanName()] = {}; | 741 env.syms[expr.symbol.cleanName()] = {}; |
742 this.expressions[i] = expr.macroexpand(env); | 742 this.expressions[i] = expr.macroexpand(env); |
743 if (this.expressions[i].expression instanceof lambda) { | |
744 env.syms[expr.symbol.cleanName()] = this.expressions[i].expression.eval(env); | |
745 } | |
743 } | 746 } |
744 } else { | 747 } else { |
745 this.expressions[i] = expr.macroexpand(env); | 748 this.expressions[i] = expr.macroexpand(env); |
746 } | 749 } |
747 } | 750 } |