docs: public static boolean assignIO(Ruby runtime, Parser parser, IRubyObject[] pport) {
          boolean taint = true;
          IRubyObject tmp, port = pport[0];
          if(!(tmp = port.checkStringType()).isNil()) {
              taint = port.isTaint();
              port = tmp;
              ByteList bl = ((RubyString)port).getByteList();
              parser.str(Pointer.create(bl.bytes, bl.begin), bl.realSize, null);
          } else if(port.respondsTo("read")) {
              if(port.respondsTo("binmode")) {
                  port.callMethod(runtime.getCurrentContext(), "binmode");
              }
              parser.str(Pointer.empty(), 0, new RubyIoStrRead(port));
          } else {
              throw runtime.newTypeError("instance of IO needed");
          }
          pport[0] = port;
          return taint;
      }