diff --git a/src/lib.rs b/src/lib.rs index 07cbc4a..8a27e0f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -138,7 +138,7 @@ pub struct Symbol<'a> { pub enum Type<'a> { None, MemberFunction(FuncClass, CallingConv, Params<'a>, StorageClass, Box>), // StorageClass is for the 'this' pointer - MemberFunctionPointer(Symbol<'a>, Params<'a>, StorageClass, Box>), + MemberFunctionPointer(Symbol<'a>, CallingConv, Params<'a>, StorageClass, Box>), NonMemberFunction(CallingConv, Params<'a>, StorageClass, Box>), 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, ")")?;