Skip to content

Commit c5814e5

Browse files
authored
[mypyc] Merge most generic ops (python#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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy