diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/cv2pdb.cpp | 9 | ||||
-rw-r--r-- | src/cv2pdb.h | 1 | ||||
-rw-r--r-- | src/cvutil.cpp | 12 | ||||
-rw-r--r-- | src/cvutil.h | 1 |
4 files changed, 22 insertions, 1 deletions
diff --git a/src/cv2pdb.cpp b/src/cv2pdb.cpp index e61fd12..f4f674e 100644 --- a/src/cv2pdb.cpp +++ b/src/cv2pdb.cpp @@ -1863,6 +1863,13 @@ bool CV2PDB::isCppInterface(const codeview_type* cvtype) return off == 0;
}
+bool CV2PDB::isClassType(int type)
+{
+ if(const codeview_type* cvt = getTypeData(type))
+ return isClass(cvt);
+ return false;
+}
+
void CV2PDB::ensureUDT(int type, const codeview_type* cvtype)
{
if (getStructProperty(cvtype) & kPropIncomplete)
@@ -2125,7 +2132,7 @@ bool CV2PDB::initGlobalTypes() case LF_POINTER_V1:
dtype->pointer_v2.id = LF_POINTER_V2;
dtype->pointer_v2.datatype = translateType(type->pointer_v1.datatype);
- if (Dversion > 0 && type->pointer_v1.datatype >= 0x1000
+ if (Dversion > 0 && isClassType(type->pointer_v1.datatype)
&& (type->pointer_v1.attribute & 0xE0) == 0)
{
if (thisIsNotRef) // const pointer for this
diff --git a/src/cv2pdb.h b/src/cv2pdb.h index 0b93b38..cdfed36 100644 --- a/src/cv2pdb.h +++ b/src/cv2pdb.h @@ -79,6 +79,7 @@ public: int fixProperty(int type, int prop, int fieldType);
bool derivesFromObject(const codeview_type* cvtype);
bool isCppInterface(const codeview_type* cvtype);
+ bool isClassType(int type);
int sizeofClassType(const codeview_type* cvtype);
int sizeofBasicType(int type);
diff --git a/src/cvutil.cpp b/src/cvutil.cpp index c125b41..64802f2 100644 --- a/src/cvutil.cpp +++ b/src/cvutil.cpp @@ -21,6 +21,18 @@ bool isStruct(const codeview_type* cvtype) return false;
}
+bool isClass(const codeview_type* cvtype)
+{
+ switch(cvtype->common.id)
+ {
+ case LF_CLASS_V1:
+ case LF_CLASS_V2:
+ case LF_CLASS_V3:
+ return true;
+ }
+ return false;
+}
+
int getStructProperty(const codeview_type* cvtype)
{
switch(cvtype->common.id)
diff --git a/src/cvutil.h b/src/cvutil.h index 83b0939..4b35c6a 100644 --- a/src/cvutil.h +++ b/src/cvutil.h @@ -39,6 +39,7 @@ static const int kPropIncomplete = 0x80; static const int kPropScoped = 0x100;
bool isStruct(const codeview_type* cvtype);
+bool isClass(const codeview_type* cvtype);
int getStructProperty(const codeview_type* cvtype);
int getStructFieldlist(const codeview_type* cvtype);
bool isCompleteStruct(const codeview_type* type, const BYTE* name, bool cstr);
|