61 lines
2.4 KiB
OCaml
61 lines
2.4 KiB
OCaml
(**************************************************************************)
|
|
(* *)
|
|
(* OCaml *)
|
|
(* *)
|
|
(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *)
|
|
(* *)
|
|
(* Copyright 1996 Institut National de Recherche en Informatique et *)
|
|
(* en Automatique. *)
|
|
(* *)
|
|
(* All rights reserved. This file is distributed under the terms of *)
|
|
(* the GNU Lesser General Public License version 2.1, with the *)
|
|
(* special exception on linking described in the file LICENSE. *)
|
|
(* *)
|
|
(**************************************************************************)
|
|
|
|
(** Long identifiers, used in parsetree.
|
|
|
|
{b Warning:} this module is unstable and part of
|
|
{{!Compiler_libs}compiler-libs}.
|
|
|
|
*)
|
|
|
|
type t =
|
|
Lident of string
|
|
| Ldot of t * string
|
|
| Lapply of t * t
|
|
|
|
val flatten: t -> string list
|
|
val unflatten: string list -> t option
|
|
(** For a non-empty list [l], [unflatten l] is [Some lid] where [lid] is
|
|
the long identifier created by concatenating the elements of [l]
|
|
with [Ldot].
|
|
[unflatten []] is [None].
|
|
*)
|
|
|
|
val last: t -> string
|
|
val parse: string -> t
|
|
[@@deprecated "this function may misparse its input,\n\
|
|
use \"Parse.longident\" or \"Longident.unflatten\""]
|
|
(**
|
|
|
|
This function is broken on identifiers that are not just "Word.Word.word";
|
|
for example, it returns incorrect results on infix operators
|
|
and extended module paths.
|
|
|
|
If you want to generate long identifiers that are a list of
|
|
dot-separated identifiers, the function {!unflatten} is safer and faster.
|
|
{!unflatten} is available since OCaml 4.06.0.
|
|
|
|
If you want to parse any identifier correctly, use the long-identifiers
|
|
functions from the {!Parse} module, in particular {!Parse.longident}.
|
|
They are available since OCaml 4.11, and also provide proper
|
|
input-location support.
|
|
|
|
*)
|
|
|
|
|
|
|
|
(** To print a longident, see {!Pprintast.longident}, using
|
|
{!Format.asprintf} to convert to a string. *)
|