1
1
use gdnative:: derive:: { methods, NativeClass } ;
2
2
use gdnative:: prelude:: NodeResolveExt ;
3
3
use gdnative:: prelude:: * ;
4
+ use std:: mem:: MaybeUninit ;
4
5
use std:: ops:: Deref ;
5
6
6
7
pub ( crate ) fn register ( handle : InitHandle ) {
@@ -38,10 +39,10 @@ crate::godot_itest! { test_as_arg_ref {
38
39
add_node_with( |n: Ref <Node2D , Unique >| n. into_shared( ) ) ;
39
40
40
41
// &Ref<T, Shared>
41
- let mut keeper = Node2D :: new ( ) . into_shared ( ) ; // keep Ref<T, Shared> alive so we can return a reference to it
42
+ let mut keeper: MaybeUninit < Ref < Node2D , Shared >> = MaybeUninit :: uninit ( ) ; // keep Ref<T, Shared> alive so we can return a reference to it
42
43
add_node_with( |n: Ref <Node2D , Unique >| {
43
- keeper = n. into_shared( ) ;
44
- & keeper
44
+ keeper. write ( n. into_shared( ) ) ;
45
+ unsafe { keeper. assume_init_ref ( ) }
45
46
} ) ;
46
47
47
48
// TRef<T, Shared>
@@ -56,10 +57,10 @@ crate::godot_itest! { test_as_arg_instance {
56
57
add_instance_with( |n: Instance <MyNode , Unique >| n. into_shared( ) ) ;
57
58
58
59
// &Instance<T, Shared>
59
- let mut keeper = MyNode { secret : "" } . emplace ( ) . into_shared ( ) ; // keep Instance<T, Shared> alive so we can return a reference to it
60
+ let mut keeper: MaybeUninit < Instance < MyNode , Shared >> = MaybeUninit :: uninit ( ) ; // keep Instance<T, Shared> alive so we can return a reference to it
60
61
add_instance_with( |n: Instance <MyNode , Unique >| {
61
- keeper = n. into_shared( ) ;
62
- & keeper
62
+ keeper. write ( n. into_shared( ) ) ;
63
+ unsafe { keeper. assume_init_ref ( ) }
63
64
} ) ;
64
65
65
66
// TInstance<T, Shared>
84
85
let found_tref = unsafe { found. assume_safe ( ) } ;
85
86
86
87
assert_eq ! ( found_tref. get_instance_id( ) , child_id) ;
88
+ parent. free ( )
87
89
}
88
90
89
91
fn add_instance_with < F , T > ( to_arg : F )
@@ -117,5 +119,6 @@ where
117
119
assert_eq ! ( node. get_instance_id( ) , child_id) ;
118
120
assert_eq ! ( user. secret, "yes" ) ;
119
121
} )
120
- . expect ( "found.map()" )
122
+ . expect ( "found.map()" ) ;
123
+ parent. free ( )
121
124
}
0 commit comments