open Core.Std

type t = {
  source : string option;
  line : int option;
  offset : int option
}
with sexp

let make ?source ?line ?offset () = {source; line; offset}
let unknown = {source=None; line=None; offset=None}

let incr_line ?(n=1) t =
  let prev = match t.line with None -> 0 | Some x -> x in
  {t with line = Some (prev + n)}

let to_string t =
  sexp_of_t t |> Sexp.to_string_hum