aboutsummaryrefslogtreecommitdiff
path: root/java/src
diff options
context:
space:
mode:
authorJoel Martin <github@martintribe.org>2014-04-23 21:59:50 -0500
committerJoel Martin <github@martintribe.org>2014-04-23 21:59:50 -0500
commit6301e0b6374cecc5599665be14d6ddc6a31ce1e8 (patch)
treedbf1dc2ff6c682fd87c72a7907e7f6e59c8d4c03 /java/src
parent89bd4de1e2704c1bc562788b2c5e4fc08b71a538 (diff)
downloadmal-6301e0b6374cecc5599665be14d6ddc6a31ce1e8.tar.gz
mal-6301e0b6374cecc5599665be14d6ddc6a31ce1e8.zip
All: TCO let* and quasiquote.
Diffstat (limited to 'java/src')
-rw-r--r--java/src/main/java/mal/step5_tco.java4
-rw-r--r--java/src/main/java/mal/step6_file.java4
-rw-r--r--java/src/main/java/mal/step7_quote.java7
-rw-r--r--java/src/main/java/mal/step8_macros.java7
-rw-r--r--java/src/main/java/mal/stepA_more.java7
5 files changed, 21 insertions, 8 deletions
diff --git a/java/src/main/java/mal/step5_tco.java b/java/src/main/java/mal/step5_tco.java
index dd1dc89..aa3f7a7 100644
--- a/java/src/main/java/mal/step5_tco.java
+++ b/java/src/main/java/mal/step5_tco.java
@@ -80,7 +80,9 @@ public class step5_tco {
val = ((MalList)a1).nth(i+1);
let_env.set(key.getName(), EVAL(val, let_env));
}
- return EVAL(a2, let_env);
+ orig_ast = a2;
+ env = let_env;
+ break;
case "do":
eval_ast(ast.slice(1, ast.size()-1), env);
orig_ast = ast.nth(ast.size()-1);
diff --git a/java/src/main/java/mal/step6_file.java b/java/src/main/java/mal/step6_file.java
index 4bf0f0e..d3f4914 100644
--- a/java/src/main/java/mal/step6_file.java
+++ b/java/src/main/java/mal/step6_file.java
@@ -80,7 +80,9 @@ public class step6_file {
val = ((MalList)a1).nth(i+1);
let_env.set(key.getName(), EVAL(val, let_env));
}
- return EVAL(a2, let_env);
+ orig_ast = a2;
+ env = let_env;
+ break;
case "do":
eval_ast(ast.slice(1, ast.size()-1), env);
orig_ast = ast.nth(ast.size()-1);
diff --git a/java/src/main/java/mal/step7_quote.java b/java/src/main/java/mal/step7_quote.java
index da0781b..639f8b9 100644
--- a/java/src/main/java/mal/step7_quote.java
+++ b/java/src/main/java/mal/step7_quote.java
@@ -107,11 +107,14 @@ public class step7_quote {
val = ((MalList)a1).nth(i+1);
let_env.set(key.getName(), EVAL(val, let_env));
}
- return EVAL(a2, let_env);
+ orig_ast = a2;
+ env = let_env;
+ break;
case "quote":
return ast.nth(1);
case "quasiquote":
- return EVAL(quasiquote(ast.nth(1)), env);
+ orig_ast = quasiquote(ast.nth(1));
+ break;
case "do":
eval_ast(ast.slice(1, ast.size()-1), env);
orig_ast = ast.nth(ast.size()-1);
diff --git a/java/src/main/java/mal/step8_macros.java b/java/src/main/java/mal/step8_macros.java
index c4cb1de..fb3ffdc 100644
--- a/java/src/main/java/mal/step8_macros.java
+++ b/java/src/main/java/mal/step8_macros.java
@@ -135,11 +135,14 @@ public class step8_macros {
val = ((MalList)a1).nth(i+1);
let_env.set(key.getName(), EVAL(val, let_env));
}
- return EVAL(a2, let_env);
+ orig_ast = a2;
+ env = let_env;
+ break;
case "quote":
return ast.nth(1);
case "quasiquote":
- return EVAL(quasiquote(ast.nth(1)), env);
+ orig_ast = quasiquote(ast.nth(1));
+ break;
case "defmacro!":
a1 = ast.nth(1);
a2 = ast.nth(2);
diff --git a/java/src/main/java/mal/stepA_more.java b/java/src/main/java/mal/stepA_more.java
index 20dee3f..75ec301 100644
--- a/java/src/main/java/mal/stepA_more.java
+++ b/java/src/main/java/mal/stepA_more.java
@@ -137,11 +137,14 @@ public class stepA_more {
val = ((MalList)a1).nth(i+1);
let_env.set(key.getName(), EVAL(val, let_env));
}
- return EVAL(a2, let_env);
+ orig_ast = a2;
+ env = let_env;
+ break;
case "quote":
return ast.nth(1);
case "quasiquote":
- return EVAL(quasiquote(ast.nth(1)), env);
+ orig_ast = quasiquote(ast.nth(1));
+ break;
case "defmacro!":
a1 = ast.nth(1);
a2 = ast.nth(2);