aboutsummaryrefslogtreecommitdiff
path: root/js/step3_env.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/step3_env.js')
-rw-r--r--js/step3_env.js18
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); }