@@ -66,38 +66,25 @@ fn slice_new(vm: &VirtualMachine, args: PyFuncArgs) -> PyResult {
66
66
. map ( |x| x. into_object ( ) )
67
67
}
68
68
69
- fn get_property_value ( vm : & VirtualMachine , value : & Option < BigInt > ) -> PyResult {
69
+ fn get_property_value ( vm : & VirtualMachine , value : & Option < BigInt > ) -> PyObjectRef {
70
70
if let Some ( value) = value {
71
- Ok ( vm. ctx . new_int ( value. clone ( ) ) )
71
+ vm. ctx . new_int ( value. clone ( ) )
72
72
} else {
73
- Ok ( vm. get_none ( ) )
73
+ vm. get_none ( )
74
74
}
75
75
}
76
76
77
- fn slice_start ( vm : & VirtualMachine , args : PyFuncArgs ) -> PyResult {
78
- arg_check ! ( vm, args, required = [ ( slice, Some ( vm. ctx. slice_type( ) ) ) ] ) ;
79
- if let Some ( PySlice { start, .. } ) = & slice. payload ( ) {
80
- get_property_value ( vm, start)
81
- } else {
82
- panic ! ( "Slice has incorrect payload." ) ;
77
+ impl PySliceRef {
78
+ fn start ( self , vm : & VirtualMachine ) -> PyObjectRef {
79
+ get_property_value ( vm, & self . start )
83
80
}
84
- }
85
81
86
- fn slice_stop ( vm : & VirtualMachine , args : PyFuncArgs ) -> PyResult {
87
- arg_check ! ( vm, args, required = [ ( slice, Some ( vm. ctx. slice_type( ) ) ) ] ) ;
88
- if let Some ( PySlice { stop, .. } ) = & slice. payload ( ) {
89
- get_property_value ( vm, stop)
90
- } else {
91
- panic ! ( "Slice has incorrect payload." ) ;
82
+ fn stop ( self , vm : & VirtualMachine ) -> PyObjectRef {
83
+ get_property_value ( vm, & self . stop )
92
84
}
93
- }
94
85
95
- fn slice_step ( vm : & VirtualMachine , args : PyFuncArgs ) -> PyResult {
96
- arg_check ! ( vm, args, required = [ ( slice, Some ( vm. ctx. slice_type( ) ) ) ] ) ;
97
- if let Some ( PySlice { step, .. } ) = & slice. payload ( ) {
98
- get_property_value ( vm, step)
99
- } else {
100
- panic ! ( "Slice has incorrect payload." ) ;
86
+ fn step ( self , vm : & VirtualMachine ) -> PyObjectRef {
87
+ get_property_value ( vm, & self . step )
101
88
}
102
89
}
103
90
@@ -106,8 +93,8 @@ pub fn init(context: &PyContext) {
106
93
107
94
extend_class ! ( context, slice_type, {
108
95
"__new__" => context. new_rustfunc( slice_new) ,
109
- "start" => context. new_property( slice_start ) ,
110
- "stop" => context. new_property( slice_stop ) ,
111
- "step" => context. new_property( slice_step )
96
+ "start" => context. new_property( PySliceRef :: start ) ,
97
+ "stop" => context. new_property( PySliceRef :: stop ) ,
98
+ "step" => context. new_property( PySliceRef :: step )
112
99
} ) ;
113
100
}
0 commit comments