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 }