summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Grand <christophe@cgrand.net>2009-08-10 20:03:58 +0200
committerRich Hickey <richhickey@gmail.com>2009-08-26 12:02:57 -0400
commitdf40a8271c916cbc173a68ed1e3e2b1aa98cbaee (patch)
treef4fca6947df4bd8c903e5eecfc140108ea9f31ba
parent0a7e6eda4d4bcb38048f61e120c333b954b57c25 (diff)
Fixed count on transient assoc
Signed-off-by: Rich Hickey <richhickey@gmail.com>
-rw-r--r--src/jvm/clojure/lang/PersistentHashMap2.java7
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;