mirror of
https://github.com/encounter/msvc-demangler-rust.git
synced 2026-07-10 12:18:38 -07:00
record calling convention for member function pointers
...just like we do for member functions.
This commit is contained in:
committed by
Jeff Muizelaar
parent
3b9c59f0f1
commit
07bbb7b4be
+6
-4
@@ -138,7 +138,7 @@ pub struct Symbol<'a> {
|
||||
pub enum Type<'a> {
|
||||
None,
|
||||
MemberFunction(FuncClass, CallingConv, Params<'a>, StorageClass, Box<Type<'a>>), // StorageClass is for the 'this' pointer
|
||||
MemberFunctionPointer(Symbol<'a>, Params<'a>, StorageClass, Box<Type<'a>>),
|
||||
MemberFunctionPointer(Symbol<'a>, CallingConv, Params<'a>, StorageClass, Box<Type<'a>>),
|
||||
NonMemberFunction(CallingConv, Params<'a>, StorageClass, Box<Type<'a>>),
|
||||
CXXVBTable(NameSequence<'a>, StorageClass),
|
||||
CXXVFTable(NameSequence<'a>, StorageClass),
|
||||
@@ -806,12 +806,13 @@ impl<'a> ParserState<'a> {
|
||||
let symbol = self.read_name(true)?;
|
||||
let _is_64bit_ptr = self.expect(b"E")?;
|
||||
let access_class = self.read_qualifier();
|
||||
let _calling_conv = self.read_calling_conv()?;
|
||||
let calling_conv = self.read_calling_conv()?;
|
||||
let storage_class_for_return = self.read_storage_class_for_return()?;
|
||||
let return_type = self.read_func_return_type(storage_class_for_return)?;
|
||||
let params = self.read_func_params()?;
|
||||
return Ok(Type::MemberFunctionPointer(
|
||||
symbol,
|
||||
calling_conv,
|
||||
params,
|
||||
access_class,
|
||||
Box::new(return_type),
|
||||
@@ -1128,8 +1129,9 @@ impl<'a> Serializer<'a> {
|
||||
self.write_calling_conv(calling_conv)?;
|
||||
return Ok(());
|
||||
}
|
||||
&Type::MemberFunctionPointer(ref symbol, _, _, ref inner) => {
|
||||
&Type::MemberFunctionPointer(ref symbol, calling_conv, _, _, ref inner) => {
|
||||
self.write_pre(inner)?;
|
||||
self.write_calling_conv(calling_conv)?;
|
||||
if self.flags == DemangleFlags::LotsOfWhitespace {
|
||||
self.write_space()?;
|
||||
}
|
||||
@@ -1362,7 +1364,7 @@ impl<'a> Serializer<'a> {
|
||||
|
||||
self.write_memfn_qualifiers(sc)?;
|
||||
}
|
||||
&Type::MemberFunctionPointer(_, ref params, sc, ref return_type) => {
|
||||
&Type::MemberFunctionPointer(_, _, ref params, sc, ref return_type) => {
|
||||
write!(self.w, "(")?;
|
||||
self.write_types(¶ms.types)?;
|
||||
write!(self.w, ")")?;
|
||||
|
||||
Reference in New Issue
Block a user