Skip to content

Commit c5814e5

Browse files
authored
[mypyc] Merge most generic ops (#9258)
This PR merges most of the remaining generic ops.
1 parent 3e77959 commit c5814e5

19 files changed

+235
-241
lines changed

mypyc/irbuild/builder.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
BasicBlock, AssignmentTarget, AssignmentTargetRegister, AssignmentTargetIndex,
3535
AssignmentTargetAttr, AssignmentTargetTuple, Environment, LoadInt, Value,
3636
Register, Op, Assign, Branch, Unreachable, TupleGet, GetAttr, SetAttr, LoadStatic,
37-
InitStatic, PrimitiveOp, OpDescription, NAMESPACE_MODULE, RaiseStandardError,
37+
InitStatic, OpDescription, NAMESPACE_MODULE, RaiseStandardError,
3838
)
3939
from mypyc.ir.rtypes import (
4040
RType, RTuple, RInstance, int_rprimitive, dict_rprimitive,
@@ -448,7 +448,7 @@ def assign(self, target: Union[Register, AssignmentTarget],
448448
else:
449449
key = self.load_static_unicode(target.attr)
450450
boxed_reg = self.builder.box(rvalue_reg)
451-
self.add(PrimitiveOp([target.obj, key, boxed_reg], py_setattr_op, line))
451+
self.call_c(py_setattr_op, [target.obj, key, boxed_reg], line)
452452
elif isinstance(target, AssignmentTargetIndex):
453453
target_reg2 = self.gen_method_call(
454454
target.base, '__setitem__', [target.index, rvalue_reg], None, line)
@@ -484,14 +484,14 @@ def process_iterator_tuple_assignment(self,
484484
rvalue_reg: Value,
485485
line: int) -> None:
486486

487-
iterator = self.primitive_op(iter_op, [rvalue_reg], line)
487+
iterator = self.call_c(iter_op, [rvalue_reg], line)
488488

489489
# This may be the whole lvalue list if there is no starred value
490490
split_idx = target.star_idx if target.star_idx is not None else len(target.items)
491491

492492
# Assign values before the first starred value
493493
for litem in target.items[:split_idx]:
494-
ritem = self.primitive_op(next_op, [iterator], line)
494+
ritem = self.call_c(next_op, [iterator], line)
495495
error_block, ok_block = BasicBlock(), BasicBlock()
496496
self.add(Branch(ritem, error_block, ok_block, Branch.IS_ERROR))
497497

@@ -532,7 +532,7 @@ def process_iterator_tuple_assignment(self,
532532
# There is no starred value, so check if there are extra values in rhs that
533533
# have not been assigned.
534534
else:
535-
extra = self.primitive_op(next_op, [iterator], line)
535+
extra = self.call_c(next_op, [iterator], line)
536536
error_block, ok_block = BasicBlock(), BasicBlock()
537537
self.add(Branch(extra, ok_block, error_block, Branch.IS_ERROR))
538538

mypyc/irbuild/classdef.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ def transform_class_def(builder: IRBuilder, cdef: ClassDef) -> None:
124124
continue
125125
typ = builder.load_native_type_object(cdef.fullname)
126126
value = builder.accept(stmt.rvalue)
127-
builder.primitive_op(
127+
builder.call_c(
128128
py_setattr_op, [typ, builder.load_static_unicode(lvalue.name), value], stmt.line)
129129
if builder.non_function_scope() and stmt.is_final_def:
130130
builder.init_final_static(lvalue, value, cdef.name)
@@ -182,7 +182,7 @@ def allocate_class(builder: IRBuilder, cdef: ClassDef) -> Value:
182182
None, builder.module_name,
183183
FuncSignature([], bool_rprimitive)), [], -1))
184184
# Populate a '__mypyc_attrs__' field containing the list of attrs
185-
builder.primitive_op(py_setattr_op, [
185+
builder.call_c(py_setattr_op, [
186186
tp, builder.load_static_unicode('__mypyc_attrs__'),
187187
create_mypyc_attrs_tuple(builder, builder.mapper.type_to_ir[cdef.info], cdef.line)],
188188
cdef.line)
@@ -241,9 +241,9 @@ def setup_non_ext_dict(builder: IRBuilder,
241241
This class dictionary is passed to the metaclass constructor.
242242
"""
243243
# Check if the metaclass defines a __prepare__ method, and if so, call it.
244-
has_prepare = builder.primitive_op(py_hasattr_op,
245-
[metaclass,
246-
builder.load_static_unicode('__prepare__')], cdef.line)
244+
has_prepare = builder.call_c(py_hasattr_op,
245+
[metaclass,
246+
builder.load_static_unicode('__prepare__')], cdef.line)
247247

248248
non_ext_dict = builder.alloc_temp(dict_rprimitive)
249249

mypyc/irbuild/expression.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -575,6 +575,6 @@ def get_arg(arg: Optional[Expression]) -> Value:
575575

576576
def transform_generator_expr(builder: IRBuilder, o: GeneratorExpr) -> Value:
577577
builder.warning('Treating generator comprehension as list', o.line)
578-
return builder.primitive_op(
578+
return builder.call_c(
579579
iter_op, [translate_list_comprehension(builder, o)], o.line
580580
)

mypyc/irbuild/for_helpers.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ def init(self, expr_reg: Value, target_type: RType) -> None:
352352
# for the for-loop. If we are inside of a generator function, spill these into the
353353
# environment class.
354354
builder = self.builder
355-
iter_reg = builder.primitive_op(iter_op, [expr_reg], self.line)
355+
iter_reg = builder.call_c(iter_op, [expr_reg], self.line)
356356
builder.maybe_spill(expr_reg)
357357
self.iter_target = builder.maybe_spill(iter_reg)
358358
self.target_type = target_type
@@ -364,7 +364,7 @@ def gen_condition(self) -> None:
364364
# for NULL (an exception does not necessarily have to be raised).
365365
builder = self.builder
366366
line = self.line
367-
self.next_reg = builder.primitive_op(next_op, [builder.read(self.iter_target, line)], line)
367+
self.next_reg = builder.call_c(next_op, [builder.read(self.iter_target, line)], line)
368368
builder.add(Branch(self.next_reg, self.loop_exit, self.body_block, Branch.IS_ERROR))
369369

370370
def begin_body(self) -> None:

mypyc/irbuild/function.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -350,13 +350,13 @@ def handle_ext_method(builder: IRBuilder, cdef: ClassDef, fdef: FuncDef) -> None
350350

351351
# Set the callable object representing the decorated method as an attribute of the
352352
# extension class.
353-
builder.primitive_op(py_setattr_op,
354-
[
355-
typ,
356-
builder.load_static_unicode(name),
357-
decorated_func
358-
],
359-
fdef.line)
353+
builder.call_c(py_setattr_op,
354+
[
355+
typ,
356+
builder.load_static_unicode(name),
357+
decorated_func
358+
],
359+
fdef.line)
360360

361361
if fdef.is_property:
362362
# If there is a property setter, it will be processed after the getter,
@@ -491,14 +491,14 @@ def handle_yield_from_and_await(builder: IRBuilder, o: Union[YieldFromExpr, Awai
491491
received_reg = builder.alloc_temp(object_rprimitive)
492492

493493
if isinstance(o, YieldFromExpr):
494-
iter_val = builder.primitive_op(iter_op, [builder.accept(o.expr)], o.line)
494+
iter_val = builder.call_c(iter_op, [builder.accept(o.expr)], o.line)
495495
else:
496496
iter_val = builder.call_c(coro_op, [builder.accept(o.expr)], o.line)
497497

498498
iter_reg = builder.maybe_spill_assignable(iter_val)
499499

500500
stop_block, main_block, done_block = BasicBlock(), BasicBlock(), BasicBlock()
501-
_y_init = builder.primitive_op(next_raw_op, [builder.read(iter_reg)], o.line)
501+
_y_init = builder.call_c(next_raw_op, [builder.read(iter_reg)], o.line)
502502
builder.add(Branch(_y_init, stop_block, main_block, Branch.IS_ERROR))
503503

504504
# Try extracting a return value from a StopIteration and return it.

mypyc/irbuild/ll_builder.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ def py_get_attr(self, obj: Value, attr: str, line: int) -> Value:
186186
Prefer get_attr() which generates optimized code for native classes.
187187
"""
188188
key = self.load_static_unicode(attr)
189-
return self.add(PrimitiveOp([obj, key], py_getattr_op, line))
189+
return self.call_c(py_getattr_op, [obj, key], line)
190190

191191
# isinstance() checks
192192

mypyc/irbuild/statement.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
from mypyc.ir.ops import (
1919
Assign, Unreachable, AssignmentTarget, AssignmentTargetRegister, AssignmentTargetIndex,
20-
AssignmentTargetAttr, AssignmentTargetTuple, PrimitiveOp, RaiseStandardError, LoadErrorValue,
20+
AssignmentTargetAttr, AssignmentTargetTuple, RaiseStandardError, LoadErrorValue,
2121
BasicBlock, TupleGet, Value, Register, Branch, NO_TRACEBACK_LINE_NO
2222
)
2323
from mypyc.ir.rtypes import exc_rtuple
@@ -634,7 +634,7 @@ def transform_del_item(builder: IRBuilder, target: AssignmentTarget, line: int)
634634
)
635635
elif isinstance(target, AssignmentTargetAttr):
636636
key = builder.load_static_unicode(target.attr)
637-
builder.add(PrimitiveOp([target.obj, key], py_delattr_op, line))
637+
builder.call_c(py_delattr_op, [target.obj, key], line)
638638
elif isinstance(target, AssignmentTargetRegister):
639639
# Delete a local by assigning an error value to it, which will
640640
# prompt the insertion of uninit checks.

0 commit comments

Comments
 (0)