diff options
Diffstat (limited to 'gnu/xml/dom/DomNode.java')
| -rw-r--r-- | gnu/xml/dom/DomNode.java | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/gnu/xml/dom/DomNode.java b/gnu/xml/dom/DomNode.java index 93f7c6f64..c06a4c1f1 100644 --- a/gnu/xml/dom/DomNode.java +++ b/gnu/xml/dom/DomNode.java @@ -1120,7 +1120,6 @@ public abstract class DomNode node.appendChild(newChild); } } - if (nodeType == ENTITY_REFERENCE_NODE) { node.makeReadonly(); @@ -1556,23 +1555,30 @@ public abstract class DomNode ancestorLen = ancestors.length; } - // XXX autogrow ancestors ... based on statistics - // Climb to the top of this subtree and handle capture, letting // each node (from the top down) capture until one stops it or // until we get to this one. - - for (index = 0, current = parent; - current != null && index < ancestorLen; - index++, current = current.parent) + current = parent; + if (current.depth >= ANCESTORS_INIT) { + DomNode[] newants = new DomNode[current.depth + 1]; + System.arraycopy(ancestors, 0, newants, 0, ancestors.length); + ancestors = newants; + ancestorLen = ancestors.length; + } + for (index = 0; index < ancestorLen; index++) + { + if (current == null || current.depth == 0) + break; + if (current.nListeners != 0) { haveAncestorRegistrations = true; } ancestors [index] = current; + current = current.parent; } - if (current != null) + if (current.depth > 0) { throw new RuntimeException("dispatchEvent capture stack size"); } |
