@@ -286,6 +286,9 @@ def goto_and_activate(self, block: BasicBlock) -> None:
286286 def keep_alive (self , values : list [Value ], * , steal : bool = False ) -> None :
287287 self .add (KeepAlive (values , steal = steal ))
288288
289+ def load_mem (self , ptr : Value , value_type : RType , * , borrow : bool = False ) -> Value :
290+ return self .add (LoadMem (value_type , ptr , borrow = borrow ))
291+
289292 def push_error_handler (self , handler : BasicBlock | None ) -> None :
290293 self .error_handlers .append (handler )
291294
@@ -660,7 +663,7 @@ def other() -> Value:
660663
661664 def get_type_of_obj (self , obj : Value , line : int ) -> Value :
662665 ob_type_address = self .add (GetElementPtr (obj , PyObject , "ob_type" , line ))
663- ob_type = self .add ( LoadMem ( object_rprimitive , ob_type_address ) )
666+ ob_type = self .load_mem ( ob_type_address , object_rprimitive , borrow = True )
664667 self .add (KeepAlive ([obj ]))
665668 return ob_type
666669
@@ -2261,7 +2264,7 @@ def builtin_len(self, val: Value, line: int, use_pyssize_t: bool = False) -> Val
22612264 size_value = self .primitive_op (var_object_size , [val ], line )
22622265 elif is_set_rprimitive (typ ) or is_frozenset_rprimitive (typ ):
22632266 elem_address = self .add (GetElementPtr (val , PySetObject , "used" ))
2264- size_value = self .add ( LoadMem ( c_pyssize_t_rprimitive , elem_address ) )
2267+ size_value = self .load_mem ( elem_address , c_pyssize_t_rprimitive )
22652268 self .add (KeepAlive ([val ]))
22662269 elif is_dict_rprimitive (typ ):
22672270 size_value = self .call_c (dict_ssize_t_size_op , [val ], line )
0 commit comments