docs: protected void loadArguments(List<Expression> argumentList, Parameter[] para) {
          if (para.length==0) return;
          ClassNode lastParaType = para[para.length - 1].getOriginType();
          AsmClassGenerator acg = controller.getAcg();
          OperandStack operandStack = controller.getOperandStack();
          if (lastParaType.isArray()
                  && (argumentList.size()>para.length || argumentList.size()==para.length-1 || !lastIsArray(argumentList, para.length-1))) {
              int stackLen = operandStack.getStackLength()+argumentList.size();
              MethodVisitor mv = controller.getMethodVisitor();
              //mv = new org.objectweb.asm.util.TraceMethodVisitor(mv);
              controller.setMethodVisitor(mv);
              // varg call
              // first parameters as usual
              for (int i = 0; i < para.length-1; i++) {
                  argumentList.get(i).visit(acg);
                  operandStack.doGroovyCast(para[i].getType());
              }
              // last parameters wrapped in an array
              List<Expression> lastParams = new LinkedList<Expression>();
              for (int i=para.length-1; i<argumentList.size();i++) {
                  lastParams.add(argumentList.get(i));
              }
              ArrayExpression array = new ArrayExpression(
                      lastParaType.getComponentType(),
                      lastParams
              );
              array.visit(acg);
              // adjust stack length
              while (operandStack.getStackLength()<stackLen) {
                  operandStack.push(ClassHelper.OBJECT_TYPE);
              }
              if (argumentList.size()==para.length-1) {
                  operandStack.remove(1);
              }
          } else {
              for (int i = 0; i < argumentList.size(); i++) {
                  argumentList.get(i).visit(acg);
                  operandStack.doGroovyCast(para[i].getType());
              }
          }
      }