summaryrefslogtreecommitdiff
path: root/gnu/xml/dom/DomNode.java
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/xml/dom/DomNode.java')
-rw-r--r--gnu/xml/dom/DomNode.java22
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");
}