docs: public void swap() {
          MethodVisitor mv = controller.getMethodVisitor();
          int size = stack.size();
          ClassNode b = stack.get(size-1);
          ClassNode a = stack.get(size-2);
          //        dup_x1:     --- 
          //        dup_x2:     aab  -> baab
          //        dup2_x1:    abb  -> bbabb
          //        dup2_x2:    aabb -> bbaabb
          //        b = top element, a = element under b
          //        top element at right
          if (isTwoSlotType(a)) { // aa
              if (isTwoSlotType(b)) { // aabb
                  // aabb -> bbaa
                  mv.visitInsn(DUP2_X2);   // bbaabb
                  mv.visitInsn(POP2);      // bbaa
              } else {
                  // aab -> baa
                  mv.visitInsn(DUP_X2);   // baab
                  mv.visitInsn(POP);      // baa
              }
          } else { // a
              if (isTwoSlotType(b)) { //abb
                  // abb -> bba
                  mv.visitInsn(DUP2_X1);   // bbabb
                  mv.visitInsn(POP2);      // bba
              } else {
                  // ab -> ba
                  mv.visitInsn(SWAP);
              }
          }
          stack.set(size-1,a);
          stack.set(size-2,b);
      }