Mercurial > repos > tabletprog
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 } |