@@ -1238,8 +1238,9 @@ def gen_method_call(
12381238 if isinstance (base .type , RInstance ):
12391239 name = name if base .type .class_ir .is_ext_class else fast_name
12401240
1241- def build_args () -> list [Value ]:
1242- decl = base .type .class_ir .method_decl (name )
1241+ def build_args (typ : RInstance ) -> list [Value ]:
1242+ nonlocal arg_kinds , arg_names
1243+ decl = typ .class_ir .method_decl (name )
12431244 if arg_kinds is None :
12441245 assert arg_names is None , "arg_kinds not present but arg_names is"
12451246 arg_kinds = [ARG_POS for _ in arg_values ]
@@ -1257,7 +1258,7 @@ def build_args() -> list[Value]:
12571258 base .type .class_ir .is_ext_class or base .type .class_ir .has_method (fast_name )
12581259 ) and not base .type .class_ir .builtin_base :
12591260 if base .type .class_ir .has_method (name ):
1260- arg_values = build_args ()
1261+ arg_values = build_args (base . type )
12611262 return self .add (MethodCall (base , name , arg_values , line ))
12621263 elif base .type .class_ir .has_attr (name ):
12631264 function = self .add (GetAttr (base , name , line ))
@@ -1268,7 +1269,7 @@ def build_args() -> list[Value]:
12681269 # does this really work tho? must check more. why wasnt this done before? what do all the if checks do above?
12691270 decl = base .type .class_ir .method_decl (name )
12701271 # should this be a MethodCall?
1271- arg_values = build_args ()
1272+ arg_values = build_args (base . type )
12721273 return self .call (decl , arg_values , [ARG_POS ] * len (arg_values ), [None ], line )
12731274
12741275 elif isinstance (base .type , RUnion ):
0 commit comments