internal bool Match(XmlSchemaObject o1, XmlSchemaObject o2, bool shareTypes) {
if (o1 == o2)
return true;
if (o1.GetType() != o2.GetType())
return false;
if (Hash[o1] == null)
Hash[o1] = GetHash(o1);
int hash1 = (int)Hash[o1];
int hash2 = GetHash(o2);
if (hash1 != hash2)
return false;
if (shareTypes)
return CompositeHash(o1, hash1) == CompositeHash(o2, hash2);
return true;
}