summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2009-12-23 09:12:16 -0500
committerRich Hickey <richhickey@gmail.com>2009-12-23 09:12:16 -0500
commit16e042af56334d00838cbfbb1d4467a99f7f5910 (patch)
tree7ee5f612678dd4dcfa8ba1f8a7af314e7e7dfbfe /src
parentd3fe37cfd73592082ab37c62744d1baf5560a98b (diff)
parent855f394d6895cebfcee307dbccea9bdeffe792f5 (diff)
Merge branch 'master' into new
Diffstat (limited to 'src')
-rw-r--r--src/jvm/clojure/lang/PersistentArrayMap.java8
-rw-r--r--src/jvm/clojure/lang/PersistentHashMap.java4
-rw-r--r--src/jvm/clojure/lang/PersistentTreeMap.java2
-rw-r--r--src/jvm/clojure/lang/PersistentTreeSet.java2
-rw-r--r--src/jvm/clojure/lang/PersistentVector.java4
5 files changed, 11 insertions, 9 deletions
diff --git a/src/jvm/clojure/lang/PersistentArrayMap.java b/src/jvm/clojure/lang/PersistentArrayMap.java
index 7b7eda58..75ebe964 100644
--- a/src/jvm/clojure/lang/PersistentArrayMap.java
+++ b/src/jvm/clojure/lang/PersistentArrayMap.java
@@ -269,7 +269,7 @@ public ITransientMap asTransient(){
static final class TransientArrayMap extends ATransientMap {
int len;
final Object[] array;
- final Thread owner;
+ Thread owner;
public TransientArrayMap(Object[] array){
this.owner = Thread.currentThread();
@@ -330,6 +330,8 @@ static final class TransientArrayMap extends ATransientMap {
}
IPersistentMap doPersistent(){
+ ensureEditable();
+ owner = null;
Object[] a = new Object[len];
System.arraycopy(array,0,a,0,len);
return new PersistentArrayMap(a);
@@ -339,8 +341,8 @@ static final class TransientArrayMap extends ATransientMap {
if(owner == Thread.currentThread())
return;
if(owner != null)
- throw new IllegalAccessError("Mutable used by non-owner thread");
- throw new IllegalAccessError("Mutable used after immutable call");
+ throw new IllegalAccessError("Transient used by non-owner thread");
+ throw new IllegalAccessError("Transient used after persistent! call");
}
}
}
diff --git a/src/jvm/clojure/lang/PersistentHashMap.java b/src/jvm/clojure/lang/PersistentHashMap.java
index 5f5f5404..1f223e61 100644
--- a/src/jvm/clojure/lang/PersistentHashMap.java
+++ b/src/jvm/clojure/lang/PersistentHashMap.java
@@ -270,8 +270,8 @@ static final class TransientHashMap extends ATransientMap {
if(owner == Thread.currentThread())
return;
if(owner != null)
- throw new IllegalAccessError("Mutable used by non-owner thread");
- throw new IllegalAccessError("Mutable used after immutable call");
+ throw new IllegalAccessError("Transient used by non-owner thread");
+ throw new IllegalAccessError("Transient used after persistent! call");
}
}
diff --git a/src/jvm/clojure/lang/PersistentTreeMap.java b/src/jvm/clojure/lang/PersistentTreeMap.java
index 5a5a9bee..d69952b9 100644
--- a/src/jvm/clojure/lang/PersistentTreeMap.java
+++ b/src/jvm/clojure/lang/PersistentTreeMap.java
@@ -137,7 +137,7 @@ public ISeq seq(){
}
public IPersistentCollection empty(){
- return EMPTY.withMeta(meta());
+ return new PersistentTreeMap(meta(), comp);
}
public ISeq rseq() throws Exception{
diff --git a/src/jvm/clojure/lang/PersistentTreeSet.java b/src/jvm/clojure/lang/PersistentTreeSet.java
index d0f15d57..22979f11 100644
--- a/src/jvm/clojure/lang/PersistentTreeSet.java
+++ b/src/jvm/clojure/lang/PersistentTreeSet.java
@@ -53,7 +53,7 @@ public IPersistentSet cons(Object o){
}
public IPersistentCollection empty(){
- return EMPTY.withMeta(meta());
+ return new PersistentTreeSet(meta(),(PersistentTreeMap)impl.empty());
}
public ISeq rseq() throws Exception{
diff --git a/src/jvm/clojure/lang/PersistentVector.java b/src/jvm/clojure/lang/PersistentVector.java
index 2d55e2e8..392599c9 100644
--- a/src/jvm/clojure/lang/PersistentVector.java
+++ b/src/jvm/clojure/lang/PersistentVector.java
@@ -402,8 +402,8 @@ static final class TransientVector extends AFn implements ITransientVector, Coun
if(owner == Thread.currentThread())
return;
if(owner != null)
- throw new IllegalAccessError("Mutable used by non-owner thread");
- throw new IllegalAccessError("Mutable used after immutable call");
+ throw new IllegalAccessError("Transient used by non-owner thread");
+ throw new IllegalAccessError("Transient used after persistent! call");
// root = editableRoot(root);
// tail = editableTail(tail);