@@ -30,13 +30,7 @@ pub trait AbiArgument {
30
30
fn to_bytes (
31
31
& self ,
32
32
buffer : & mut Vec < u8 > ,
33
- find_dict_overrides : impl Copy
34
- + Fn (
35
- & ConcreteTypeId ,
36
- ) -> (
37
- Option < extern "C" fn ( * mut c_void , * mut c_void ) > ,
38
- Option < extern "C" fn ( * mut c_void ) > ,
39
- ) ,
33
+ find_dict_drop_override : impl Copy + Fn ( & ConcreteTypeId ) -> Option < extern "C" fn ( * mut c_void ) > ,
40
34
) -> Result < ( ) > ;
41
35
}
42
36
@@ -74,18 +68,16 @@ impl AbiArgument for ValueWithInfoWrapper<'_> {
74
68
fn to_bytes (
75
69
& self ,
76
70
buffer : & mut Vec < u8 > ,
77
- find_dict_overrides : impl Copy
78
- + Fn (
79
- & ConcreteTypeId ,
80
- ) -> (
81
- Option < extern "C" fn ( * mut c_void , * mut c_void ) > ,
82
- Option < extern "C" fn ( * mut c_void ) > ,
83
- ) ,
71
+ find_dict_drop_override : impl Copy + Fn ( & ConcreteTypeId ) -> Option < extern "C" fn ( * mut c_void ) > ,
84
72
) -> Result < ( ) > {
85
73
match ( self . value , self . info ) {
86
74
( value, CoreTypeConcrete :: Box ( info) ) => {
87
- let ptr =
88
- value. to_ptr ( self . arena , self . registry , self . type_id , find_dict_overrides) ?;
75
+ let ptr = value. to_ptr (
76
+ self . arena ,
77
+ self . registry ,
78
+ self . type_id ,
79
+ find_dict_drop_override,
80
+ ) ?;
89
81
90
82
let layout = self . registry . get_type ( & info. ty ) ?. layout ( self . registry ) ?;
91
83
let heap_ptr = unsafe {
@@ -94,17 +86,17 @@ impl AbiArgument for ValueWithInfoWrapper<'_> {
94
86
heap_ptr
95
87
} ;
96
88
97
- heap_ptr. to_bytes ( buffer, find_dict_overrides ) ?;
89
+ heap_ptr. to_bytes ( buffer, find_dict_drop_override ) ?;
98
90
}
99
91
( value, CoreTypeConcrete :: Nullable ( info) ) => {
100
92
if matches ! ( value, Value :: Null ) {
101
- null :: < ( ) > ( ) . to_bytes ( buffer, find_dict_overrides ) ?;
93
+ null :: < ( ) > ( ) . to_bytes ( buffer, find_dict_drop_override ) ?;
102
94
} else {
103
95
let ptr = value. to_ptr (
104
96
self . arena ,
105
97
self . registry ,
106
98
self . type_id ,
107
- find_dict_overrides ,
99
+ find_dict_drop_override ,
108
100
) ?;
109
101
110
102
let layout = self . registry . get_type ( & info. ty ) ?. layout ( self . registry ) ?;
@@ -114,12 +106,12 @@ impl AbiArgument for ValueWithInfoWrapper<'_> {
114
106
heap_ptr
115
107
} ;
116
108
117
- heap_ptr. to_bytes ( buffer, find_dict_overrides ) ?;
109
+ heap_ptr. to_bytes ( buffer, find_dict_drop_override ) ?;
118
110
}
119
111
}
120
112
( value, CoreTypeConcrete :: NonZero ( info) | CoreTypeConcrete :: Snapshot ( info) ) => self
121
113
. map ( value, & info. ty ) ?
122
- . to_bytes ( buffer, find_dict_overrides ) ?,
114
+ . to_bytes ( buffer, find_dict_drop_override ) ?,
123
115
124
116
( Value :: Array ( _) , CoreTypeConcrete :: Array ( _) ) => {
125
117
// TODO: Assert that `info.ty` matches all the values' types.
@@ -128,50 +120,50 @@ impl AbiArgument for ValueWithInfoWrapper<'_> {
128
120
self . arena ,
129
121
self . registry ,
130
122
self . type_id ,
131
- find_dict_overrides ,
123
+ find_dict_drop_override ,
132
124
) ?;
133
125
let abi = unsafe { abi_ptr. cast :: < ArrayAbi < ( ) > > ( ) . as_ref ( ) } ;
134
126
135
- abi. ptr . to_bytes ( buffer, find_dict_overrides ) ?;
136
- abi. since . to_bytes ( buffer, find_dict_overrides ) ?;
137
- abi. until . to_bytes ( buffer, find_dict_overrides ) ?;
138
- abi. capacity . to_bytes ( buffer, find_dict_overrides ) ?;
127
+ abi. ptr . to_bytes ( buffer, find_dict_drop_override ) ?;
128
+ abi. since . to_bytes ( buffer, find_dict_drop_override ) ?;
129
+ abi. until . to_bytes ( buffer, find_dict_drop_override ) ?;
130
+ abi. capacity . to_bytes ( buffer, find_dict_drop_override ) ?;
139
131
}
140
132
( Value :: BoundedInt { .. } , CoreTypeConcrete :: BoundedInt ( _) ) => {
141
133
native_panic ! ( "todo: implement AbiArgument for Value::BoundedInt case" )
142
134
}
143
135
( Value :: Bytes31 ( value) , CoreTypeConcrete :: Bytes31 ( _) ) => {
144
- value. to_bytes ( buffer, find_dict_overrides ) ?
136
+ value. to_bytes ( buffer, find_dict_drop_override ) ?
145
137
}
146
138
( Value :: EcPoint ( x, y) , CoreTypeConcrete :: EcPoint ( _) ) => {
147
- x. to_bytes ( buffer, find_dict_overrides ) ?;
148
- y. to_bytes ( buffer, find_dict_overrides ) ?;
139
+ x. to_bytes ( buffer, find_dict_drop_override ) ?;
140
+ y. to_bytes ( buffer, find_dict_drop_override ) ?;
149
141
}
150
142
( Value :: EcState ( x, y, x0, y0) , CoreTypeConcrete :: EcState ( _) ) => {
151
- x. to_bytes ( buffer, find_dict_overrides ) ?;
152
- y. to_bytes ( buffer, find_dict_overrides ) ?;
153
- x0. to_bytes ( buffer, find_dict_overrides ) ?;
154
- y0. to_bytes ( buffer, find_dict_overrides ) ?;
143
+ x. to_bytes ( buffer, find_dict_drop_override ) ?;
144
+ y. to_bytes ( buffer, find_dict_drop_override ) ?;
145
+ x0. to_bytes ( buffer, find_dict_drop_override ) ?;
146
+ y0. to_bytes ( buffer, find_dict_drop_override ) ?;
155
147
}
156
148
( Value :: Enum { tag, value, .. } , CoreTypeConcrete :: Enum ( info) ) => {
157
149
if self . info . is_memory_allocated ( self . registry ) ? {
158
150
let abi_ptr = self . value . to_ptr (
159
151
self . arena ,
160
152
self . registry ,
161
153
self . type_id ,
162
- find_dict_overrides ,
154
+ find_dict_drop_override ,
163
155
) ?;
164
156
165
157
let abi_ptr = unsafe { * abi_ptr. cast :: < NonNull < ( ) > > ( ) . as_ref ( ) } ;
166
- abi_ptr. as_ptr ( ) . to_bytes ( buffer, find_dict_overrides ) ?;
158
+ abi_ptr. as_ptr ( ) . to_bytes ( buffer, find_dict_drop_override ) ?;
167
159
} else {
168
160
match ( info. variants . len ( ) . next_power_of_two ( ) . trailing_zeros ( ) + 7 ) / 8 {
169
161
0 => { }
170
- _ => ( * tag as u64 ) . to_bytes ( buffer, find_dict_overrides ) ?,
162
+ _ => ( * tag as u64 ) . to_bytes ( buffer, find_dict_drop_override ) ?,
171
163
}
172
164
173
165
self . map ( value, & info. variants [ * tag] ) ?
174
- . to_bytes ( buffer, find_dict_overrides ) ?;
166
+ . to_bytes ( buffer, find_dict_drop_override ) ?;
175
167
}
176
168
}
177
169
(
@@ -183,14 +175,19 @@ impl AbiArgument for ValueWithInfoWrapper<'_> {
183
175
| StarkNetTypeConcrete :: StorageAddress ( _)
184
176
| StarkNetTypeConcrete :: StorageBaseAddress ( _) ,
185
177
) ,
186
- ) => value. to_bytes ( buffer, find_dict_overrides ) ?,
178
+ ) => value. to_bytes ( buffer, find_dict_drop_override ) ?,
187
179
( Value :: Felt252Dict { .. } , CoreTypeConcrete :: Felt252Dict ( _) ) => {
188
180
// TODO: Assert that `info.ty` matches all the values' types.
189
181
190
182
self . value
191
- . to_ptr ( self . arena , self . registry , self . type_id , find_dict_overrides) ?
183
+ . to_ptr (
184
+ self . arena ,
185
+ self . registry ,
186
+ self . type_id ,
187
+ find_dict_drop_override,
188
+ ) ?
192
189
. as_ptr ( )
193
- . to_bytes ( buffer, find_dict_overrides ) ?
190
+ . to_bytes ( buffer, find_dict_drop_override ) ?
194
191
}
195
192
(
196
193
Value :: Secp256K1Point ( Secp256k1Point { x, y, is_infinity } ) ,
@@ -204,46 +201,46 @@ impl AbiArgument for ValueWithInfoWrapper<'_> {
204
201
Secp256PointTypeConcrete :: R1 ( _) ,
205
202
) ) ,
206
203
) => {
207
- x. to_bytes ( buffer, find_dict_overrides ) ?;
208
- y. to_bytes ( buffer, find_dict_overrides ) ?;
209
- is_infinity. to_bytes ( buffer, find_dict_overrides ) ?;
204
+ x. to_bytes ( buffer, find_dict_drop_override ) ?;
205
+ y. to_bytes ( buffer, find_dict_drop_override ) ?;
206
+ is_infinity. to_bytes ( buffer, find_dict_drop_override ) ?;
210
207
}
211
208
( Value :: Sint128 ( value) , CoreTypeConcrete :: Sint128 ( _) ) => {
212
- value. to_bytes ( buffer, find_dict_overrides ) ?
209
+ value. to_bytes ( buffer, find_dict_drop_override ) ?
213
210
}
214
211
( Value :: Sint16 ( value) , CoreTypeConcrete :: Sint16 ( _) ) => {
215
- value. to_bytes ( buffer, find_dict_overrides ) ?
212
+ value. to_bytes ( buffer, find_dict_drop_override ) ?
216
213
}
217
214
( Value :: Sint32 ( value) , CoreTypeConcrete :: Sint32 ( _) ) => {
218
- value. to_bytes ( buffer, find_dict_overrides ) ?
215
+ value. to_bytes ( buffer, find_dict_drop_override ) ?
219
216
}
220
217
( Value :: Sint64 ( value) , CoreTypeConcrete :: Sint64 ( _) ) => {
221
- value. to_bytes ( buffer, find_dict_overrides ) ?
218
+ value. to_bytes ( buffer, find_dict_drop_override ) ?
222
219
}
223
220
( Value :: Sint8 ( value) , CoreTypeConcrete :: Sint8 ( _) ) => {
224
- value. to_bytes ( buffer, find_dict_overrides ) ?
221
+ value. to_bytes ( buffer, find_dict_drop_override ) ?
225
222
}
226
223
( Value :: Struct { fields, .. } , CoreTypeConcrete :: Struct ( info) ) => {
227
224
fields
228
225
. iter ( )
229
226
. zip ( & info. members )
230
227
. map ( |( value, type_id) | self . map ( value, type_id) )
231
- . try_for_each ( |wrapper| wrapper?. to_bytes ( buffer, find_dict_overrides ) ) ?;
228
+ . try_for_each ( |wrapper| wrapper?. to_bytes ( buffer, find_dict_drop_override ) ) ?;
232
229
}
233
230
( Value :: Uint128 ( value) , CoreTypeConcrete :: Uint128 ( _) ) => {
234
- value. to_bytes ( buffer, find_dict_overrides ) ?
231
+ value. to_bytes ( buffer, find_dict_drop_override ) ?
235
232
}
236
233
( Value :: Uint16 ( value) , CoreTypeConcrete :: Uint16 ( _) ) => {
237
- value. to_bytes ( buffer, find_dict_overrides ) ?
234
+ value. to_bytes ( buffer, find_dict_drop_override ) ?
238
235
}
239
236
( Value :: Uint32 ( value) , CoreTypeConcrete :: Uint32 ( _) ) => {
240
- value. to_bytes ( buffer, find_dict_overrides ) ?
237
+ value. to_bytes ( buffer, find_dict_drop_override ) ?
241
238
}
242
239
( Value :: Uint64 ( value) , CoreTypeConcrete :: Uint64 ( _) ) => {
243
- value. to_bytes ( buffer, find_dict_overrides ) ?
240
+ value. to_bytes ( buffer, find_dict_drop_override ) ?
244
241
}
245
242
( Value :: Uint8 ( value) , CoreTypeConcrete :: Uint8 ( _) ) => {
246
- value. to_bytes ( buffer, find_dict_overrides ) ?
243
+ value. to_bytes ( buffer, find_dict_drop_override ) ?
247
244
}
248
245
_ => native_panic ! (
249
246
"todo: abi argument unimplemented for ({:?}, {:?})" ,
0 commit comments