comparison interp.js @ 254:0ee70ac20a02

Support assigment of literals while preparing the environment for a macro
author Michael Pavone <pavone@retrodev.com>
date Sat, 31 May 2014 21:30:18 -0700
parents dc5f487247ee
children 08081b0a9382
comparison
equal deleted inserted replaced
253:697c2c562af2 254:0ee70ac20a02
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) { 743 if (this.expressions[i].expression instanceof lambda || 'val' in this.expressions[i].expression) {
744 env.syms[expr.symbol.cleanName()] = this.expressions[i].expression.eval(env); 744 env.syms[expr.symbol.cleanName()] = this.expressions[i].expression.eval(env);
745 } else { 745 } else {
746 env.syms[expr.symbol.cleanName()] = null; 746 env.syms[expr.symbol.cleanName()] = null;
747 } 747 }
748 } 748 }