Skip to content

Commit 7b2edbd

Browse files
committed
Refactor get item
1 parent 3e1c90e commit 7b2edbd

File tree

1 file changed

+5
-9
lines changed

1 file changed

+5
-9
lines changed

mypyc/irbuild/vec.py

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)