diff --git a/ChangeLog b/ChangeLog index 3d4f217c..14d0bc1f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Thu Sep 12 18:01:29 CEST 2002 Daniel Veillard + + * 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 * python/generator.py python/libxml.c python/libxml.py diff --git a/xmlregexp.c b/xmlregexp.c index e9acd5d0..d613d4ce 100644 --- a/xmlregexp.c +++ b/xmlregexp.c @@ -740,7 +740,6 @@ xmlRegPrintState(FILE *output, xmlRegStatePtr state) { } } -#if 0 static void xmlRegPrintCtxt(FILE *output, xmlRegParserCtxtPtr ctxt) { int i; @@ -780,7 +779,6 @@ xmlRegPrintCtxt(FILE *output, xmlRegParserCtxtPtr ctxt) { ctxt->counters[i].max); } } -#endif /************************************************************************ * * @@ -927,7 +925,7 @@ xmlRegStateAddTrans(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr state, 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 @@ xmlFAComputesDeterminism(xmlRegParserCtxtPtr ctxt) { 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 99956d48..79e376d2 100644 --- a/xmlschemas.c +++ b/xmlschemas.c @@ -3262,20 +3262,20 @@ xmlSchemaBuildContentModel(xmlSchemaElementPtr elem, 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; }