docs: @JRubyMethod(frame=true)
      public static IRubyObject load_documents(IRubyObject self, IRubyObject port, Block proc) {
          Ruby runtime = self.getRuntime();
          ThreadContext ctx = runtime.getCurrentContext();
  
          IRubyObject input = ((RubyHash)self.callMethod(ctx, "options")).op_aref(ctx, runtime.newSymbol("input"));
          IRubyObject model = ((RubyHash)self.callMethod(ctx, "options")).op_aref(ctx, runtime.newSymbol("Model"));
  
          Parser parser = (Parser)self.dataGetStructChecked();
          setModel(self, input, model);
  
          Extra bonus = (Extra)parser.bonus;
          bonus.taint = assignIO(runtime, parser, new IRubyObject[]{port});
          parser.setRootOnError(runtime.getNil());
          bonus.resolver = self.callMethod(ctx, "resolver");
          bonus.proc = null;
  
          while(true) {
              bonus.data = RubyHash.newHash(runtime);
              IRubyObject v = (IRubyObject)parser.parse();
              if(parser.eof) {
                  return runtime.getNil();
              }
  
              if(v == null) {
                  v = runtime.getFalse();
              }
              
              proc.yield(ctx, v);
          }
      }