mirror of
https://github.com/encounter/msvc-demangler-rust.git
synced 2026-07-10 12:18:38 -07:00
Add support for RTTIBaseClassDescriptor
This commit is contained in:
+18
-1
@@ -193,8 +193,9 @@ pub enum Operator<'a> {
|
||||
LiteralOperatorName,
|
||||
|
||||
RTTITypeDescriptor(StorageClass, Box<Type<'a>>),
|
||||
RTTIBaseClassDescriptor(i32, i32, i32, i32),
|
||||
RTTIBaseClassArray,
|
||||
RTTIClassHierarchyDescriptor
|
||||
RTTIClassHierarchyDescriptor,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
@@ -802,6 +803,13 @@ impl<'a> ParserState<'a> {
|
||||
let t = self.read_var_type(storage_class)?;
|
||||
Operator::RTTITypeDescriptor(storage_class, Box::new(t))
|
||||
}
|
||||
b'1' => {
|
||||
let nv_offset = self.read_number()?;
|
||||
let vbptr_offset = self.read_number()?;
|
||||
let vbtable_offset = self.read_number()?;
|
||||
let flags = self.read_number()?;
|
||||
Operator::RTTIBaseClassDescriptor(nv_offset, vbptr_offset, vbtable_offset, flags)
|
||||
}
|
||||
b'2' => {
|
||||
Operator::RTTIBaseClassArray
|
||||
}
|
||||
@@ -1772,6 +1780,11 @@ impl<'a> Serializer<'a> {
|
||||
write!(self.w, "::`RTTI Type Descriptor'")?;
|
||||
return Ok(());
|
||||
},
|
||||
&Operator::RTTIBaseClassDescriptor(nv_offset, vbptr_offset, vbtable_offset, flags) => {
|
||||
write!(self.w, "`RTTI Base Class Descriptor at ({},{},{},{})'",
|
||||
nv_offset, vbptr_offset, vbtable_offset, flags)?;
|
||||
return Ok(());
|
||||
},
|
||||
&Operator::RTTIBaseClassArray => {
|
||||
"`RTTI Base Class Array'"
|
||||
}
|
||||
@@ -2124,6 +2137,10 @@ mod tests {
|
||||
"??_R3UO@i@@8",
|
||||
"i::UO::`RTTI Class Hierarchy Descriptor'"
|
||||
);
|
||||
expect(
|
||||
"??_R1A@?0A@EA@U@i@@8",
|
||||
"i::U::`RTTI Base Class Descriptor at (0,-1,0,64)'"
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user