/* * vim: set ft=rust: * vim: set ft=reason: * * 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! Utils; let module F = Format; let 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: DB.source_file, /** The name of the source file */ nLOC: int /** Lines of code in the source file */ }; let compare loc1 loc2 => { let n = int_compare loc1.line loc2.line; if (n != 0) { n } else { DB.source_file_compare loc1.file loc2.file } }; /** Dump a location */ let d (loc: t) => L.add_print_action (L.PTloc, Obj.repr loc); /** Dummy location */ let dummy = {line: (-1), col: (-1), file: DB.source_file_empty, nLOC: (-1)}; let equal loc1 loc2 => compare loc1 loc2 == 0; /** Pretty print a location */ let pp f (loc: t) => F.fprintf f "[line %d]" loc.line; let to_string loc => { let s = string_of_int loc.line; if (loc.col !== (-1)) { s ^ ":" ^ string_of_int loc.col } else { s } };