- valid.c: (a? , b? , c? , ... , z?) was storing/restauring
state far too often, simple fix used to avoid it.
Daniel
diff --git a/valid.c b/valid.c
index 6caf544..41a5863 100644
--- a/valid.c
+++ b/valid.c
@@ -3417,6 +3417,19 @@
CONT = CONT->c1;
goto cont;
case XML_ELEMENT_CONTENT_SEQ:
+ /*
+ * Small optimization.
+ */
+ if ((CONT->c1->type == XML_ELEMENT_CONTENT_ELEMENT) &&
+ ((CONT->c1->ocur == XML_ELEMENT_CONTENT_OPT) ||
+ (CONT->c1->ocur == XML_ELEMENT_CONTENT_MULT))) {
+ if ((NODE == NULL) ||
+ (!xmlStrEqual(NODE->name, CONT->c1->name))) {
+ DEPTH++;
+ CONT = CONT->c2;
+ goto cont;
+ }
+ }
DEPTH++;
CONT = CONT->c1;
goto cont;