diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/jvm/clojure/lang/AFn.java | 4 | ||||
-rw-r--r-- | src/jvm/clojure/lang/AFunction.java | 3 | ||||
-rw-r--r-- | src/jvm/clojure/lang/APersistentMap.java | 3 | ||||
-rw-r--r-- | src/jvm/clojure/lang/APersistentSet.java | 3 | ||||
-rw-r--r-- | src/jvm/clojure/lang/APersistentVector.java | 4 | ||||
-rw-r--r-- | src/jvm/clojure/lang/ASeq.java | 3 | ||||
-rw-r--r-- | src/jvm/clojure/lang/ArrayChunk.java | 4 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Cons.java | 4 | ||||
-rw-r--r-- | src/jvm/clojure/lang/EnumerationSeq.java | 7 | ||||
-rw-r--r-- | src/jvm/clojure/lang/IteratorSeq.java | 6 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Namespace.java | 14 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Obj.java | 4 | ||||
-rw-r--r-- | src/jvm/clojure/lang/PersistentArrayMap.java | 1 | ||||
-rw-r--r-- | src/jvm/clojure/lang/PersistentHashMap.java | 3 | ||||
-rw-r--r-- | src/jvm/clojure/lang/PersistentList.java | 3 | ||||
-rw-r--r-- | src/jvm/clojure/lang/PersistentVector.java | 5 | ||||
-rw-r--r-- | src/jvm/clojure/lang/RT.java | 14 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Range.java | 2 |
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; |