- fun generate_icode_for_arguments_in(v: A2IContext, args: Array[IRegister])
- do
- for a in arguments do
- args.add(v.generate_expr(a))
+ fun generate_icode_for_arguments_in(v: A2IContext, args: Array[IRegister], signature: MMSignature)
+ do
+ var par_arity = signature.arity
+ var par_vararg = signature.vararg_rank
+ var raw_args = raw_arguments
+ var raw_arity = raw_args.length
+ var arg_idx = 0
+ for par_idx in [0..par_arity[ do
+ var a: AExpr
+ var par_type = signature[par_idx]
+ if par_idx == par_vararg then
+ var arr = v.add_new_array(v.visitor.type_array(par_type), raw_arity-par_arity)
+ for i in [0..(raw_arity-par_arity)] do
+ a = raw_args[arg_idx]
+ v.add_call_array_add(arr, v.generate_expr(a))
+ arg_idx = arg_idx + 1
+ end
+ args.add(arr)
+ else
+ a = raw_args[arg_idx]
+ args.add(v.generate_expr(a))
+ arg_idx = arg_idx + 1
+ end