From 6301e0b6374cecc5599665be14d6ddc6a31ce1e8 Mon Sep 17 00:00:00 2001 From: Joel Martin Date: Wed, 23 Apr 2014 21:59:50 -0500 Subject: All: TCO let* and quasiquote. --- java/src/main/java/mal/step5_tco.java | 4 +++- java/src/main/java/mal/step6_file.java | 4 +++- java/src/main/java/mal/step7_quote.java | 7 +++++-- java/src/main/java/mal/step8_macros.java | 7 +++++-- java/src/main/java/mal/stepA_more.java | 7 +++++-- 5 files changed, 21 insertions(+), 8 deletions(-) (limited to 'java/src') 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); -- cgit v1.2.3