@@ -853,10 +853,8 @@ def _py_vector_call(
853
853
):
854
854
if arg_values :
855
855
# Create a C array containing all arguments as boxed values.
856
- array = Register (RArray (object_rprimitive , len (arg_values )))
857
856
coerced_args = [self .coerce (arg , object_rprimitive , line ) for arg in arg_values ]
858
- self .add (AssignMulti (array , coerced_args ))
859
- arg_ptr = self .add (LoadAddress (object_pointer_rprimitive , array ))
857
+ arg_ptr = self .setup_rarray (object_rprimitive , coerced_args , object_ptr = True )
860
858
else :
861
859
arg_ptr = Integer (0 , object_pointer_rprimitive )
862
860
num_pos = num_positional_args (arg_values , arg_kinds )
@@ -930,13 +928,10 @@ def _py_vector_method_call(
930
928
not kind .is_star () and not kind .is_optional () for kind in arg_kinds
931
929
):
932
930
method_name_reg = self .load_str (method_name )
933
- array = Register (RArray (object_rprimitive , len (arg_values ) + 1 ))
934
- self_arg = self .coerce (obj , object_rprimitive , line )
935
- coerced_args = [self_arg ] + [
936
- self .coerce (arg , object_rprimitive , line ) for arg in arg_values
931
+ coerced_args = [
932
+ self .coerce (arg , object_rprimitive , line ) for arg in [obj ] + arg_values
937
933
]
938
- self .add (AssignMulti (array , coerced_args ))
939
- arg_ptr = self .add (LoadAddress (object_pointer_rprimitive , array ))
934
+ arg_ptr = self .setup_rarray (object_rprimitive , coerced_args , object_ptr = True )
940
935
num_pos = num_positional_args (arg_values , arg_kinds )
941
936
keywords = self ._vectorcall_keywords (arg_names )
942
937
value = self .call_c (
@@ -1693,11 +1688,15 @@ def new_list_op(self, values: list[Value], line: int) -> Value:
1693
1688
def new_set_op (self , values : list [Value ], line : int ) -> Value :
1694
1689
return self .call_c (new_set_op , values , line )
1695
1690
1696
- def setup_rarray (self , item_type : RType , values : Sequence [Value ]) -> Value :
1691
+ def setup_rarray (
1692
+ self , item_type : RType , values : Sequence [Value ], * , object_ptr : bool = False
1693
+ ) -> Value :
1697
1694
"""Declare and initialize a new RArray, returning its address."""
1698
1695
array = Register (RArray (item_type , len (values )))
1699
1696
self .add (AssignMulti (array , list (values )))
1700
- return self .add (LoadAddress (c_pointer_rprimitive , array ))
1697
+ return self .add (
1698
+ LoadAddress (object_pointer_rprimitive if object_ptr else c_pointer_rprimitive , array )
1699
+ )
1701
1700
1702
1701
def shortcircuit_helper (
1703
1702
self ,
0 commit comments