aboutsummaryrefslogtreecommitdiff
path: root/java/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'java/src/main')
-rw-r--r--java/src/main/java/mal/types.java19
1 files changed, 14 insertions, 5 deletions
diff --git a/java/src/main/java/mal/types.java b/java/src/main/java/mal/types.java
index 1e9bb34..8a4910b 100644
--- a/java/src/main/java/mal/types.java
+++ b/java/src/main/java/mal/types.java
@@ -716,12 +716,21 @@ public class types {
static MalFunction conj = new MalFunction() {
public MalVal apply(MalList a) throws MalThrowable {
- MalList lst = new MalList();
- lst.value.addAll(((MalList)a.nth(0)).value);
- for(Integer i=1; i<a.size(); i++) {
- lst.value.add(a.nth(i));
+ 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) lst;
+ return (MalVal) new_seq;
}
};