mirror of
https://github.com/ivellioscolin/pykd.git
synced 2025-04-20 03:23:23 +08:00
[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:
parent
1fb0cb9e6c
commit
17f8fb721e
@ -170,6 +170,13 @@ ULONG Symbol::getCount()
|
|||||||
return callSymbol(get_count);
|
return callSymbol(get_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
int Symbol::getVirtualBasePointerOffset()
|
||||||
|
{
|
||||||
|
return callSymbol( get_virtualBasePointerOffset);
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
void Symbol::getValueImpl(IDiaSymbol *_symbol, VARIANT &vtValue)
|
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()
|
ULONG Symbol::getBaseType()
|
||||||
{
|
{
|
||||||
return callSymbol(get_baseType);
|
return callSymbol(get_baseType);
|
||||||
|
@ -117,6 +117,10 @@ public:
|
|||||||
|
|
||||||
bool isBasicType();
|
bool isBasicType();
|
||||||
|
|
||||||
|
bool isVirtualBaseClass();
|
||||||
|
|
||||||
|
bool isIndirectVirtualBaseClass();
|
||||||
|
|
||||||
ULONG getBaseType();
|
ULONG getBaseType();
|
||||||
|
|
||||||
ULONG getBitPosition();
|
ULONG getBitPosition();
|
||||||
@ -155,6 +159,8 @@ public:
|
|||||||
|
|
||||||
bool eq(Symbol &rhs);
|
bool eq(Symbol &rhs);
|
||||||
|
|
||||||
|
int getVirtualBasePointerOffset();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
typedef std::pair<ULONG, const char *> ValueNameEntry;
|
typedef std::pair<ULONG, const char *> ValueNameEntry;
|
||||||
|
|
||||||
|
@ -534,7 +534,10 @@ void UdtTypeInfo::getFields( pyDia::SymbolPtr &rootSym, ULONG startOffset )
|
|||||||
|
|
||||||
if ( symTag == SymTagBaseClass )
|
if ( symTag == SymTagBaseClass )
|
||||||
{
|
{
|
||||||
getFields( childSym, startOffset + childSym->getOffset() );
|
if ( !childSym->isVirtualBaseClass() )
|
||||||
|
{
|
||||||
|
getFields( childSym, startOffset + childSym->getOffset() );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if ( symTag == SymTagData )
|
if ( symTag == SymTagData )
|
||||||
|
Loading…
Reference in New Issue
Block a user