[0.1.x] workaround : #issue 10767 ( typeInfo raises symbolException for classes with diamond virtual inheritance ) - base virtual classes are ignored

git-svn-id: https://pykd.svn.codeplex.com/svn@76401 9b283d60-5439-405e-af05-b73fd8c4d996
This commit is contained in:
SND\kernelnet_cp 2012-05-17 14:20:45 +00:00 committed by Mikhail I. Izmestev
parent 1fb0cb9e6c
commit 17f8fb721e
3 changed files with 31 additions and 1 deletions

View File

@ -170,6 +170,13 @@ ULONG Symbol::getCount()
return callSymbol(get_count);
}
////////////////////////////////////////////////////////////////////////////////
int Symbol::getVirtualBasePointerOffset()
{
return callSymbol( get_virtualBasePointerOffset);
}
////////////////////////////////////////////////////////////////////////////////
void Symbol::getValueImpl(IDiaSymbol *_symbol, VARIANT &vtValue)
{
@ -241,6 +248,20 @@ bool Symbol::isBasicType()
////////////////////////////////////////////////////////////////////////////////
bool Symbol::isVirtualBaseClass()
{
return !!callSymbol(get_virtualBaseClass);
}
////////////////////////////////////////////////////////////////////////////////
bool Symbol::isIndirectVirtualBaseClass()
{
return !!callSymbol(get_indirectVirtualBaseClass);
}
////////////////////////////////////////////////////////////////////////////////
ULONG Symbol::getBaseType()
{
return callSymbol(get_baseType);

View File

@ -117,6 +117,10 @@ public:
bool isBasicType();
bool isVirtualBaseClass();
bool isIndirectVirtualBaseClass();
ULONG getBaseType();
ULONG getBitPosition();
@ -155,6 +159,8 @@ public:
bool eq(Symbol &rhs);
int getVirtualBasePointerOffset();
public:
typedef std::pair<ULONG, const char *> ValueNameEntry;

View File

@ -534,7 +534,10 @@ void UdtTypeInfo::getFields( pyDia::SymbolPtr &rootSym, ULONG startOffset )
if ( symTag == SymTagBaseClass )
{
getFields( childSym, startOffset + childSym->getOffset() );
if ( !childSym->isVirtualBaseClass() )
{
getFields( childSym, startOffset + childSym->getOffset() );
}
}
else
if ( symTag == SymTagData )