///|
fn lex_object_for_xref(
  input : @pdfio.Input,
  xrefs : Map[Int, XRef],
  read_stream_data : Bool,
  objnum : Int,
) -> Array[@pdftoken.Token] raise {
  let current_pos = (input.pos_in)()
  match xrefs.get(objnum) {
    Some(Plain(offset, _gen)) => {
      (input.seek_in)(offset)
      let tokens = @pdfsyntax.lex_object_at(false, input, read_stream_data, fn(
        k : Int,
      ) -> Array[@pdftoken.Token] raise {
        lex_object_for_xref(input, xrefs, read_stream_data, k)
      })
      (input.seek_in)(current_pos)
      tokens
    }
    Some(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)
    }
  }
}