fixed problem with IS_COMPILABLE flag (bug 130216)

* relaxng.c: fixed problem with IS_COMPILABLE flag
  (bug 130216)
diff --git a/ChangeLog b/ChangeLog
index 59db7db..37a85e9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Sat Mar 27 09:56:14 PST 2004 William Brack <wbrack@mmm.com.hk>
+
+	* relaxng.c: fixed problem with IS_COMPILABLE flag
+	  (bug 130216)
+
 Fri Mar 26 18:28:32 CET 2004 Daniel Veillard <daniel@veillard.com>
 
 	* parser.c: applied patch from Dave Beckett to correct line number
diff --git a/relaxng.c b/relaxng.c
index 1fd46e9..2715aec 100644
--- a/relaxng.c
+++ b/relaxng.c
@@ -2340,7 +2340,8 @@
     /*
      * generate the error directly
      */
-    if (((ctxt->flags & 1) == 0) || (ctxt->flags & 2)) {
+    if (((ctxt->flags & FLAGS_IGNORABLE) == 0) ||
+    	 (ctxt->flags & FLAGS_NEGATIVE)) {
         xmlNodePtr node, seq;
 
         /*
@@ -2880,9 +2881,15 @@
                         break;
                     list = list->next;
                 }
-                if (ret == 0)
+		/*
+		 * Because the routine is recursive, we must guard against
+		 * discovering both COMPILABLE and NOT_COMPILABLE
+		 */
+                if (ret == 0) {
+		    def->dflags &= ~IS_COMPILABLE;
                     def->dflags |= IS_NOT_COMPILABLE;
-                if (ret == 1)
+		}
+                if ((ret == 1) && !(def->dflags &= IS_NOT_COMPILABLE))
                     def->dflags |= IS_COMPILABLE;
 #ifdef DEBUG_COMPILE
                 if (ret == 1) {