@@ -117,6 +117,7 @@ def __init__(self, key_typ, val_typ):
117117 'DictKeyIteratorType{}{}' .format (key_typ , val_typ ))
118118
119119dict_key_iterator_int_int_type = DictKeyIteratorType (types .intp , types .intp )
120+ dict_key_iterator_int32_int32_type = DictKeyIteratorType (types .int32 , types .int32 )
120121
121122register_model (DictKeyIteratorType )(models .OpaqueModel )
122123
@@ -139,6 +140,19 @@ def generic(self, args, kws):
139140ll .add_symbol ('dict_int_int_max' , hdict_ext .dict_int_int_max )
140141ll .add_symbol ('dict_int_int_not_empty' , hdict_ext .dict_int_int_not_empty )
141142
143+ # int32 versions
144+ ll .add_symbol ('init_dict_int32_int32' , hdict_ext .init_dict_int32_int32 )
145+ ll .add_symbol ('dict_int32_int32_setitem' , hdict_ext .dict_int32_int32_setitem )
146+ ll .add_symbol ('dict_int32_int32_print' , hdict_ext .dict_int32_int32_print )
147+ ll .add_symbol ('dict_int32_int32_get' , hdict_ext .dict_int32_int32_get )
148+ ll .add_symbol ('dict_int32_int32_getitem' , hdict_ext .dict_int32_int32_getitem )
149+ ll .add_symbol ('dict_int32_int32_pop' , hdict_ext .dict_int32_int32_pop )
150+ ll .add_symbol ('dict_int32_int32_keys' , hdict_ext .dict_int32_int32_keys )
151+ ll .add_symbol ('dict_int32_int32_min' , hdict_ext .dict_int32_int32_min )
152+ ll .add_symbol ('dict_int32_int32_max' , hdict_ext .dict_int32_int32_max )
153+ ll .add_symbol ('dict_int32_int32_not_empty' , hdict_ext .dict_int32_int32_not_empty )
154+
155+
142156@lower_builtin (DictIntInt )
143157def impl_dict_int_int (context , builder , sig , args ):
144158 fnty = lir .FunctionType (lir .IntType (8 ).as_pointer (), [])
@@ -151,7 +165,7 @@ def setitem_dict(context, builder, sig, args):
151165 fn = builder .module .get_or_insert_function (fnty , name = "dict_int_int_setitem" )
152166 return builder .call (fn , args )
153167
154- @lower_builtin ("print_item" , DictType )
168+ @lower_builtin ("print_item" , dict_int_int_type )
155169def print_dict (context , builder , sig , args ):
156170 # pyapi = context.get_python_api(builder)
157171 # strobj = pyapi.unserialize(pyapi.serialize_object("hello!"))
@@ -180,26 +194,93 @@ def lower_dict_pop(context, builder, sig, args):
180194 fn = builder .module .get_or_insert_function (fnty , name = "dict_int_int_pop" )
181195 return builder .call (fn , args )
182196
183- @lower_builtin ("dict.keys" , DictType )
197+ @lower_builtin ("dict.keys" , dict_int_int_type )
184198def lower_dict_keys (context , builder , sig , args ):
185199 fnty = lir .FunctionType (lir .IntType (8 ).as_pointer (), [lir .IntType (8 ).as_pointer ()])
186200 fn = builder .module .get_or_insert_function (fnty , name = "dict_int_int_keys" )
187201 return builder .call (fn , args )
188202
189- @lower_builtin (min , DictKeyIteratorType )
203+ @lower_builtin (min , dict_key_iterator_int_int_type )
190204def lower_dict_min (context , builder , sig , args ):
191205 fnty = lir .FunctionType (lir .IntType (64 ), [lir .IntType (8 ).as_pointer ()])
192206 fn = builder .module .get_or_insert_function (fnty , name = "dict_int_int_min" )
193207 return builder .call (fn , args )
194208
195- @lower_builtin (max , DictKeyIteratorType )
209+ @lower_builtin (max , dict_key_iterator_int_int_type )
196210def lower_dict_max (context , builder , sig , args ):
197211 fnty = lir .FunctionType (lir .IntType (64 ), [lir .IntType (8 ).as_pointer ()])
198212 fn = builder .module .get_or_insert_function (fnty , name = "dict_int_int_max" )
199213 return builder .call (fn , args )
200214
201- @lower_cast (DictType , types .boolean )
215+ @lower_cast (dict_int_int_type , types .boolean )
202216def dict_empty (context , builder , fromty , toty , val ):
203217 fnty = lir .FunctionType (lir .IntType (1 ), [lir .IntType (8 ).as_pointer ()])
204218 fn = builder .module .get_or_insert_function (fnty , name = "dict_int_int_not_empty" )
205219 return builder .call (fn , (val ,))
220+
221+
222+ # ------ int32 versions ------
223+ @lower_builtin (DictInt32Int32 )
224+ def impl_dict_int_int (context , builder , sig , args ):
225+ fnty = lir .FunctionType (lir .IntType (8 ).as_pointer (), [])
226+ fn = builder .module .get_or_insert_function (fnty , name = "init_dict_int32_int32" )
227+ return builder .call (fn , [])
228+
229+ @lower_builtin ('setitem' , DictType , types .int32 , types .int32 )
230+ def setitem_dict (context , builder , sig , args ):
231+ fnty = lir .FunctionType (lir .VoidType (), [lir .IntType (8 ).as_pointer (), lir .IntType (32 ), lir .IntType (32 )])
232+ fn = builder .module .get_or_insert_function (fnty , name = "dict_int32_int32_setitem" )
233+ return builder .call (fn , args )
234+
235+ @lower_builtin ("print_item" , dict_int32_int32_type )
236+ def print_dict (context , builder , sig , args ):
237+ # pyapi = context.get_python_api(builder)
238+ # strobj = pyapi.unserialize(pyapi.serialize_object("hello!"))
239+ # pyapi.print_object(strobj)
240+ # pyapi.decref(strobj)
241+ # return context.get_dummy_value()
242+ fnty = lir .FunctionType (lir .VoidType (), [lir .IntType (8 ).as_pointer ()])
243+ fn = builder .module .get_or_insert_function (fnty , name = "dict_int32_int32_print" )
244+ return builder .call (fn , args )
245+
246+ @lower_builtin ("dict.get" , DictType , types .int32 , types .int32 )
247+ def lower_dict_get (context , builder , sig , args ):
248+ fnty = lir .FunctionType (lir .IntType (32 ), [lir .IntType (8 ).as_pointer (), lir .IntType (32 ), lir .IntType (32 )])
249+ fn = builder .module .get_or_insert_function (fnty , name = "dict_int32_int32_get" )
250+ return builder .call (fn , args )
251+
252+ @lower_builtin ("getitem" , DictType , types .int32 )
253+ def lower_dict_getitem (context , builder , sig , args ):
254+ fnty = lir .FunctionType (lir .IntType (32 ), [lir .IntType (8 ).as_pointer (), lir .IntType (32 )])
255+ fn = builder .module .get_or_insert_function (fnty , name = "dict_int32_int32_getitem" )
256+ return builder .call (fn , args )
257+
258+ @lower_builtin ("dict.pop" , DictType , types .int32 )
259+ def lower_dict_pop (context , builder , sig , args ):
260+ fnty = lir .FunctionType (lir .IntType (32 ), [lir .IntType (8 ).as_pointer (), lir .IntType (32 )])
261+ fn = builder .module .get_or_insert_function (fnty , name = "dict_int32_int32_pop" )
262+ return builder .call (fn , args )
263+
264+ @lower_builtin ("dict.keys" , dict_int32_int32_type )
265+ def lower_dict_keys (context , builder , sig , args ):
266+ fnty = lir .FunctionType (lir .IntType (8 ).as_pointer (), [lir .IntType (8 ).as_pointer ()])
267+ fn = builder .module .get_or_insert_function (fnty , name = "dict_int32_int32_keys" )
268+ return builder .call (fn , args )
269+
270+ @lower_builtin (min , dict_key_iterator_int32_int32_type )
271+ def lower_dict_min (context , builder , sig , args ):
272+ fnty = lir .FunctionType (lir .IntType (32 ), [lir .IntType (8 ).as_pointer ()])
273+ fn = builder .module .get_or_insert_function (fnty , name = "dict_int32_int32_min" )
274+ return builder .call (fn , args )
275+
276+ @lower_builtin (max , dict_key_iterator_int32_int32_type )
277+ def lower_dict_max (context , builder , sig , args ):
278+ fnty = lir .FunctionType (lir .IntType (32 ), [lir .IntType (8 ).as_pointer ()])
279+ fn = builder .module .get_or_insert_function (fnty , name = "dict_int32_int32_max" )
280+ return builder .call (fn , args )
281+
282+ @lower_cast (dict_int32_int32_type , types .boolean )
283+ def dict_empty (context , builder , fromty , toty , val ):
284+ fnty = lir .FunctionType (lir .IntType (1 ), [lir .IntType (8 ).as_pointer ()])
285+ fn = builder .module .get_or_insert_function (fnty , name = "dict_int32_int32_not_empty" )
286+ return builder .call (fn , (val ,))
0 commit comments