diff --git a/src/xercesc/framework/psvi/XSModel.cpp b/src/xercesc/framework/psvi/XSModel.cpp index 3c20ace84a61f1ece7b3d169f03398ee4790bd25..23f32e28d9595481ec5c1085ed60000733beb729 100644 --- a/src/xercesc/framework/psvi/XSModel.cpp +++ b/src/xercesc/framework/psvi/XSModel.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.20 2004/02/05 18:09:53 cargilld + * Fix a seg fault with PSVI and set basetype of anysimpletype to be anytype. + * * Revision 1.19 2004/01/29 11:46:30 cargilld * Code cleanup changes to get rid of various compiler diagnostic messages. * @@ -244,11 +247,11 @@ XSModel::XSModel( XMLGrammarPool *grammarPool dvFactory.expandRegistryToFullSchemaSet(); addS4SToXSModel ( - getNamespaceItem(SchemaSymbols::fgURI_SCHEMAFORSCHEMA) + namespaceItem , dvFactory.getBuiltInRegistry() ); - - unsigned int numberOfNamespaces = fXSNamespaceItemList->size(); + // don't include S4S (thus the -1) + unsigned int numberOfNamespaces = fXSNamespaceItemList->size() -1; for (unsigned int j = 0; j < numberOfNamespaces; j++) addGrammarToXSModel(fXSNamespaceItemList->elementAt(j)); } @@ -416,7 +419,7 @@ XSModel::XSModel( XSModel *baseModel fDeleteNamespace->addElement(namespaceItem); addS4SToXSModel ( - getNamespaceItem(SchemaSymbols::fgURI_SCHEMAFORSCHEMA) + namespaceItem , dvFactory.getBuiltInRegistry() ); } diff --git a/src/xercesc/internal/XSObjectFactory.cpp b/src/xercesc/internal/XSObjectFactory.cpp index 0151e9ea6023b46f150570466e0bd88958162897..5a10f2e8558cbfc4a79ee481822832fc665cea98 100644 --- a/src/xercesc/internal/XSObjectFactory.cpp +++ b/src/xercesc/internal/XSObjectFactory.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.20 2004/02/05 18:09:53 cargilld + * Fix a seg fault with PSVI and set basetype of anysimpletype to be anytype. + * * Revision 1.19 2004/01/07 02:33:56 knoaman * PSVI: inherit facets from base type * @@ -396,7 +399,7 @@ XSObjectFactory::addOrFind(DatatypeValidator* const validator, XSSimpleTypeDefinition* xsObj = (XSSimpleTypeDefinition*) xsModel->getXSObject(validator); if (!xsObj) { - XSSimpleTypeDefinition* baseType = 0; + XSTypeDefinition* baseType = 0; XSSimpleTypeDefinitionList* memberTypes = 0; XSSimpleTypeDefinition* primitiveOrItemType = 0; XSSimpleTypeDefinition::VARIETY typeVariety = XSSimpleTypeDefinition::VARIETY_ATOMIC; @@ -438,7 +441,7 @@ XSObjectFactory::addOrFind(DatatypeValidator* const validator, if (baseDV->getType() == DatatypeValidator::List) { baseType = addOrFind(baseDV, xsModel); - primitiveOrItemType = baseType->getItemType(); + primitiveOrItemType = ((XSSimpleTypeDefinition*) baseType)->getItemType(); } else { @@ -455,7 +458,7 @@ XSObjectFactory::addOrFind(DatatypeValidator* const validator, if (baseDV) { baseType = addOrFind(baseDV, xsModel); - primitiveOrItemType = baseType->getPrimitiveType(); + primitiveOrItemType = ((XSSimpleTypeDefinition*) baseType)->getPrimitiveType(); } else // built-in { @@ -467,6 +470,10 @@ XSObjectFactory::addOrFind(DatatypeValidator* const validator, primitiveTypeSelf = true; } } + else + { + baseType = xsModel->getTypeDefinition(SchemaSymbols::fgATTVAL_ANYTYPE, SchemaSymbols::fgURI_SCHEMAFORSCHEMA); + } xsObj = new (fMemoryManager) XSSimpleTypeDefinition ( @@ -1061,7 +1068,8 @@ void XSObjectFactory::processFacets(DatatypeValidator* const dv, } // inherit facets from base - if (xsST->getBaseType()) + + if (xsST->getBaseType() && xsST->getBaseType()->getTypeCategory() == XSTypeDefinition::SIMPLE_TYPE) { XSSimpleTypeDefinition* baseST = (XSSimpleTypeDefinition*) xsST->getBaseType(); XSFacetList* baseFacets = baseST->getFacets();