diff options
author | Christophe Grand <christophe@cgrand.net> | 2009-08-10 20:03:58 +0200 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2009-08-26 12:02:57 -0400 |
commit | df40a8271c916cbc173a68ed1e3e2b1aa98cbaee (patch) | |
tree | f4fca6947df4bd8c903e5eecfc140108ea9f31ba | |
parent | 0a7e6eda4d4bcb38048f61e120c333b954b57c25 (diff) |
Fixed count on transient assoc
Signed-off-by: Rich Hickey <richhickey@gmail.com>
-rw-r--r-- | src/jvm/clojure/lang/PersistentHashMap2.java | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/jvm/clojure/lang/PersistentHashMap2.java b/src/jvm/clojure/lang/PersistentHashMap2.java index 1859baa3..b6685cf8 100644 --- a/src/jvm/clojure/lang/PersistentHashMap2.java +++ b/src/jvm/clojure/lang/PersistentHashMap2.java @@ -406,8 +406,11 @@ final static class ArrayNode implements INode{ public INode assoc(AtomicReference<Thread> edit, int shift, int hash, Object key, Object val, Box addedLeaf){ int idx = mask(hash, shift); INode node = array[idx]; - if(node == null) - return editAndSet(edit, idx, BitmapIndexedNode.EMPTY.assoc(edit, shift + 5, hash, key, val, addedLeaf)); + if(node == null) { + ArrayNode editable = editAndSet(edit, idx, BitmapIndexedNode.EMPTY.assoc(edit, shift + 5, hash, key, val, addedLeaf)); + editable.count++; + return editable; + } INode n = node.assoc(edit, shift + 5, hash, key, val, addedLeaf); if(n == node) return this; |