diff options
| author | Joel Martin <github@martintribe.org> | 2014-04-13 15:36:02 -0500 |
|---|---|---|
| committer | Joel Martin <github@martintribe.org> | 2014-04-13 15:36:02 -0500 |
| commit | 8adb082743f12402d0817018ab1e8ff0c0e4729e (patch) | |
| tree | ba3c69589adfb799c71190ede43ab5cefceda6f6 /java/src | |
| parent | 3e8a088f48ea6030191c15457aafdd1b30387ca0 (diff) | |
| download | mal-8adb082743f12402d0817018ab1e8ff0c0e4729e.tar.gz mal-8adb082743f12402d0817018ab1e8ff0c0e4729e.zip | |
Java, JS: cleanup and sync steps.
- Java: less direct use of obj.value attribute.
Diffstat (limited to 'java/src')
| -rw-r--r-- | java/src/main/java/mal/core.java | 60 | ||||
| -rw-r--r-- | java/src/main/java/mal/step5_tco.java | 2 | ||||
| -rw-r--r-- | java/src/main/java/mal/step6_file.java | 6 | ||||
| -rw-r--r-- | java/src/main/java/mal/step7_quote.java | 6 | ||||
| -rw-r--r-- | java/src/main/java/mal/step8_macros.java | 8 | ||||
| -rw-r--r-- | java/src/main/java/mal/stepA_more.java | 2 | ||||
| -rw-r--r-- | java/src/main/java/mal/types.java | 3 |
7 files changed, 50 insertions, 37 deletions
diff --git a/java/src/main/java/mal/core.java b/java/src/main/java/mal/core.java index 3200c0e..e1e6705 100644 --- a/java/src/main/java/mal/core.java +++ b/java/src/main/java/mal/core.java @@ -162,9 +162,7 @@ public class core { } }; - // - // Hash map operations - // + // HashMap functions static MalFunction new_hash_map = new MalFunction() { public MalVal apply(MalList a) throws MalThrowable { return new MalHashMap(a); @@ -271,42 +269,22 @@ public class core { static MalFunction cons = new MalFunction() { public MalVal apply(MalList a) throws MalThrowable { - MalList lst = new MalList(); - lst.value.addAll(((MalList)a.nth(1)).value); - lst.value.add(0, a.nth(0)); - return (MalVal) lst; + List<MalVal> lst = new ArrayList<MalVal>(); + lst.add(a.nth(0)); + lst.addAll(((MalList)a.nth(1)).getList()); + return (MalVal)new MalList(lst); } }; static MalFunction concat = new MalFunction() { public MalVal apply(MalList a) throws MalThrowable { if (a.size() == 0) { return new MalList(); } - MalList lst = new MalList(); - lst.value.addAll(((MalList)a.nth(0)).value); + List<MalVal> lst = new ArrayList<MalVal>(); + lst.addAll(((MalList)a.nth(0)).value); for(Integer i=1; i<a.size(); i++) { - lst.value.addAll(((MalList)a.nth(i)).value); + lst.addAll(((MalList)a.nth(i)).value); } - return (MalVal) lst; - } - }; - - static MalFunction conj = new MalFunction() { - public MalVal apply(MalList a) throws MalThrowable { - MalList src_seq = (MalList)a.nth(0), new_seq; - if (a.nth(0) instanceof MalVector) { - new_seq = new MalVector(); - new_seq.value.addAll(src_seq.value); - for(Integer i=1; i<a.size(); i++) { - new_seq.value.add(a.nth(i)); - } - } else { - new_seq = new MalList(); - new_seq.value.addAll(src_seq.value); - for(Integer i=1; i<a.size(); i++) { - new_seq.value.add(0, a.nth(i)); - } - } - return (MalVal) new_seq; + return (MalVal)new MalList(lst); } }; @@ -331,6 +309,26 @@ public class core { } }; + static MalFunction conj = new MalFunction() { + public MalVal apply(MalList a) throws MalThrowable { + MalList src_seq = (MalList)a.nth(0), new_seq; + if (a.nth(0) instanceof MalVector) { + new_seq = new MalVector(); + new_seq.value.addAll(src_seq.value); + for(Integer i=1; i<a.size(); i++) { + new_seq.value.add(a.nth(i)); + } + } else { + new_seq = new MalList(); + new_seq.value.addAll(src_seq.value); + for(Integer i=1; i<a.size(); i++) { + new_seq.value.add(0, a.nth(i)); + } + } + return (MalVal) new_seq; + } + }; + // General list related functions static MalFunction apply = new MalFunction() { public MalVal apply(MalList a) throws MalThrowable { diff --git a/java/src/main/java/mal/step5_tco.java b/java/src/main/java/mal/step5_tco.java index 43b93c6..9cd42d5 100644 --- a/java/src/main/java/mal/step5_tco.java +++ b/java/src/main/java/mal/step5_tco.java @@ -115,7 +115,7 @@ public class step5_tco { MalVal fnast = f.getAst(); if (fnast != null) { orig_ast = fnast; - env = new Env(f.getEnv(), f.getParams(), el.slice(1)); + env = f.genEnv(el.slice(1)); } else { return f.apply(el.rest()); } diff --git a/java/src/main/java/mal/step6_file.java b/java/src/main/java/mal/step6_file.java index 0a1a99b..8d05b50 100644 --- a/java/src/main/java/mal/step6_file.java +++ b/java/src/main/java/mal/step6_file.java @@ -118,7 +118,7 @@ public class step6_file { MalVal fnast = f.getAst(); if (fnast != null) { orig_ast = fnast; - env = new Env(f.getEnv(), f.getParams(), el.slice(1)); + env = f.genEnv(el.slice(1)); } else { return f.apply(el.rest()); } @@ -157,6 +157,10 @@ public class step6_file { } _ref(repl_env, "read-string", new MalFunction() { public MalVal apply(MalList args) throws MalThrowable { + try { + return reader.read_str(((MalString)args.nth(0)).getValue()); + } catch (MalContinue c) { + return types.Nil; return reader.read_str(((MalString)args.nth(0)).getValue()); } }); diff --git a/java/src/main/java/mal/step7_quote.java b/java/src/main/java/mal/step7_quote.java index 7105671..fbebb10 100644 --- a/java/src/main/java/mal/step7_quote.java +++ b/java/src/main/java/mal/step7_quote.java @@ -149,7 +149,7 @@ public class step7_quote { MalVal fnast = f.getAst(); if (fnast != null) { orig_ast = fnast; - env = new Env(f.getEnv(), f.getParams(), el.slice(1)); + env = f.genEnv(el.slice(1)); } else { return f.apply(el.rest()); } @@ -188,6 +188,10 @@ public class step7_quote { } _ref(repl_env, "read-string", new MalFunction() { public MalVal apply(MalList args) throws MalThrowable { + try { + return reader.read_str(((MalString)args.nth(0)).getValue()); + } catch (MalContinue c) { + return types.Nil; return reader.read_str(((MalString)args.nth(0)).getValue()); } }); diff --git a/java/src/main/java/mal/step8_macros.java b/java/src/main/java/mal/step8_macros.java index c834119..bb99818 100644 --- a/java/src/main/java/mal/step8_macros.java +++ b/java/src/main/java/mal/step8_macros.java @@ -187,7 +187,7 @@ public class step8_macros { MalVal fnast = f.getAst(); if (fnast != null) { orig_ast = fnast; - env = new Env(f.getEnv(), f.getParams(), el.slice(1)); + env = f.genEnv(el.slice(1)); } else { return f.apply(el.rest()); } @@ -226,7 +226,11 @@ public class step8_macros { } _ref(repl_env, "read-string", new MalFunction() { public MalVal apply(MalList args) throws MalThrowable { - return reader.read_str(((MalString)args.nth(0)).getValue()); + try { + return reader.read_str(((MalString)args.nth(0)).getValue()); + } catch (MalContinue c) { + return types.Nil; + } } }); _ref(repl_env, "eval", new MalFunction() { diff --git a/java/src/main/java/mal/stepA_more.java b/java/src/main/java/mal/stepA_more.java index 9f4fb07..76b8501 100644 --- a/java/src/main/java/mal/stepA_more.java +++ b/java/src/main/java/mal/stepA_more.java @@ -213,7 +213,7 @@ public class stepA_more { MalVal fnast = f.getAst(); if (fnast != null) { orig_ast = fnast; - env = new Env(f.getEnv(), f.getParams(), el.slice(1)); + env = f.genEnv(el.slice(1)); } else { return f.apply(el.rest()); } diff --git a/java/src/main/java/mal/types.java b/java/src/main/java/mal/types.java index a53c0e9..7ad419a 100644 --- a/java/src/main/java/mal/types.java +++ b/java/src/main/java/mal/types.java @@ -355,6 +355,9 @@ public class types { public MalVal getAst() { return ast; } public Env getEnv() { return env; } public MalList getParams() { return params; } + public Env genEnv(MalList args) { + return new Env(env, params, args); + } public Boolean isMacro() { return macro; } public void setMacro() { macro = true; } } |
