aboutsummaryrefslogtreecommitdiff
path: root/java/src
diff options
context:
space:
mode:
authorJoel Martin <github@martintribe.org>2014-04-13 15:36:02 -0500
committerJoel Martin <github@martintribe.org>2014-04-13 15:36:02 -0500
commit8adb082743f12402d0817018ab1e8ff0c0e4729e (patch)
treeba3c69589adfb799c71190ede43ab5cefceda6f6 /java/src
parent3e8a088f48ea6030191c15457aafdd1b30387ca0 (diff)
downloadmal-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.java60
-rw-r--r--java/src/main/java/mal/step5_tco.java2
-rw-r--r--java/src/main/java/mal/step6_file.java6
-rw-r--r--java/src/main/java/mal/step7_quote.java6
-rw-r--r--java/src/main/java/mal/step8_macros.java8
-rw-r--r--java/src/main/java/mal/stepA_more.java2
-rw-r--r--java/src/main/java/mal/types.java3
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; }
}