record calling convention for member function pointers

...just like we do for member functions.
This commit is contained in:
Nathan Froyd
2018-05-18 13:44:31 -04:00
committed by Jeff Muizelaar
parent 3b9c59f0f1
commit 07bbb7b4be
+6 -4
View File
@@ -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(&params.types)?;
write!(self.w, ")")?;