You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

42 lines
1.2 KiB

(*
* Copyright (c) 2015 - present Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*)
open! IStd
module F = Format
module L = Logging
(** Location in the original source file *)
type t =
{ line: int (** The line number. -1 means "do not know" *)
; col: int (** The column number. -1 means "do not know" *)
; file: SourceFile.t (** The name of the source file *) }
[@@deriving compare]
let equal = [%compare.equal : t]
let none file = {line= -1; col= -1; file}
let dummy = none (SourceFile.invalid __FILE__)
(** Pretty print a location *)
let pp f (loc: t) =
F.fprintf f "line %d" loc.line ;
if loc.col <> -1 then F.fprintf f ", column %d" loc.col
let to_string loc =
let s = string_of_int loc.line in
if loc.col <> -1 then Printf.sprintf "%s:%d" s loc.col else s
(** Pretty print a file-position of a location *)
let pp_file_pos f (loc: t) =
let fname = SourceFile.to_string loc.file in
let pos = to_string loc in
F.fprintf f "%s:%s" fname pos