neilg 2003/12/01 12:41:26
Modified: c/src/xercesc/internal XSObjectFactory.cpp
c/src/xercesc/framework/psvi XSElementDeclaration.hpp
Log:
fix for infinite loop between XSComplexTypeDefinitions and XSElementDeclarations;
from David Cargill
Revision Changes Path
1.8 +12 -3 xml-xerces/c/src/xercesc/internal/XSObjectFactory.cpp
Index: XSObjectFactory.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/XSObjectFactory.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- XSObjectFactory.cpp 27 Nov 2003 16:42:00 -0000 1.7
+++ XSObjectFactory.cpp 1 Dec 2003 20:41:25 -0000 1.8
@@ -56,6 +56,9 @@
/*
* $Log$
+ * Revision 1.8 2003/12/01 20:41:25 neilg
+ * fix for infinite loop between XSComplexTypeDefinitions and
XSElementDeclarations; from David Cargill
+ *
* Revision 1.7 2003/11/27 16:42:00 neilg
* fixes for segfaults and infinite loops in schema component model implementation;
thanks to David Cargill
*
@@ -434,9 +437,9 @@
if (elemDecl->getSubstitutionGroupElem())
xsSubElem = addOrFind(elemDecl->getSubstitutionGroupElem(), xsModel);
- if (elemDecl->getComplexTypeInfo())
- xsType = addOrFind(elemDecl->getComplexTypeInfo(), xsModel);
- else if (elemDecl->getDatatypeValidator())
+ // defer checking for complextypeinfo until later as it could
+ // eventually need this elemement
+ if (elemDecl->getDatatypeValidator())
xsType = addOrFind(elemDecl->getDatatypeValidator(), xsModel);
unsigned int count = elemDecl->getIdentityConstraintCount();
@@ -491,6 +494,12 @@
, fMemoryManager
);
putObjectInMap(elemDecl, xsObj, xsModel);
+
+ if (!xsType && elemDecl->getComplexTypeInfo())
+ {
+ xsType = addOrFind(elemDecl->getComplexTypeInfo(), xsModel);
+ xsObj->setTypeDefinition(xsType);
+ }
}
return xsObj;
1.7 +9 -0 xml-xerces/c/src/xercesc/framework/psvi/XSElementDeclaration.hpp
Index: XSElementDeclaration.hpp
===================================================================
RCS file:
/home/cvs/xml-xerces/c/src/xercesc/framework/psvi/XSElementDeclaration.hpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- XSElementDeclaration.hpp 23 Nov 2003 16:20:16 -0000 1.6
+++ XSElementDeclaration.hpp 1 Dec 2003 20:41:25 -0000 1.7
@@ -56,6 +56,9 @@
/*
* $Log$
+ * Revision 1.7 2003/12/01 20:41:25 neilg
+ * fix for infinite loop between XSComplexTypeDefinitions and
XSElementDeclarations; from David Cargill
+ *
* Revision 1.6 2003/11/23 16:20:16 knoaman
* PSVI: pass scope and enclosing type during construction.
*
@@ -285,6 +288,8 @@
*/
void setId(unsigned int id);
+ void setTypeDefinition(XSTypeDefinition* typeDefinition);
+
//@}
private:
@@ -356,6 +361,10 @@
return fEnclosingTypeDefinition;
}
+inline void XSElementDeclaration::setTypeDefinition(XSTypeDefinition*
typeDefinition)
+{
+ fTypeDefinition = typeDefinition;
+}
XERCES_CPP_NAMESPACE_END
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]