code: private void dupStackElementBeforeSignatureArgs(final String sig) {
      final Label beginScopeLabel = new Label();
      final Label endScopeLabel = new Label();
      super.visitLabel(beginScopeLabel);
  
      Type[] argTypes = Type.getArgumentTypes(sig);
      int[] args = new int[argTypes.length];
  
      for (int i = argTypes.length - 1; i >= 0; --i) {
        args[i] = newLocal(argTypes[i], beginScopeLabel, endScopeLabel);
        super.visitVarInsn(argTypes[i].getOpcode(Opcodes.ISTORE), args[i]);
      }
      super.visitInsn(Opcodes.DUP);
      for (int i = 0; i < argTypes.length; ++i) {
        int op = argTypes[i].getOpcode(Opcodes.ILOAD);
        super.visitVarInsn(op, args[i]);
        if (op == Opcodes.ALOAD) {
          super.visitInsn(Opcodes.ACONST_NULL);
          super.visitVarInsn(Opcodes.ASTORE, args[i]);
        }
      }
      super.visitLabel(endScopeLabel);
    }
docs: stack.