@@ -73,19 +73,19 @@ pub struct FunctionSig {
73
73
is_variadic : bool ,
74
74
75
75
/// The ABI of this function.
76
- abi : abi:: Abi ,
76
+ abi : Option < abi:: Abi > ,
77
77
}
78
78
79
- fn get_abi ( cc : CXCallingConv ) -> abi:: Abi {
79
+ fn get_abi ( cc : CXCallingConv ) -> Option < abi:: Abi > {
80
80
use clang_sys:: * ;
81
81
match cc {
82
- CXCallingConv_Default => abi:: Abi :: C ,
83
- CXCallingConv_C => abi:: Abi :: C ,
84
- CXCallingConv_X86StdCall => abi:: Abi :: Stdcall ,
85
- CXCallingConv_X86FastCall => abi:: Abi :: Fastcall ,
86
- CXCallingConv_AAPCS => abi:: Abi :: Aapcs ,
87
- CXCallingConv_X86_64Win64 => abi:: Abi :: Win64 ,
88
- CXCallingConv_Invalid => abi :: Abi :: C , // TODO:
82
+ CXCallingConv_Default => Some ( abi:: Abi :: C ) ,
83
+ CXCallingConv_C => Some ( abi:: Abi :: C ) ,
84
+ CXCallingConv_X86StdCall => Some ( abi:: Abi :: Stdcall ) ,
85
+ CXCallingConv_X86FastCall => Some ( abi:: Abi :: Fastcall ) ,
86
+ CXCallingConv_AAPCS => Some ( abi:: Abi :: Aapcs ) ,
87
+ CXCallingConv_X86_64Win64 => Some ( abi:: Abi :: Win64 ) ,
88
+ CXCallingConv_Invalid => None ,
89
89
other => panic ! ( "unsupported calling convention: {:?}" , other) ,
90
90
}
91
91
}
@@ -117,7 +117,7 @@ impl FunctionSig {
117
117
pub fn new ( return_type : ItemId ,
118
118
arguments : Vec < ( Option < String > , ItemId ) > ,
119
119
is_variadic : bool ,
120
- abi : abi:: Abi )
120
+ abi : Option < abi:: Abi > )
121
121
-> Self {
122
122
FunctionSig {
123
123
return_type : return_type,
@@ -228,6 +228,11 @@ impl FunctionSig {
228
228
let ret = Item :: from_ty_or_ref ( ty_ret_type, None , None , ctx) ;
229
229
let abi = get_abi ( ty. call_conv ( ) ) ;
230
230
231
+ if abi. is_none ( ) {
232
+ assert_eq ! ( cursor. kind( ) , CXCursor_ObjCInstanceMethodDecl ,
233
+ "Invalid ABI for function signature" )
234
+ }
235
+
231
236
Ok ( Self :: new ( ret, args, ty. is_variadic ( ) , abi) )
232
237
}
233
238
@@ -242,7 +247,7 @@ impl FunctionSig {
242
247
}
243
248
244
249
/// Get this function signature's ABI.
245
- pub fn abi ( & self ) -> abi:: Abi {
250
+ pub fn abi ( & self ) -> Option < abi:: Abi > {
246
251
self . abi
247
252
}
248
253
0 commit comments