@@ -282,26 +282,22 @@ def vec_get_item(
282282
283283 We inline this, since it's simple but performance-critical.
284284 """
285- assert isinstance (base .type , RVec )
286- vtype = base .type
287285 # TODO: Support more item types
288286 # TODO: Support more index types
289287 len_val = vec_len (builder , base )
290288 index = vec_check_and_adjust_index (builder , len_val , index , line )
291- index = builder .coerce (index , c_pyssize_t_rprimitive , line )
292- item_addr = vec_item_ptr (builder , base , index )
293- result = builder .load_mem (item_addr , vtype .item_type , borrow = can_borrow )
294- builder .keep_alives .append (base )
295- return result
289+ return vec_get_item_unsafe (builder , base , index , line , can_borrow = can_borrow )
296290
297291
298- def vec_get_item_unsafe (builder : LowLevelIRBuilder , base : Value , index : Value , line : int ) -> Value :
292+ def vec_get_item_unsafe (
293+ builder : LowLevelIRBuilder , base : Value , index : Value , line : int , * , can_borrow : bool = False
294+ ) -> Value :
299295 """Get vec item, assuming index is non-negative and within bounds."""
300296 assert isinstance (base .type , RVec )
301297 index = as_platform_int (builder , index , line )
302298 vtype = base .type
303299 item_addr = vec_item_ptr (builder , base , index )
304- result = builder .load_mem (item_addr , vtype .item_type )
300+ result = builder .load_mem (item_addr , vtype .item_type , borrow = can_borrow )
305301 builder .keep_alive ([base ], line )
306302 return result
307303
0 commit comments