From: Jean Privat Date: Mon, 28 Sep 2015 14:35:40 +0000 (-0400) Subject: Merge: Fixes for ordered trees X-Git-Tag: v0.7.8~5 X-Git-Url: http://nitlanguage.org?hp=7b076a95018b6d2e9c76963d832c8830f7e6087e Merge: Fixes for ordered trees Some fixes related of the last changes Pull-Request: #1741 Reviewed-by: Alexis Laferrière Reviewed-by: Lucas Bajolet --- diff --git a/lib/ordered_tree.nit b/lib/ordered_tree.nit index 0b1d383..d1dde15 100644 --- a/lib/ordered_tree.nit +++ b/lib/ordered_tree.nit @@ -128,7 +128,15 @@ class OrderedTree[E: Object] do var old_parent = parents.get_or_null(e) if old_parent != null then - sub[old_parent].remove(e) + var subs = sub[old_parent] + subs.remove(e) + if subs.is_empty then + # remove the sub when all children are detached + # so that `==` and `hash` are sane + # Otherwise an empty array will be considered + # differently than no array. + sub.keys.remove(old_parent) + end else if roots.has(e) then roots.remove(e) end @@ -149,6 +157,7 @@ class OrderedTree[E: Object] do if not sub.has_key(e) then return var subs = sub[e] + if subs.is_empty then return var last = subs.last for e2 in subs do if e2 != last then