1313)
1414from mypyc .ir .ops import (
1515 Value , BasicBlock , LoadInt , Branch , Register , AssignmentTarget , TupleGet ,
16- AssignmentTargetTuple , TupleSet , OpDescription , BinaryIntOp
16+ AssignmentTargetTuple , TupleSet , BinaryIntOp
1717)
1818from mypyc .ir .rtypes import (
1919 RType , is_short_int_rprimitive , is_list_rprimitive , is_sequence_rprimitive ,
2020 RTuple , is_dict_rprimitive , short_int_rprimitive
2121)
22+ from mypyc .primitives .registry import CFunctionDescription
2223from mypyc .primitives .dict_ops import (
2324 dict_next_key_op , dict_next_value_op , dict_next_item_op , dict_check_size_op ,
2425 dict_key_iter_op , dict_value_iter_op , dict_item_iter_op
@@ -92,7 +93,7 @@ def translate_list_comprehension(builder: IRBuilder, gen: GeneratorExpr) -> Valu
9293
9394 def gen_inner_stmts () -> None :
9495 e = builder .accept (gen .left_expr )
95- builder .primitive_op (list_append_op , [list_ops , e ], gen .line )
96+ builder .call_c (list_append_op , [list_ops , e ], gen .line )
9697
9798 comprehension_helper (builder , loop_params , gen_inner_stmts , gen .line )
9899 return list_ops
@@ -485,8 +486,8 @@ class ForDictionaryCommon(ForGenerator):
485486 since they may override some iteration methods in subtly incompatible manner.
486487 The fallback logic is implemented in CPy.h via dynamic type check.
487488 """
488- dict_next_op = None # type: ClassVar[OpDescription ]
489- dict_iter_op = None # type: ClassVar[OpDescription ]
489+ dict_next_op = None # type: ClassVar[CFunctionDescription ]
490+ dict_iter_op = None # type: ClassVar[CFunctionDescription ]
490491
491492 def need_cleanup (self ) -> bool :
492493 # Technically, a dict subclass can raise an unrelated exception
@@ -504,14 +505,14 @@ def init(self, expr_reg: Value, target_type: RType) -> None:
504505 self .size = builder .maybe_spill (self .load_len (self .expr_target ))
505506
506507 # For dict class (not a subclass) this is the dictionary itself.
507- iter_reg = builder .primitive_op (self .dict_iter_op , [expr_reg ], self .line )
508+ iter_reg = builder .call_c (self .dict_iter_op , [expr_reg ], self .line )
508509 self .iter_target = builder .maybe_spill (iter_reg )
509510
510511 def gen_condition (self ) -> None :
511512 """Get next key/value pair, set new offset, and check if we should continue."""
512513 builder = self .builder
513514 line = self .line
514- self .next_tuple = self .builder .primitive_op (
515+ self .next_tuple = self .builder .call_c (
515516 self .dict_next_op , [builder .read (self .iter_target , line ),
516517 builder .read (self .offset_target , line )], line )
517518
@@ -532,9 +533,9 @@ def gen_step(self) -> None:
532533 builder = self .builder
533534 line = self .line
534535 # Technically, we don't need a new primitive for this, but it is simpler.
535- builder .primitive_op (dict_check_size_op ,
536- [builder .read (self .expr_target , line ),
537- builder .read (self .size , line )], line )
536+ builder .call_c (dict_check_size_op ,
537+ [builder .read (self .expr_target , line ),
538+ builder .read (self .size , line )], line )
538539
539540 def gen_cleanup (self ) -> None :
540541 # Same as for generic ForIterable.
0 commit comments