summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2009-12-23 08:54:18 -0500
committerRich Hickey <richhickey@gmail.com>2009-12-23 08:54:18 -0500
commit2160745a52a3b557c2adaa37673d0c2b9326e3a8 (patch)
tree25183222f1f831c6d4a554b4232402fcd2e4b3c0 /src
parentc7748783f6378c40278cff58fd62c47d1a71c009 (diff)
fix transient arraymaps persistent! so once-only
fix docstrings in ensureEditable to use Transient and persistent!
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/PersistentVector.java4
3 files changed, 9 insertions, 7 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/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);