diff options
author | Rich Hickey <richhickey@gmail.com> | 2009-12-23 08:54:18 -0500 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2009-12-23 08:54:18 -0500 |
commit | 2160745a52a3b557c2adaa37673d0c2b9326e3a8 (patch) | |
tree | 25183222f1f831c6d4a554b4232402fcd2e4b3c0 /src | |
parent | c7748783f6378c40278cff58fd62c47d1a71c009 (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.java | 8 | ||||
-rw-r--r-- | src/jvm/clojure/lang/PersistentHashMap.java | 4 | ||||
-rw-r--r-- | src/jvm/clojure/lang/PersistentVector.java | 4 |
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); |