@@ -5,99 +5,61 @@ use pyo3::py_run;
5
5
6
6
mod common;
7
7
8
- // Tests for PyClassDefaultImpls
8
+ // Tests for PyClassDefaultSlots
9
9
#[ pyclass]
10
- struct TestDefaultImpl ;
10
+ struct TestDefaultSlots ;
11
11
12
12
// generated using `Cargo expand`
13
13
// equivalent to
14
14
// ```
15
- // impl TestDefaultImpl {
16
- // #[staticmethod]
17
- // fn default() {}
18
- // #[staticmethod]
19
- // fn overriden() -> bool { false }
15
+ // impl TestDefaultSlots {{
16
+ // fn __str__(&self) -> &'static str {
17
+ // "default"
18
+ // }
20
19
// }
21
20
// ```
22
- impl TestDefaultImpl {
23
- fn __pyo3__default ( ) { }
24
- fn __pyo3__overriden ( ) -> bool {
25
- false
21
+ impl TestDefaultSlots {
22
+ fn __pyo3__str__ ( & self ) -> & ' static str {
23
+ "default"
26
24
}
27
25
}
28
26
29
- impl pyo3:: class:: impl_:: PyClassDefaultImpls < TestDefaultImpl >
30
- for pyo3:: class:: impl_:: PyClassImplCollector < TestDefaultImpl >
27
+ impl :: pyo3:: class:: impl_:: PyClassDefaultSlots < TestDefaultSlots >
28
+ for :: pyo3:: class:: impl_:: PyClassImplCollector < TestDefaultSlots >
31
29
{
32
- fn py_class_default_impls ( self ) -> & ' static [ PyMethodDefType ] {
33
- static METHODS : & [ :: pyo3:: class:: methods:: PyMethodDefType ] = & [
34
- :: pyo3:: class:: PyMethodDefType :: Static (
35
- :: pyo3:: class:: methods:: PyMethodDef :: noargs (
36
- "default\u{0} " ,
37
- :: pyo3:: class:: methods:: PyCFunction ( {
38
- unsafe extern "C" fn __wrap (
39
- _slf : * mut :: pyo3:: ffi:: PyObject ,
40
- _args : * mut :: pyo3:: ffi:: PyObject ,
41
- ) -> * mut :: pyo3:: ffi:: PyObject {
42
- :: pyo3:: callback:: handle_panic ( |_py| {
43
- :: pyo3:: callback:: convert ( _py, TestDefaultImpl :: __pyo3__default ( ) )
44
- } )
45
- }
46
- __wrap
47
- } ) ,
48
- "\u{0} " ,
49
- )
50
- . flags ( :: pyo3:: ffi:: METH_STATIC ) ,
51
- ) ,
52
- :: pyo3:: class:: PyMethodDefType :: Static (
53
- :: pyo3:: class:: methods:: PyMethodDef :: noargs (
54
- "overriden\u{0} " ,
55
- :: pyo3:: class:: methods:: PyCFunction ( {
56
- unsafe extern "C" fn __wrap (
57
- _slf : * mut :: pyo3:: ffi:: PyObject ,
58
- _args : * mut :: pyo3:: ffi:: PyObject ,
59
- ) -> * mut :: pyo3:: ffi:: PyObject {
60
- :: pyo3:: callback:: handle_panic ( |_py| {
61
- :: pyo3:: callback:: convert ( _py, TestDefaultImpl :: __pyo3__overriden ( ) )
62
- } )
63
- }
64
- __wrap
65
- } ) ,
66
- "\u{0} " ,
67
- )
68
- . flags ( :: pyo3:: ffi:: METH_STATIC ) ,
69
- ) ,
70
- ] ;
71
- METHODS
72
- }
73
- }
74
-
75
- #[ pymethods]
76
- impl TestDefaultImpl {
77
- #[ staticmethod]
78
- fn overriden ( ) -> bool {
79
- true
30
+ fn py_class_default_slots ( self ) -> & ' static [ :: pyo3:: ffi:: PyType_Slot ] {
31
+ & [ {
32
+ unsafe extern "C" fn __wrap (
33
+ _raw_slf : * mut :: pyo3:: ffi:: PyObject ,
34
+ ) -> * mut :: pyo3:: ffi:: PyObject {
35
+ let _slf = _raw_slf;
36
+ :: pyo3:: callback:: handle_panic ( |_py| {
37
+ let _cell = _py
38
+ . from_borrowed_ptr :: < :: pyo3:: PyAny > ( _slf)
39
+ . downcast :: < :: pyo3:: PyCell < TestDefaultSlots > > ( ) ?;
40
+ let _ref = _cell. try_borrow ( ) ?;
41
+ let _slf = & _ref;
42
+ :: pyo3:: callback:: convert ( _py, TestDefaultSlots :: __pyo3__str__ ( _slf) )
43
+ } )
44
+ }
45
+ :: pyo3:: ffi:: PyType_Slot {
46
+ slot : :: pyo3:: ffi:: Py_tp_str ,
47
+ pfunc : __wrap as :: pyo3:: ffi:: reprfunc as _ ,
48
+ }
49
+ } ]
80
50
}
81
51
}
82
52
83
53
#[ test]
84
- fn test_default_impl_exists ( ) {
85
- Python :: with_gil ( |py| {
86
- let test_object = Py :: new ( py, TestDefaultImpl ) . unwrap ( ) ;
87
- py_run ! ( py, test_object, "test_object.default()" ) ;
88
- } )
89
- }
90
-
91
- #[ test]
92
- fn test_default_impl_is_overriden ( ) {
54
+ fn test_default_slot_exists ( ) {
93
55
Python :: with_gil ( |py| {
94
- let test_object = Py :: new ( py, TestDefaultImpl ) . unwrap ( ) ;
95
- py_assert ! ( py, test_object, "test_object.overriden( ) == True " ) ;
56
+ let test_object = Py :: new ( py, TestDefaultSlots ) . unwrap ( ) ;
57
+ py_assert ! ( py, test_object, "str(test_object ) == 'default' " ) ;
96
58
} )
97
59
}
98
60
99
61
#[ pyclass]
100
- struct OverrideMagicMethod ;
62
+ struct OverrideSlot ;
101
63
102
64
// generated using `Cargo expand`
103
65
// equivalent to
@@ -108,14 +70,14 @@ struct OverrideMagicMethod;
108
70
// }
109
71
// }
110
72
// ```
111
- impl OverrideMagicMethod {
73
+ impl OverrideSlot {
112
74
fn __pyo3__str__ ( & self ) -> & ' static str {
113
75
"default"
114
76
}
115
77
}
116
78
117
- impl :: pyo3:: class:: impl_:: PyClassDefaultSlots < OverrideMagicMethod >
118
- for :: pyo3:: class:: impl_:: PyClassImplCollector < OverrideMagicMethod >
79
+ impl :: pyo3:: class:: impl_:: PyClassDefaultSlots < OverrideSlot >
80
+ for :: pyo3:: class:: impl_:: PyClassImplCollector < OverrideSlot >
119
81
{
120
82
fn py_class_default_slots ( self ) -> & ' static [ :: pyo3:: ffi:: PyType_Slot ] {
121
83
& [ {
@@ -126,10 +88,10 @@ impl ::pyo3::class::impl_::PyClassDefaultSlots<OverrideMagicMethod>
126
88
:: pyo3:: callback:: handle_panic ( |_py| {
127
89
let _cell = _py
128
90
. from_borrowed_ptr :: < :: pyo3:: PyAny > ( _slf)
129
- . downcast :: < :: pyo3:: PyCell < OverrideMagicMethod > > ( ) ?;
91
+ . downcast :: < :: pyo3:: PyCell < OverrideSlot > > ( ) ?;
130
92
let _ref = _cell. try_borrow ( ) ?;
131
93
let _slf = & _ref;
132
- :: pyo3:: callback:: convert ( _py, OverrideMagicMethod :: __pyo3__str__ ( _slf) )
94
+ :: pyo3:: callback:: convert ( _py, OverrideSlot :: __pyo3__str__ ( _slf) )
133
95
} )
134
96
}
135
97
:: pyo3:: ffi:: PyType_Slot {
@@ -141,16 +103,16 @@ impl ::pyo3::class::impl_::PyClassDefaultSlots<OverrideMagicMethod>
141
103
}
142
104
143
105
#[ pymethods]
144
- impl OverrideMagicMethod {
106
+ impl OverrideSlot {
145
107
fn __str__ ( & self ) -> & str {
146
108
"overriden"
147
109
}
148
110
}
149
111
150
112
#[ test]
151
- fn test_override_magic_method ( ) {
113
+ fn test_override_slot ( ) {
152
114
Python :: with_gil ( |py| {
153
- let test_object = Py :: new ( py, OverrideMagicMethod ) . unwrap ( ) ;
115
+ let test_object = Py :: new ( py, OverrideSlot ) . unwrap ( ) ;
154
116
py_assert ! ( py, test_object, "str(test_object) == 'overriden'" ) ;
155
117
} )
156
118
}
0 commit comments