@@ -510,20 +510,21 @@ fn make_method_definition(
510
510
/*if method.map_args(|args| args.is_empty()) {
511
511
// Getters (i.e. 0 arguments) will be stripped of their `get_` prefix, to conform to Rust convention
512
512
if let Some(remainder) = method_name.strip_prefix("get_") {
513
- // Do not apply for get_16 etc
514
- // TODO also not for get_u16 etc, in StreamPeer
513
+ // TODO Do not apply for FileAccess::get_16, StreamPeer::get_u16, etc
515
514
if !remainder.chars().nth(0).unwrap().is_ascii_digit() {
516
515
method_name = remainder;
517
516
}
518
517
}
519
518
}*/
520
519
521
520
let method_name_str = special_cases:: maybe_renamed ( class_name, & method. name ) ;
522
- let receiver = if method. is_const {
523
- quote ! { & self , }
524
- } else {
525
- quote ! { & mut self , }
526
- } ;
521
+
522
+ let ( receiver, receiver_arg) = make_receiver (
523
+ method. is_static ,
524
+ method. is_const ,
525
+ quote ! { self . object_ptr } ,
526
+ ) ;
527
+
527
528
let hash = method. hash ;
528
529
let is_varcall = method. is_vararg ;
529
530
@@ -546,10 +547,10 @@ fn make_method_definition(
546
547
let __call_fn = sys:: interface_fn!( #function_provider) ;
547
548
} ;
548
549
let varcall_invocation = quote ! {
549
- __call_fn( __method_bind, self . object_ptr , __args_ptr, __args. len( ) as i64 , return_ptr, std:: ptr:: addr_of_mut!( __err) ) ;
550
+ __call_fn( __method_bind, #receiver_arg , __args_ptr, __args. len( ) as i64 , return_ptr, std:: ptr:: addr_of_mut!( __err) ) ;
550
551
} ;
551
552
let ptrcall_invocation = quote ! {
552
- __call_fn( __method_bind, self . object_ptr , __args_ptr, return_ptr) ;
553
+ __call_fn( __method_bind, #receiver_arg , __args_ptr, return_ptr) ;
553
554
} ;
554
555
555
556
make_function_definition (
@@ -579,11 +580,8 @@ fn make_builtin_method_definition(
579
580
580
581
let method_name_str = & method. name ;
581
582
582
- let receiver = if method. is_const {
583
- quote ! { & self , }
584
- } else {
585
- quote ! { & mut self , }
586
- } ;
583
+ let ( receiver, receiver_arg) =
584
+ make_receiver ( method. is_static , method. is_const , quote ! { self . sys_ptr } ) ;
587
585
588
586
let return_value = method. return_type . as_deref ( ) . map ( MethodReturn :: from_type) ;
589
587
let hash = method. hash ;
@@ -602,7 +600,7 @@ fn make_builtin_method_definition(
602
600
let __call_fn = __call_fn. unwrap_unchecked( ) ;
603
601
} ;
604
602
let ptrcall_invocation = quote ! {
605
- __call_fn( self . sys_ptr , __args_ptr, return_ptr, __args. len( ) as i32 ) ;
603
+ __call_fn( #receiver_arg , __args_ptr, return_ptr, __args. len( ) as i32 ) ;
606
604
} ;
607
605
608
606
make_function_definition (
@@ -746,6 +744,28 @@ fn make_function_definition(
746
744
}
747
745
}
748
746
747
+ fn make_receiver (
748
+ is_static : bool ,
749
+ is_const : bool ,
750
+ receiver_arg : TokenStream ,
751
+ ) -> ( TokenStream , TokenStream ) {
752
+ let receiver = if is_static {
753
+ quote ! { }
754
+ } else if is_const {
755
+ quote ! { & self , }
756
+ } else {
757
+ quote ! { & mut self , }
758
+ } ;
759
+
760
+ let receiver_arg = if is_static {
761
+ quote ! { std:: ptr:: null_mut( ) }
762
+ } else {
763
+ receiver_arg
764
+ } ;
765
+
766
+ ( receiver, receiver_arg)
767
+ }
768
+
749
769
fn make_params (
750
770
method_args : & Option < Vec < MethodArg > > ,
751
771
is_varcall : bool ,
0 commit comments