summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/jvm/clojure/lang/PersistentHashMap.java16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/jvm/clojure/lang/PersistentHashMap.java b/src/jvm/clojure/lang/PersistentHashMap.java
index 3137e9c6..e790d0d1 100644
--- a/src/jvm/clojure/lang/PersistentHashMap.java
+++ b/src/jvm/clojure/lang/PersistentHashMap.java
@@ -490,7 +490,7 @@ final static class BitmapIndexedNode implements INode{
return this;
return new BitmapIndexedNode(null, bitmap, cloneAndSet(array, 2*idx+1, val));
}
- addedLeaf.val = val;
+ addedLeaf.val = addedLeaf;
return new BitmapIndexedNode(null, bitmap,
cloneAndSet(array,
2*idx, null,
@@ -515,7 +515,8 @@ final static class BitmapIndexedNode implements INode{
Object[] newArray = new Object[2*(n+1)];
System.arraycopy(array, 0, newArray, 0, 2*idx);
newArray[2*idx] = key;
- addedLeaf.val = newArray[2*idx+1] = val;
+ addedLeaf.val = addedLeaf;
+ newArray[2*idx+1] = val;
System.arraycopy(array, 2*idx, newArray, 2*(idx+1), 2*(n-idx));
return new BitmapIndexedNode(null, bitmap | bit, newArray);
}
@@ -627,13 +628,13 @@ final static class BitmapIndexedNode implements INode{
return this;
return editAndSet(edit, 2*idx+1, val);
}
- addedLeaf.val = val;
+ addedLeaf.val = addedLeaf;
return editAndSet(edit, 2*idx, null, 2*idx+1,
createNode(edit, shift + 5, keyOrNull, valOrNode, hash, key, val));
} else {
int n = Integer.bitCount(bitmap);
if(n*2 < array.length) {
- addedLeaf.val = val;
+ addedLeaf.val = addedLeaf;
BitmapIndexedNode editable = ensureEditable(edit);
System.arraycopy(editable.array, 2*idx, editable.array, 2*(idx+1), 2*(n-idx));
editable.array[2*idx] = key;
@@ -659,7 +660,8 @@ final static class BitmapIndexedNode implements INode{
Object[] newArray = new Object[2*(n+4)];
System.arraycopy(array, 0, newArray, 0, 2*idx);
newArray[2*idx] = key;
- addedLeaf.val = newArray[2*idx+1] = val;
+ addedLeaf.val = addedLeaf;
+ newArray[2*idx+1] = val;
System.arraycopy(array, 2*idx, newArray, 2*(idx+1), 2*(n-idx));
BitmapIndexedNode editable = ensureEditable(edit);
editable.array = newArray;
@@ -684,11 +686,11 @@ final static class BitmapIndexedNode implements INode{
return editAndSet(edit, 2*idx+1, n);
if (bitmap == bit)
return null;
- removedLeaf.val = valOrNode;
+ removedLeaf.val = removedLeaf;
return editAndRemovePair(edit, bit, idx);
}
if(Util.equals(key, keyOrNull)) {
- removedLeaf.val = key; // key can't be null
+ removedLeaf.val = removedLeaf;
// TODO: collapse
return editAndRemovePair(edit, bit, idx);
}