///|
fn lex_object_for_xref(
  input : @pdfio.Input,
  xrefs : Map[Int, XRef],
  read_stream_data : Bool,
  objnum : Int,
) -> Array[@pdfgenlex.Token] raise {
  let current_pos = (input.pos_in)()
  match xrefs.get(objnum) {
    Some(XRef::Plain(offset, _gen)) => {
      (input.seek_in)(offset)
      let tokens = @pdfsyntax.PdfSyntax::new().lex_object_at(
        false,
        input,
        read_stream_data,
        fn(k : Int) -> Array[@pdfgenlex.Token] raise {
          lex_object_for_xref(input, xrefs, read_stream_data, k)
        },
      )
      (input.seek_in)(current_pos)
      tokens
    }
    Some(XRef::Stream(_, _)) => {
      let message = @pdf.input_pdferror(input, "Object in object stream")
      raise @pdf.PdfError::Msg(message)
    }
    None => {
      let message = @pdf.input_pdferror(input, "Object not in xref table")
      raise @pdf.PdfError::Msg(message)
    }
  }
}