fixed a bug reported by Jeff Goff, the determinism was tested before
* xmlregexp.c xmlschemas.c: fixed a bug reported by Jeff Goff,
the determinism was tested before eliminating the epsilon
transitions :-(
Daniel
diff --git a/ChangeLog b/ChangeLog
index 3d4f217..14d0bc1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Thu Sep 12 18:01:29 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlregexp.c xmlschemas.c: fixed a bug reported by Jeff Goff,
+ the determinism was tested before eliminating the epsilon
+ transitions :-(
+
Thu Sep 12 16:57:45 CEST 2002 Daniel Veillard <daniel@veillard.com>
* python/generator.py python/libxml.c python/libxml.py
diff --git a/xmlregexp.c b/xmlregexp.c
index e9acd5d..d613d4c 100644
--- a/xmlregexp.c
+++ b/xmlregexp.c
@@ -740,7 +740,6 @@
}
}
-#if 0
static void
xmlRegPrintCtxt(FILE *output, xmlRegParserCtxtPtr ctxt) {
int i;
@@ -780,7 +779,6 @@
ctxt->counters[i].max);
}
}
-#endif
/************************************************************************
* *
@@ -927,7 +925,7 @@
printf("Add trans from %d to %d ", state->no, target->no);
if (count == REGEXP_ALL_COUNTER)
printf("all transition");
- else (count >= 0)
+ else if (count >= 0)
printf("count based %d", count);
else if (counter >= 0)
printf("counted %d", counter);
@@ -1389,6 +1387,10 @@
int i;
int ret = 1;
+#ifdef DEBUG_REGEXP_GRAPH
+ printf("xmlFAComputesDeterminism\n");
+ xmlRegPrintCtxt(stdout, ctxt);
+#endif
if (ctxt->determinist != -1)
return(ctxt->determinist);
diff --git a/xmlschemas.c b/xmlschemas.c
index 99956d4..79e376d 100644
--- a/xmlschemas.c
+++ b/xmlschemas.c
@@ -3262,20 +3262,20 @@
start = ctxt->state = xmlAutomataGetInitState(ctxt->am);
xmlSchemaBuildAContentModel(elem->subtypes, ctxt, name);
xmlAutomataSetFinalState(ctxt->am, ctxt->state);
+ elem->contModel = xmlAutomataCompile(ctxt->am);
if (!xmlAutomataIsDeterminist(ctxt->am)) {
xmlGenericError(xmlGenericErrorContext,
"Content model of %s is not determinist:\n", name);
- elem->contModel = xmlAutomataCompile(ctxt->am);
ctxt->err = XML_SCHEMAS_ERR_NOTDETERMINIST;
+ ctxt->state = NULL;
} else {
- elem->contModel = xmlAutomataCompile(ctxt->am);
#ifdef DEBUG_CONTENT
xmlGenericError(xmlGenericErrorContext,
"Content model of %s:\n", name);
xmlRegexpPrint(stderr, elem->contModel);
#endif
+ ctxt->state = NULL;
}
- ctxt->state = NULL;
xmlFreeAutomata(ctxt->am);
ctxt->am = NULL;
}