diff options
Diffstat (limited to 'js/step3_env.js')
| -rw-r--r-- | js/step3_env.js | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/js/step3_env.js b/js/step3_env.js index 5b6e802..41e21c1 100644 --- a/js/step3_env.js +++ b/js/step3_env.js @@ -1,5 +1,7 @@ var types = require('./types'); var reader = require('./reader'); +var printer = require('./printer'); +var Env = require('./env').Env; if (typeof module !== 'undefined') { var readline = require('./node_readline'); } @@ -11,15 +13,15 @@ function READ(str) { // eval function eval_ast(ast, env) { - if (types.symbol_Q(ast)) { + if (types._symbol_Q(ast)) { return env.get(ast); - } else if (types.list_Q(ast)) { + } else if (types._list_Q(ast)) { return ast.map(function(a) { return EVAL(a, env); }); - } else if (types.vector_Q(ast)) { + } else if (types._vector_Q(ast)) { var v = ast.map(function(a) { return EVAL(a, env); }); v.__isvector__ = true; return v; - } else if (types.hash_map_Q(ast)) { + } else if (types._hash_map_Q(ast)) { var new_hm = {}; for (k in ast) { new_hm[EVAL(k, env)] = EVAL(ast[k], env); @@ -31,7 +33,7 @@ function eval_ast(ast, env) { } function _EVAL(ast, env) { - if (!types.list_Q(ast)) { + if (!types._list_Q(ast)) { return eval_ast(ast, env); } @@ -42,7 +44,7 @@ function _EVAL(ast, env) { var res = EVAL(a2, env); return env.set(a1, res); case "let*": - var let_env = new types.Env(env); + var let_env = new Env(env); for (var i=0; i < a1.length; i+=2) { let_env.set(a1[i].value, EVAL(a1[i+1], let_env)); } @@ -60,11 +62,11 @@ function EVAL(ast, env) { // print function PRINT(exp) { - return types._pr_str(exp, true); + return printer._pr_str(exp, true); } // repl -var repl_env = new types.Env(); +var repl_env = new Env(); var rep = function(str) { return PRINT(EVAL(READ(str), repl_env)); }; _ref = function (k,v) { repl_env.set(k, v); } |
