2020-05-25 18:48:02 +03:00
|
|
|
(* This file is part of the Catala compiler, a specification language for tax and social benefits
|
|
|
|
computation rules. Copyright (C) 2020 Inria, contributor: Denis Merigoux
|
|
|
|
<denis.merigoux@inria.fr>
|
|
|
|
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
|
|
|
in compliance with the License. You may obtain a copy of the License at
|
|
|
|
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
|
|
|
|
Unless required by applicable law or agreed to in writing, software distributed under the License
|
|
|
|
is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
|
|
|
or implied. See the License for the specific language governing permissions and limitations under
|
|
|
|
the License. *)
|
|
|
|
|
|
|
|
(** Source code position *)
|
|
|
|
|
2022-02-04 17:29:31 +03:00
|
|
|
type t [@@deriving show]
|
2020-05-25 18:48:02 +03:00
|
|
|
(** A position in the source code is a file, as well as begin and end location of the form col:line *)
|
|
|
|
|
2021-01-20 17:37:20 +03:00
|
|
|
(** Custom visitor for the [Pos.marked] type *)
|
|
|
|
|
2020-05-25 18:48:02 +03:00
|
|
|
(**{2 Constructor and getters}*)
|
|
|
|
|
2021-01-20 17:37:20 +03:00
|
|
|
val from_lpos : Lexing.position * Lexing.position -> t
|
|
|
|
|
2020-05-25 18:48:02 +03:00
|
|
|
val from_info : string -> int -> int -> int -> int -> t
|
|
|
|
|
2021-01-20 21:19:17 +03:00
|
|
|
val overwrite_law_info : t -> string list -> t
|
|
|
|
|
2021-04-03 18:58:31 +03:00
|
|
|
val get_law_info : t -> string list
|
|
|
|
|
2020-05-25 18:48:02 +03:00
|
|
|
val get_start_line : t -> int
|
|
|
|
|
|
|
|
val get_start_column : t -> int
|
|
|
|
|
|
|
|
val get_end_line : t -> int
|
|
|
|
|
|
|
|
val get_end_column : t -> int
|
|
|
|
|
|
|
|
val get_file : t -> string
|
|
|
|
|
2020-12-26 19:37:41 +03:00
|
|
|
type input_file = FileName of string | Contents of string
|
|
|
|
|
2020-05-25 18:48:02 +03:00
|
|
|
(**{2 Formatters}*)
|
|
|
|
|
|
|
|
val to_string : t -> string
|
|
|
|
(** Formats a position like this:
|
|
|
|
|
|
|
|
{v in file <file>, from <start_line>:<start_col> to <end_line>:<end_col> v} *)
|
|
|
|
|
|
|
|
val to_string_short : t -> string
|
|
|
|
(** Formats a position like this:
|
|
|
|
|
|
|
|
{v <file>;<start_line>:<start_col>--<end_line>:<end_col> v} *)
|
|
|
|
|
|
|
|
val retrieve_loc_text : t -> string
|
|
|
|
(** Open the file corresponding to the position and retrieves the text concerned by the position *)
|
|
|
|
|
|
|
|
(**{2 AST markings}*)
|
|
|
|
|
2022-02-04 17:29:31 +03:00
|
|
|
type 'a marked = 'a * t [@@deriving show]
|
2020-05-25 18:48:02 +03:00
|
|
|
(** Everything related to the source code should keep its position stored, to improve error messages *)
|
|
|
|
|
|
|
|
val no_pos : t
|
|
|
|
(** Placeholder position *)
|
|
|
|
|
2021-11-30 18:27:47 +03:00
|
|
|
val mark : t -> 'a -> 'a marked
|
2021-11-25 19:26:13 +03:00
|
|
|
|
2020-05-25 18:48:02 +03:00
|
|
|
val unmark : 'a marked -> 'a
|
|
|
|
|
|
|
|
val get_position : 'a marked -> t
|
|
|
|
|
|
|
|
val map_under_mark : ('a -> 'b) -> 'a marked -> 'b marked
|
|
|
|
|
|
|
|
val same_pos_as : 'a -> 'b marked -> 'a marked
|
|
|
|
|
|
|
|
val unmark_option : 'a marked option -> 'a option
|
2021-01-20 18:06:04 +03:00
|
|
|
|
|
|
|
(** Visitors *)
|
|
|
|
|
|
|
|
class ['self] marked_map :
|
|
|
|
object ('self)
|
|
|
|
constraint
|
2021-01-20 21:19:17 +03:00
|
|
|
'self = < visit_marked : 'a. ('env -> 'a -> 'a) -> 'env -> 'a marked -> 'a marked ; .. >
|
2021-01-20 18:06:04 +03:00
|
|
|
|
2021-01-20 21:19:17 +03:00
|
|
|
method visit_marked : 'a. ('env -> 'a -> 'a) -> 'env -> 'a marked -> 'a marked
|
2021-01-20 18:06:04 +03:00
|
|
|
end
|
2021-01-21 02:14:23 +03:00
|
|
|
|
|
|
|
class ['self] marked_iter :
|
|
|
|
object ('self)
|
|
|
|
constraint 'self = < visit_marked : 'a. ('env -> 'a -> unit) -> 'env -> 'a marked -> unit ; .. >
|
|
|
|
|
|
|
|
method visit_marked : 'a. ('env -> 'a -> unit) -> 'env -> 'a marked -> unit
|
|
|
|
end
|