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
42 lines
1.2 KiB
8 years ago
|
(*
|
||
|
* 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 *)
|
||
8 years ago
|
let pp f (loc: t) =
|
||
|
F.fprintf f "line %d" loc.line ;
|
||
|
if loc.col <> -1 then F.fprintf f ", column %d" loc.col
|
||
8 years ago
|
|
||
7 years ago
|
|
||
8 years ago
|
let to_string loc =
|
||
|
let s = string_of_int loc.line in
|
||
8 years ago
|
if loc.col <> -1 then Printf.sprintf "%s:%d" s loc.col else s
|
||
8 years ago
|
|
||
7 years ago
|
|
||
8 years ago
|
(** 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
|