summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/jvm/clojure/lang/AFn.java4
-rw-r--r--src/jvm/clojure/lang/AFunction.java3
-rw-r--r--src/jvm/clojure/lang/APersistentMap.java3
-rw-r--r--src/jvm/clojure/lang/APersistentSet.java3
-rw-r--r--src/jvm/clojure/lang/APersistentVector.java4
-rw-r--r--src/jvm/clojure/lang/ASeq.java3
-rw-r--r--src/jvm/clojure/lang/ArrayChunk.java4
-rw-r--r--src/jvm/clojure/lang/Cons.java4
-rw-r--r--src/jvm/clojure/lang/EnumerationSeq.java7
-rw-r--r--src/jvm/clojure/lang/IteratorSeq.java6
-rw-r--r--src/jvm/clojure/lang/Namespace.java14
-rw-r--r--src/jvm/clojure/lang/Obj.java4
-rw-r--r--src/jvm/clojure/lang/PersistentArrayMap.java1
-rw-r--r--src/jvm/clojure/lang/PersistentHashMap.java3
-rw-r--r--src/jvm/clojure/lang/PersistentList.java3
-rw-r--r--src/jvm/clojure/lang/PersistentVector.java5
-rw-r--r--src/jvm/clojure/lang/RT.java14
-rw-r--r--src/jvm/clojure/lang/Range.java2
18 files changed, 64 insertions, 23 deletions
diff --git a/src/jvm/clojure/lang/AFn.java b/src/jvm/clojure/lang/AFn.java
index 075448e5..e6eafeba 100644
--- a/src/jvm/clojure/lang/AFn.java
+++ b/src/jvm/clojure/lang/AFn.java
@@ -12,9 +12,7 @@
package clojure.lang;
-import java.io.Serializable;
-
-public abstract class AFn implements IFn, Serializable{
+public abstract class AFn implements IFn {
public Object call() throws Exception{
return invoke();
diff --git a/src/jvm/clojure/lang/AFunction.java b/src/jvm/clojure/lang/AFunction.java
index baa11e1d..279bd6d7 100644
--- a/src/jvm/clojure/lang/AFunction.java
+++ b/src/jvm/clojure/lang/AFunction.java
@@ -12,9 +12,10 @@
package clojure.lang;
+import java.io.Serializable;
import java.util.Comparator;
-public abstract class AFunction extends AFn implements IObj, Comparator, Fn{
+public abstract class AFunction extends AFn implements IObj, Comparator, Fn, Serializable {
public volatile MethodImplCache __methodImplCache;
diff --git a/src/jvm/clojure/lang/APersistentMap.java b/src/jvm/clojure/lang/APersistentMap.java
index 213eef71..0fe08cae 100644
--- a/src/jvm/clojure/lang/APersistentMap.java
+++ b/src/jvm/clojure/lang/APersistentMap.java
@@ -10,9 +10,10 @@
package clojure.lang;
+import java.io.Serializable;
import java.util.*;
-public abstract class APersistentMap extends AFn implements IPersistentMap, Map, Iterable{
+public abstract class APersistentMap extends AFn implements IPersistentMap, Map, Iterable, Serializable {
int _hash = -1;
public String toString(){
diff --git a/src/jvm/clojure/lang/APersistentSet.java b/src/jvm/clojure/lang/APersistentSet.java
index 90275fcd..80415151 100644
--- a/src/jvm/clojure/lang/APersistentSet.java
+++ b/src/jvm/clojure/lang/APersistentSet.java
@@ -12,11 +12,12 @@
package clojure.lang;
+import java.io.Serializable;
import java.util.Collection;
import java.util.Iterator;
import java.util.Set;
-public abstract class APersistentSet extends AFn implements IPersistentSet, Collection, Set{
+public abstract class APersistentSet extends AFn implements IPersistentSet, Collection, Set, Serializable {
int _hash = -1;
final IPersistentMap impl;
diff --git a/src/jvm/clojure/lang/APersistentVector.java b/src/jvm/clojure/lang/APersistentVector.java
index a6b7405f..442c2ac6 100644
--- a/src/jvm/clojure/lang/APersistentVector.java
+++ b/src/jvm/clojure/lang/APersistentVector.java
@@ -12,11 +12,13 @@
package clojure.lang;
+import java.io.Serializable;
import java.util.*;
public abstract class APersistentVector extends AFn implements IPersistentVector, Iterable,
List,
- RandomAccess, Comparable{
+ RandomAccess, Comparable,
+ Serializable {
int _hash = -1;
public String toString(){
diff --git a/src/jvm/clojure/lang/ASeq.java b/src/jvm/clojure/lang/ASeq.java
index ffa7fa47..24038a32 100644
--- a/src/jvm/clojure/lang/ASeq.java
+++ b/src/jvm/clojure/lang/ASeq.java
@@ -10,9 +10,10 @@
package clojure.lang;
+import java.io.Serializable;
import java.util.*;
-public abstract class ASeq extends Obj implements ISeq, List{
+public abstract class ASeq extends Obj implements ISeq, List, Serializable {
transient int _hash = -1;
public String toString(){
diff --git a/src/jvm/clojure/lang/ArrayChunk.java b/src/jvm/clojure/lang/ArrayChunk.java
index e96b930b..88129a95 100644
--- a/src/jvm/clojure/lang/ArrayChunk.java
+++ b/src/jvm/clojure/lang/ArrayChunk.java
@@ -12,7 +12,9 @@
package clojure.lang;
-public final class ArrayChunk implements IChunk{
+import java.io.Serializable;
+
+public final class ArrayChunk implements IChunk, Serializable {
final Object[] array;
final int off;
diff --git a/src/jvm/clojure/lang/Cons.java b/src/jvm/clojure/lang/Cons.java
index ecb82a9d..83629c83 100644
--- a/src/jvm/clojure/lang/Cons.java
+++ b/src/jvm/clojure/lang/Cons.java
@@ -12,7 +12,9 @@
package clojure.lang;
-final public class Cons extends ASeq{
+import java.io.Serializable;
+
+final public class Cons extends ASeq implements Serializable {
private final Object _first;
private final ISeq _more;
diff --git a/src/jvm/clojure/lang/EnumerationSeq.java b/src/jvm/clojure/lang/EnumerationSeq.java
index 33485e40..42c733d7 100644
--- a/src/jvm/clojure/lang/EnumerationSeq.java
+++ b/src/jvm/clojure/lang/EnumerationSeq.java
@@ -12,6 +12,8 @@
package clojure.lang;
+import java.io.IOException;
+import java.io.NotSerializableException;
import java.util.Enumeration;
public class EnumerationSeq extends ASeq{
@@ -68,4 +70,9 @@ public ISeq next(){
public EnumerationSeq withMeta(IPersistentMap meta){
return new EnumerationSeq(meta, iter, state);
}
+
+private void writeObject (java.io.ObjectOutputStream out) throws IOException {
+ throw new NotSerializableException(getClass().getName());
+}
+
}
diff --git a/src/jvm/clojure/lang/IteratorSeq.java b/src/jvm/clojure/lang/IteratorSeq.java
index a510d53f..8a76cd10 100644
--- a/src/jvm/clojure/lang/IteratorSeq.java
+++ b/src/jvm/clojure/lang/IteratorSeq.java
@@ -10,6 +10,8 @@
package clojure.lang;
+import java.io.IOException;
+import java.io.NotSerializableException;
import java.util.Iterator;
public class IteratorSeq extends ASeq{
@@ -66,4 +68,8 @@ public ISeq next(){
public IteratorSeq withMeta(IPersistentMap meta){
return new IteratorSeq(meta, iter, state);
}
+
+private void writeObject (java.io.ObjectOutputStream out) throws IOException {
+ throw new NotSerializableException(getClass().getName());
+}
}
diff --git a/src/jvm/clojure/lang/Namespace.java b/src/jvm/clojure/lang/Namespace.java
index 85505d91..7849e04c 100644
--- a/src/jvm/clojure/lang/Namespace.java
+++ b/src/jvm/clojure/lang/Namespace.java
@@ -12,13 +12,15 @@
package clojure.lang;
+import java.io.ObjectStreamException;
+import java.io.Serializable;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicReference;
-public class Namespace extends AReference{
+public class Namespace extends AReference implements Serializable {
final public Symbol name;
-final AtomicReference<IPersistentMap> mappings = new AtomicReference<IPersistentMap>();
-final AtomicReference<IPersistentMap> aliases = new AtomicReference<IPersistentMap>();
+transient final AtomicReference<IPersistentMap> mappings = new AtomicReference<IPersistentMap>();
+transient final AtomicReference<IPersistentMap> aliases = new AtomicReference<IPersistentMap>();
final static ConcurrentHashMap<Symbol, Namespace> namespaces = new ConcurrentHashMap<Symbol, Namespace>();
@@ -204,4 +206,10 @@ public void removeAlias(Symbol alias) throws Exception{
map = getAliases();
}
}
+
+private Object readResolve() throws ObjectStreamException {
+ // ensures that serialized namespaces are "deserialized" to the
+ // namespace in the present runtime
+ return findOrCreate(name);
+}
}
diff --git a/src/jvm/clojure/lang/Obj.java b/src/jvm/clojure/lang/Obj.java
index 439e5760..bd7ee918 100644
--- a/src/jvm/clojure/lang/Obj.java
+++ b/src/jvm/clojure/lang/Obj.java
@@ -12,7 +12,9 @@
package clojure.lang;
-public abstract class Obj implements IObj{
+import java.io.Serializable;
+
+public abstract class Obj implements IObj, Serializable {
final IPersistentMap _meta;
diff --git a/src/jvm/clojure/lang/PersistentArrayMap.java b/src/jvm/clojure/lang/PersistentArrayMap.java
index 7965c92e..5cdfdead 100644
--- a/src/jvm/clojure/lang/PersistentArrayMap.java
+++ b/src/jvm/clojure/lang/PersistentArrayMap.java
@@ -10,6 +10,7 @@
package clojure.lang;
+import java.io.Serializable;
import java.util.Arrays;
import java.util.Iterator;
import java.util.Map;
diff --git a/src/jvm/clojure/lang/PersistentHashMap.java b/src/jvm/clojure/lang/PersistentHashMap.java
index 6f956a7f..935fab59 100644
--- a/src/jvm/clojure/lang/PersistentHashMap.java
+++ b/src/jvm/clojure/lang/PersistentHashMap.java
@@ -10,6 +10,7 @@
package clojure.lang;
+import java.io.Serializable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -292,7 +293,7 @@ static final class TransientHashMap extends ATransientMap {
}
}
-static interface INode{
+static interface INode extends Serializable {
INode assoc(int shift, int hash, Object key, Object val, Box addedLeaf);
INode without(int shift, int hash, Object key);
diff --git a/src/jvm/clojure/lang/PersistentList.java b/src/jvm/clojure/lang/PersistentList.java
index 477d1cba..907b310a 100644
--- a/src/jvm/clojure/lang/PersistentList.java
+++ b/src/jvm/clojure/lang/PersistentList.java
@@ -10,9 +10,10 @@
package clojure.lang;
+import java.io.Serializable;
import java.util.*;
-public class PersistentList extends ASeq implements IPersistentList, IReduce, List, Counted{
+public class PersistentList extends ASeq implements IPersistentList, IReduce, List, Counted {
private final Object _first;
private final IPersistentList _rest;
diff --git a/src/jvm/clojure/lang/PersistentVector.java b/src/jvm/clojure/lang/PersistentVector.java
index a521eaa8..46f61bf9 100644
--- a/src/jvm/clojure/lang/PersistentVector.java
+++ b/src/jvm/clojure/lang/PersistentVector.java
@@ -12,13 +12,14 @@
package clojure.lang;
+import java.io.Serializable;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
public class PersistentVector extends APersistentVector implements IObj, IEditableCollection{
-static class Node{
- final AtomicReference<Thread> edit;
+static class Node implements Serializable {
+ transient final AtomicReference<Thread> edit;
final Object[] array;
Node(AtomicReference<Thread> edit, Object[] array){
diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java
index 8faf011e..4c9de96c 100644
--- a/src/jvm/clojure/lang/RT.java
+++ b/src/jvm/clojure/lang/RT.java
@@ -238,11 +238,19 @@ public static List<String> processCommandLine(String[] args){
}
static public final Object[] EMPTY_ARRAY = new Object[]{};
-static public final Comparator DEFAULT_COMPARATOR = new Comparator(){
- public int compare(Object o1, Object o2){
+static public final Comparator DEFAULT_COMPARATOR = new DefaultComparator();
+
+private static final class DefaultComparator implements Comparator, Serializable {
+ public int compare(Object o1, Object o2){
return Util.compare(o1, o2);
}
-};
+
+ private Object readResolve() throws ObjectStreamException {
+ // ensures that we aren't hanging onto a new default comparator for every
+ // sorted set, etc., we deserialize
+ return DEFAULT_COMPARATOR;
+ }
+}
static AtomicInteger id = new AtomicInteger(1);
diff --git a/src/jvm/clojure/lang/Range.java b/src/jvm/clojure/lang/Range.java
index 18a90901..4dc1add2 100644
--- a/src/jvm/clojure/lang/Range.java
+++ b/src/jvm/clojure/lang/Range.java
@@ -12,8 +12,6 @@
package clojure.lang;
-import java.util.concurrent.atomic.AtomicInteger;
-
public class Range extends ASeq implements IReduce, Counted{
final int end;
final int n;