diff options
author | Ron Hashimoto <mail@h2so5.net> | 2015-05-12 11:22:26 +0900 |
---|---|---|
committer | Lars Knoll <lars.knoll@theqtcompany.com> | 2015-09-25 08:39:46 +0000 |
commit | c47dacde0ba4a97f5eed9dc345f8c1450000082f (patch) | |
tree | 92bd0cfa55acd399c3cb8b451308362b07877925 /src/qml/jsruntime/qv4sparsearray.cpp | |
parent | d5d9c3097a151c774e9da476dc9131b69a7cb03d (diff) |
V4: Fix SparseArray::deleteNode
SparseArray::deleteNode should modify size_left only if
the deleted node had a right child
Change-Id: I0f3504a5c6568dbd9e392bf83eaf3f9780eb2b84
Task-number: QTBUG-46022
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Diffstat (limited to 'src/qml/jsruntime/qv4sparsearray.cpp')
-rw-r--r-- | src/qml/jsruntime/qv4sparsearray.cpp | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/src/qml/jsruntime/qv4sparsearray.cpp b/src/qml/jsruntime/qv4sparsearray.cpp index 01f94eeac6..bb1d3aeb69 100644 --- a/src/qml/jsruntime/qv4sparsearray.cpp +++ b/src/qml/jsruntime/qv4sparsearray.cpp @@ -246,15 +246,12 @@ void SparseArray::deleteNode(SparseArrayNode *z) x->setParent(y->parent()); if (root == y) root = x; - else if (y->parent()->left == y) { + else if (y->parent()->left == y) y->parent()->left = x; - if (x) - x->size_left += y->size_left; - } else { + else y->parent()->right = x; - if (x) - x->size_left += y->size_left; - } + if (x && x == y->right) + x->size_left += y->size_left; y->size_left = 0; } if (y->color() != SparseArrayNode::Red) { |