17197 lines
883 KiB
OCaml
17197 lines
883 KiB
OCaml
module Debug :
|
|
sig
|
|
(****************************************************************************)
|
|
(* *)
|
|
(* Objective Caml *)
|
|
(* *)
|
|
(* INRIA Rocquencourt *)
|
|
(* *)
|
|
(* Copyright 2006 Institut National de Recherche en Informatique et *)
|
|
(* en Automatique. All rights reserved. This file is distributed under *)
|
|
(* the terms of the GNU Library General Public License, with the special *)
|
|
(* exception on linking described in LICENSE at the top of the Objective *)
|
|
(* Caml source tree. *)
|
|
(* *)
|
|
(****************************************************************************)
|
|
(* Authors:
|
|
* - Daniel de Rauglaudre: initial version
|
|
* - Nicolas Pouillard: refactoring
|
|
*)
|
|
(* camlp4r *)
|
|
type section = string
|
|
val mode : section -> bool
|
|
val printf : section -> ('a, Format.formatter, unit) format -> 'a
|
|
end =
|
|
struct
|
|
(****************************************************************************)
|
|
(* *)
|
|
(* Objective Caml *)
|
|
(* *)
|
|
(* INRIA Rocquencourt *)
|
|
(* *)
|
|
(* Copyright 2006 Institut National de Recherche en Informatique et *)
|
|
(* en Automatique. All rights reserved. This file is distributed under *)
|
|
(* the terms of the GNU Library General Public License, with the special *)
|
|
(* exception on linking described in LICENSE at the top of the Objective *)
|
|
(* Caml source tree. *)
|
|
(* *)
|
|
(****************************************************************************)
|
|
(* Authors:
|
|
* - Daniel de Rauglaudre: initial version
|
|
* - Nicolas Pouillard: refactoring
|
|
*)
|
|
(* camlp4r *)
|
|
open Format
|
|
module Debug = struct let mode _ = false end
|
|
type section = string
|
|
let out_channel =
|
|
try
|
|
let f = Sys.getenv "CAMLP4_DEBUG_FILE"
|
|
in
|
|
open_out_gen [ Open_wronly; Open_creat; Open_append; Open_text ]
|
|
0o666 f
|
|
with | Not_found -> stderr
|
|
module StringSet = Set.Make(String)
|
|
let mode =
|
|
try
|
|
let str = Sys.getenv "CAMLP4_DEBUG" in
|
|
let rec loop acc i =
|
|
try
|
|
let pos = String.index_from str i ':'
|
|
in
|
|
loop (StringSet.add (String.sub str i (pos - i)) acc) (pos + 1)
|
|
with
|
|
| Not_found ->
|
|
StringSet.add (String.sub str i ((String.length str) - i)) acc in
|
|
let sections = loop StringSet.empty 0
|
|
in
|
|
if StringSet.mem "*" sections
|
|
then (fun _ -> true)
|
|
else (fun x -> StringSet.mem x sections)
|
|
with | Not_found -> (fun _ -> false)
|
|
let formatter =
|
|
let header = "camlp4-debug: " in
|
|
let normal s =
|
|
let rec self from accu =
|
|
try
|
|
let i = String.index_from s from '\n'
|
|
in self (i + 1) ((String.sub s from ((i - from) + 1)) :: accu)
|
|
with
|
|
| Not_found ->
|
|
(String.sub s from ((String.length s) - from)) :: accu
|
|
in String.concat header (List.rev (self 0 [])) in
|
|
let after_new_line str = header ^ (normal str) in
|
|
let f = ref after_new_line in
|
|
let output str chr =
|
|
(output_string out_channel (!f str);
|
|
output_char out_channel chr;
|
|
f := if chr = '\n' then after_new_line else normal)
|
|
in
|
|
make_formatter
|
|
(fun buf pos len ->
|
|
let p = pred len in output (String.sub buf pos p) buf.[pos + p])
|
|
(fun () -> flush out_channel)
|
|
let printf section fmt = fprintf formatter ("%s: " ^^ fmt) section
|
|
end
|
|
module Options :
|
|
sig
|
|
(****************************************************************************)
|
|
(* *)
|
|
(* Objective Caml *)
|
|
(* *)
|
|
(* INRIA Rocquencourt *)
|
|
(* *)
|
|
(* Copyright 2006 Institut National de Recherche en Informatique et *)
|
|
(* en Automatique. All rights reserved. This file is distributed under *)
|
|
(* the terms of the GNU Library General Public License, with the special *)
|
|
(* exception on linking described in LICENSE at the top of the Objective *)
|
|
(* Caml source tree. *)
|
|
(* *)
|
|
(****************************************************************************)
|
|
(* Authors:
|
|
* - Daniel de Rauglaudre: initial version
|
|
* - Nicolas Pouillard: refactoring
|
|
*)
|
|
type spec_list = (string * Arg.spec * string) list
|
|
val init : spec_list -> unit
|
|
val add : string -> Arg.spec -> string -> unit
|
|
(** Add an option to the command line options. *)
|
|
val print_usage_list : spec_list -> unit
|
|
val ext_spec_list : unit -> spec_list
|
|
val parse : (string -> unit) -> string array -> string list
|
|
end =
|
|
struct
|
|
(****************************************************************************)
|
|
(* *)
|
|
(* Objective Caml *)
|
|
(* *)
|
|
(* INRIA Rocquencourt *)
|
|
(* *)
|
|
(* Copyright 2006 Institut National de Recherche en Informatique et *)
|
|
(* en Automatique. All rights reserved. This file is distributed under *)
|
|
(* the terms of the GNU Library General Public License, with the special *)
|
|
(* exception on linking described in LICENSE at the top of the Objective *)
|
|
(* Caml source tree. *)
|
|
(* *)
|
|
(****************************************************************************)
|
|
(* Authors:
|
|
* - Daniel de Rauglaudre: initial version
|
|
* - Nicolas Pouillard: refactoring
|
|
*)
|
|
type spec_list = (string * Arg.spec * string) list
|
|
open Format
|
|
let rec action_arg s sl =
|
|
function
|
|
| Arg.Unit f -> if s = "" then (f (); Some sl) else None
|
|
| Arg.Bool f ->
|
|
if s = ""
|
|
then
|
|
(match sl with
|
|
| s :: sl ->
|
|
(try (f (bool_of_string s); Some sl)
|
|
with | Invalid_argument "bool_of_string" -> None)
|
|
| [] -> None)
|
|
else
|
|
(try (f (bool_of_string s); Some sl)
|
|
with | Invalid_argument "bool_of_string" -> None)
|
|
| Arg.Set r -> if s = "" then (r := true; Some sl) else None
|
|
| Arg.Clear r -> if s = "" then (r := false; Some sl) else None
|
|
| Arg.Rest f -> (List.iter f (s :: sl); Some [])
|
|
| Arg.String f ->
|
|
if s = ""
|
|
then (match sl with | s :: sl -> (f s; Some sl) | [] -> None)
|
|
else (f s; Some sl)
|
|
| Arg.Set_string r ->
|
|
if s = ""
|
|
then (match sl with | s :: sl -> (r := s; Some sl) | [] -> None)
|
|
else (r := s; Some sl)
|
|
| Arg.Int f ->
|
|
if s = ""
|
|
then
|
|
(match sl with
|
|
| s :: sl ->
|
|
(try (f (int_of_string s); Some sl)
|
|
with | Failure "int_of_string" -> None)
|
|
| [] -> None)
|
|
else
|
|
(try (f (int_of_string s); Some sl)
|
|
with | Failure "int_of_string" -> None)
|
|
| Arg.Set_int r ->
|
|
if s = ""
|
|
then
|
|
(match sl with
|
|
| s :: sl ->
|
|
(try (r := int_of_string s; Some sl)
|
|
with | Failure "int_of_string" -> None)
|
|
| [] -> None)
|
|
else
|
|
(try (r := int_of_string s; Some sl)
|
|
with | Failure "int_of_string" -> None)
|
|
| Arg.Float f ->
|
|
if s = ""
|
|
then
|
|
(match sl with
|
|
| s :: sl -> (f (float_of_string s); Some sl)
|
|
| [] -> None)
|
|
else (f (float_of_string s); Some sl)
|
|
| Arg.Set_float r ->
|
|
if s = ""
|
|
then
|
|
(match sl with
|
|
| s :: sl -> (r := float_of_string s; Some sl)
|
|
| [] -> None)
|
|
else (r := float_of_string s; Some sl)
|
|
| Arg.Tuple specs ->
|
|
let rec action_args s sl =
|
|
(function
|
|
| [] -> Some sl
|
|
| spec :: spec_list ->
|
|
(match action_arg s sl spec with
|
|
| None -> action_args "" [] spec_list
|
|
| Some (s :: sl) -> action_args s sl spec_list
|
|
| Some sl -> action_args "" sl spec_list))
|
|
in action_args s sl specs
|
|
| Arg.Symbol (syms, f) ->
|
|
(match if s = "" then sl else s :: sl with
|
|
| s :: sl when List.mem s syms -> (f s; Some sl)
|
|
| _ -> None)
|
|
let common_start s1 s2 =
|
|
let rec loop i =
|
|
if (i == (String.length s1)) || (i == (String.length s2))
|
|
then i
|
|
else if s1.[i] == s2.[i] then loop (i + 1) else i
|
|
in loop 0
|
|
let parse_arg fold s sl =
|
|
fold
|
|
(fun (name, action, _) acu ->
|
|
let i = common_start s name
|
|
in
|
|
if i == (String.length name)
|
|
then
|
|
(try
|
|
action_arg (String.sub s i ((String.length s) - i)) sl
|
|
action
|
|
with | Arg.Bad _ -> acu)
|
|
else acu)
|
|
None
|
|
let rec parse_aux fold anon_fun =
|
|
function
|
|
| [] -> []
|
|
| s :: sl ->
|
|
if ((String.length s) > 1) && (s.[0] = '-')
|
|
then
|
|
(match parse_arg fold s sl with
|
|
| Some sl -> parse_aux fold anon_fun sl
|
|
| None -> s :: (parse_aux fold anon_fun sl))
|
|
else ((anon_fun s : unit); parse_aux fold anon_fun sl)
|
|
let align_doc key s =
|
|
let s =
|
|
let rec loop i =
|
|
if i = (String.length s)
|
|
then ""
|
|
else
|
|
if s.[i] = ' '
|
|
then loop (i + 1)
|
|
else String.sub s i ((String.length s) - i)
|
|
in loop 0 in
|
|
let (p, s) =
|
|
if (String.length s) > 0
|
|
then
|
|
if s.[0] = '<'
|
|
then
|
|
(let rec loop i =
|
|
if i = (String.length s)
|
|
then ("", s)
|
|
else
|
|
if s.[i] <> '>'
|
|
then loop (i + 1)
|
|
else
|
|
(let p = String.sub s 0 (i + 1) in
|
|
let rec loop i =
|
|
if i >= (String.length s)
|
|
then (p, "")
|
|
else
|
|
if s.[i] = ' '
|
|
then loop (i + 1)
|
|
else (p, (String.sub s i ((String.length s) - i)))
|
|
in loop (i + 1))
|
|
in loop 0)
|
|
else ("", s)
|
|
else ("", "") in
|
|
let tab =
|
|
String.make (max 1 ((16 - (String.length key)) - (String.length p)))
|
|
' '
|
|
in p ^ (tab ^ s)
|
|
let make_symlist l =
|
|
match l with
|
|
| [] -> "<none>"
|
|
| h :: t ->
|
|
(List.fold_left (fun x y -> x ^ ("|" ^ y)) ("{" ^ h) t) ^ "}"
|
|
let print_usage_list l =
|
|
List.iter
|
|
(fun (key, spec, doc) ->
|
|
match spec with
|
|
| Arg.Symbol (symbs, _) ->
|
|
let s = make_symlist symbs in
|
|
let synt = key ^ (" " ^ s)
|
|
in eprintf " %s %s\n" synt (align_doc synt doc)
|
|
| _ -> eprintf " %s %s\n" key (align_doc key doc))
|
|
l
|
|
let remaining_args argv =
|
|
let rec loop l i =
|
|
if i == (Array.length argv) then l else loop (argv.(i) :: l) (i + 1)
|
|
in List.rev (loop [] (!Arg.current + 1))
|
|
let init_spec_list = ref []
|
|
let ext_spec_list = ref []
|
|
let init spec_list = init_spec_list := spec_list
|
|
let add name spec descr =
|
|
ext_spec_list := (name, spec, descr) :: !ext_spec_list
|
|
let fold f init =
|
|
let spec_list = !init_spec_list @ !ext_spec_list in
|
|
let specs = Sort.list (fun (k1, _, _) (k2, _, _) -> k1 >= k2) spec_list
|
|
in List.fold_right f specs init
|
|
let parse anon_fun argv =
|
|
let remaining_args = remaining_args argv
|
|
in parse_aux fold anon_fun remaining_args
|
|
let ext_spec_list () = !ext_spec_list
|
|
end
|
|
module Sig =
|
|
struct
|
|
(* camlp4r *)
|
|
(****************************************************************************)
|
|
(* *)
|
|
(* Objective Caml *)
|
|
(* *)
|
|
(* INRIA Rocquencourt *)
|
|
(* *)
|
|
(* Copyright 2006 Institut National de Recherche en Informatique et *)
|
|
(* en Automatique. All rights reserved. This file is distributed under *)
|
|
(* the terms of the GNU Library General Public License, with the special *)
|
|
(* exception on linking described in LICENSE at the top of the Objective *)
|
|
(* Caml source tree. *)
|
|
(* *)
|
|
(****************************************************************************)
|
|
(* Authors:
|
|
* - Daniel de Rauglaudre: initial version
|
|
* - Nicolas Pouillard: refactoring
|
|
*)
|
|
module type Type = sig type t end
|
|
(** Signature for errors modules, an Error modules can be registred with
|
|
the {!ErrorHandler.Register} functor in order to be well printed. *)
|
|
module type Error =
|
|
sig
|
|
type t
|
|
exception E of t
|
|
val to_string : t -> string
|
|
val print : Format.formatter -> t -> unit
|
|
end
|
|
(** A signature for extensions identifiers. *)
|
|
module type Id =
|
|
sig
|
|
(** The name of the extension, typically the module name. *)
|
|
val name : string
|
|
(** The version of the extension, typically $Id: Sig.ml,v 1.2.2.9 2007/05/10 13:31:20 pouillar Exp $ with a versionning system. *)
|
|
val version : string
|
|
end
|
|
module type Loc =
|
|
sig
|
|
type t
|
|
(** Return a start location for the given file name.
|
|
This location starts at the begining of the file. *)
|
|
val mk : string -> t
|
|
(** The [ghost] location can be used when no location
|
|
information is available. *)
|
|
val ghost : t
|
|
(** {6 Conversion functions} *)
|
|
(** Return a location where both positions are set the given position. *)
|
|
val of_lexing_position : Lexing.position -> t
|
|
(** Return an OCaml location. *)
|
|
val to_ocaml_location : t -> Location.t
|
|
(** Return a location from an OCaml location. *)
|
|
val of_ocaml_location : Location.t -> t
|
|
(** Return a location from ocamllex buffer. *)
|
|
val of_lexbuf : Lexing.lexbuf -> t
|
|
(** Return a location from [(file_name, start_line, start_bol, start_off,
|
|
stop_line, stop_bol, stop_off, ghost)]. *)
|
|
val of_tuple :
|
|
(string * int * int * int * int * int * int * bool) -> t
|
|
(** Return [(file_name, start_line, start_bol, start_off,
|
|
stop_line, stop_bol, stop_off, ghost)]. *)
|
|
val to_tuple :
|
|
t -> (string * int * int * int * int * int * int * bool)
|
|
(** [merge loc1 loc2] Return a location that starts at [loc1] and end at [loc2]. *)
|
|
val merge : t -> t -> t
|
|
(** The stop pos becomes equal to the start pos. *)
|
|
val join : t -> t
|
|
(** [move selector n loc]
|
|
Return the location where positions are moved.
|
|
Affected positions are chosen with [selector].
|
|
Returned positions have their character offset plus [n]. *)
|
|
val move : [ `start | `stop | `both ] -> int -> t -> t
|
|
(** [shift n loc] Return the location where the new start position is the old
|
|
stop position, and where the new stop position character offset is the
|
|
old one plus [n]. *)
|
|
val shift : int -> t -> t
|
|
(** [move_line n loc] Return the location with the old line count plus [n].
|
|
The "begin of line" of both positions become the current offset. *)
|
|
val move_line : int -> t -> t
|
|
(** Accessors *)
|
|
(** Return the file name *)
|
|
val file_name : t -> string
|
|
(** Return the line number of the begining of this location. *)
|
|
val start_line : t -> int
|
|
(** Return the line number of the ending of this location. *)
|
|
val stop_line : t -> int
|
|
(** Returns the number of characters from the begining of the file
|
|
to the begining of the line of location's begining. *)
|
|
val start_bol : t -> int
|
|
(** Returns the number of characters from the begining of the file
|
|
to the begining of the line of location's ending. *)
|
|
val stop_bol : t -> int
|
|
(** Returns the number of characters from the begining of the file
|
|
of the begining of this location. *)
|
|
val start_off : t -> int
|
|
(** Return the number of characters from the begining of the file
|
|
of the ending of this location. *)
|
|
val stop_off : t -> int
|
|
(** Return the start position as a Lexing.position. *)
|
|
val start_pos : t -> Lexing.position
|
|
(** Return the stop position as a Lexing.position. *)
|
|
val stop_pos : t -> Lexing.position
|
|
(** Generally, return true if this location does not come
|
|
from an input stream. *)
|
|
val is_ghost : t -> bool
|
|
(** Return the associated ghost location. *)
|
|
val ghostify : t -> t
|
|
(** Return the location with the give file name *)
|
|
val set_file_name : string -> t -> t
|
|
(** [strictly_before loc1 loc2] True if the stop position of [loc1] is
|
|
strictly_before the start position of [loc2]. *)
|
|
val strictly_before : t -> t -> bool
|
|
(** Return the location with an absolute file name. *)
|
|
val make_absolute : t -> t
|
|
(** Print the location into the formatter in a format suitable for error
|
|
reporting. *)
|
|
val print : Format.formatter -> t -> unit
|
|
(** Print the location in a short format useful for debugging. *)
|
|
val dump : Format.formatter -> t -> unit
|
|
(** Same as {!print} but return a string instead of printting it. *)
|
|
val to_string : t -> string
|
|
(** [Exc_located loc e] is an encapsulation of the exception [e] with
|
|
the input location [loc]. To be used in quotation expanders
|
|
and in grammars to specify some input location for an error.
|
|
Do not raise this exception directly: rather use the following
|
|
function [Loc.raise]. *)
|
|
exception Exc_located of t * exn
|
|
(** [raise loc e], if [e] is already an [Exc_located] exception,
|
|
re-raise it, else raise the exception [Exc_located loc e]. *)
|
|
val raise : t -> exn -> 'a
|
|
(** The name of the location variable used in grammars and in
|
|
the predefined quotations for OCaml syntax trees. Default: [_loc]. *)
|
|
val name : string ref
|
|
end
|
|
module Warning (Loc : Loc) =
|
|
struct
|
|
module type S =
|
|
sig
|
|
type warning = Loc.t -> string -> unit
|
|
val default_warning : warning
|
|
val current_warning : warning ref
|
|
val print_warning : warning
|
|
end
|
|
end
|
|
(** Base class for map traversal, it includes some builtin types. *)
|
|
class mapper =
|
|
(object method string = fun x -> (x : string)
|
|
method int = fun x -> (x : int)
|
|
method float = fun x -> (x : float)
|
|
method bool = fun x -> (x : bool)
|
|
method list : 'a 'b. ('a -> 'b) -> 'a list -> 'b list = List.map
|
|
method option : 'a 'b. ('a -> 'b) -> 'a option -> 'b option =
|
|
fun f -> function | None -> None | Some x -> Some (f x)
|
|
method array : 'a 'b. ('a -> 'b) -> 'a array -> 'b array = Array.map
|
|
method ref : 'a 'b. ('a -> 'b) -> 'a ref -> 'b ref =
|
|
fun f { contents = x } -> { contents = f x; }
|
|
end :
|
|
object
|
|
method string : string -> string
|
|
method int : int -> int
|
|
method float : float -> float
|
|
method bool : bool -> bool
|
|
method list : 'a 'b. ('a -> 'b) -> 'a list -> 'b list
|
|
method option : 'a 'b. ('a -> 'b) -> 'a option -> 'b option
|
|
method array : 'a 'b. ('a -> 'b) -> 'a array -> 'b array
|
|
method ref : 'a 'b. ('a -> 'b) -> 'a ref -> 'b ref
|
|
end)
|
|
(** Abstract syntax tree minimal signature.
|
|
Types of this signature are abstract.
|
|
See the {!Camlp4Ast} signature for a concrete definition. *)
|
|
module type Ast =
|
|
sig
|
|
module Loc : Loc
|
|
type meta_bool
|
|
type 'a meta_option
|
|
type 'a meta_list
|
|
type ctyp
|
|
type patt
|
|
type expr
|
|
type module_type
|
|
type sig_item
|
|
type with_constr
|
|
type module_expr
|
|
type str_item
|
|
type class_type
|
|
type class_sig_item
|
|
type class_expr
|
|
type class_str_item
|
|
type match_case
|
|
type ident
|
|
type binding
|
|
type rec_binding
|
|
type module_binding
|
|
val loc_of_ctyp : ctyp -> Loc.t
|
|
val loc_of_patt : patt -> Loc.t
|
|
val loc_of_expr : expr -> Loc.t
|
|
val loc_of_module_type : module_type -> Loc.t
|
|
val loc_of_module_expr : module_expr -> Loc.t
|
|
val loc_of_sig_item : sig_item -> Loc.t
|
|
val loc_of_str_item : str_item -> Loc.t
|
|
val loc_of_class_type : class_type -> Loc.t
|
|
val loc_of_class_sig_item : class_sig_item -> Loc.t
|
|
val loc_of_class_expr : class_expr -> Loc.t
|
|
val loc_of_class_str_item : class_str_item -> Loc.t
|
|
val loc_of_with_constr : with_constr -> Loc.t
|
|
val loc_of_binding : binding -> Loc.t
|
|
val loc_of_rec_binding : rec_binding -> Loc.t
|
|
val loc_of_module_binding : module_binding -> Loc.t
|
|
val loc_of_match_case : match_case -> Loc.t
|
|
val loc_of_ident : ident -> Loc.t
|
|
(** This class is the base class for map traversal on the Ast.
|
|
To make a custom traversal class one just extend it like that:
|
|
|
|
This example swap pairs expression contents:
|
|
open Camlp4.PreCast;
|
|
[class swap = object
|
|
inherit Ast.map as super;
|
|
method expr e =
|
|
match super#expr e with
|
|
\[ <:expr\@_loc< ($e1$, $e2$) >> -> <:expr< ($e2$, $e1$) >>
|
|
| e -> e \];
|
|
end;
|
|
value _loc = Loc.ghost;
|
|
value map = (new swap)#expr;
|
|
assert (map <:expr< fun x -> (x, 42) >> = <:expr< fun x -> (42, x) >>);]
|
|
*)
|
|
class map :
|
|
object
|
|
inherit mapper
|
|
method meta_bool : meta_bool -> meta_bool
|
|
method meta_option :
|
|
'a 'b. ('a -> 'b) -> 'a meta_option -> 'b meta_option
|
|
method meta_list :
|
|
'a 'b. ('a -> 'b) -> 'a meta_list -> 'b meta_list
|
|
method _Loc_t : Loc.t -> Loc.t
|
|
method expr : expr -> expr
|
|
method patt : patt -> patt
|
|
method ctyp : ctyp -> ctyp
|
|
method str_item : str_item -> str_item
|
|
method sig_item : sig_item -> sig_item
|
|
method module_expr : module_expr -> module_expr
|
|
method module_type : module_type -> module_type
|
|
method class_expr : class_expr -> class_expr
|
|
method class_type : class_type -> class_type
|
|
method class_sig_item : class_sig_item -> class_sig_item
|
|
method class_str_item : class_str_item -> class_str_item
|
|
method with_constr : with_constr -> with_constr
|
|
method binding : binding -> binding
|
|
method rec_binding : rec_binding -> rec_binding
|
|
method module_binding : module_binding -> module_binding
|
|
method match_case : match_case -> match_case
|
|
method ident : ident -> ident
|
|
end
|
|
class fold :
|
|
object ('self_type)
|
|
method string : string -> 'self_type
|
|
method int : int -> 'self_type
|
|
method float : float -> 'self_type
|
|
method bool : bool -> 'self_type
|
|
method list :
|
|
'a. ('self_type -> 'a -> 'self_type) -> 'a list -> 'self_type
|
|
method option :
|
|
'a. ('self_type -> 'a -> 'self_type) -> 'a option -> 'self_type
|
|
method array :
|
|
'a. ('self_type -> 'a -> 'self_type) -> 'a array -> 'self_type
|
|
method ref :
|
|
'a. ('self_type -> 'a -> 'self_type) -> 'a ref -> 'self_type
|
|
method meta_bool : meta_bool -> 'self_type
|
|
method meta_option :
|
|
'a.
|
|
('self_type -> 'a -> 'self_type) ->
|
|
'a meta_option -> 'self_type
|
|
method meta_list :
|
|
'a.
|
|
('self_type -> 'a -> 'self_type) ->
|
|
'a meta_list -> 'self_type
|
|
method _Loc_t : Loc.t -> 'self_type
|
|
method expr : expr -> 'self_type
|
|
method patt : patt -> 'self_type
|
|
method ctyp : ctyp -> 'self_type
|
|
method str_item : str_item -> 'self_type
|
|
method sig_item : sig_item -> 'self_type
|
|
method module_expr : module_expr -> 'self_type
|
|
method module_type : module_type -> 'self_type
|
|
method class_expr : class_expr -> 'self_type
|
|
method class_type : class_type -> 'self_type
|
|
method class_sig_item : class_sig_item -> 'self_type
|
|
method class_str_item : class_str_item -> 'self_type
|
|
method with_constr : with_constr -> 'self_type
|
|
method binding : binding -> 'self_type
|
|
method rec_binding : rec_binding -> 'self_type
|
|
method module_binding : module_binding -> 'self_type
|
|
method match_case : match_case -> 'self_type
|
|
method ident : ident -> 'self_type
|
|
end
|
|
end
|
|
(** The AntiquotSyntax signature describe the minimal interface needed
|
|
for antiquotation handling. *)
|
|
module type AntiquotSyntax =
|
|
sig
|
|
module Ast : Ast
|
|
(** The parse function for expressions.
|
|
The underlying expression grammar entry is generally "expr; EOI". *)
|
|
val parse_expr : Ast.Loc.t -> string -> Ast.expr
|
|
(** The parse function for patterns.
|
|
The underlying pattern grammar entry is generally "patt; EOI". *)
|
|
val parse_patt : Ast.Loc.t -> string -> Ast.patt
|
|
end
|
|
(** Signature for OCaml syntax trees.
|
|
This signature is an extension of {!Ast}
|
|
It provides:
|
|
- Types for all kinds of structure.
|
|
- Map: A base class for map traversals.
|
|
- Map classes and functions for common kinds.
|
|
|
|
(* Core language *)
|
|
ctyp (* Representaion of types *)
|
|
patt (* The type of patterns *)
|
|
expr (* The type of expressions *)
|
|
match_case (* The type of cases for match/function/try constructions *)
|
|
ident (* The type of identifiers (including path like Foo(X).Bar.y) *)
|
|
binding (* The type of let bindings *)
|
|
rec_binding (* The type of record definitions *)
|
|
|
|
(* Modules *)
|
|
module_type (* The type of module types *)
|
|
sig_item (* The type of signature items *)
|
|
str_item (* The type of structure items *)
|
|
module_expr (* The type of module expressions *)
|
|
module_binding (* The type of recursive module definitions *)
|
|
with_constr (* The type of `with' constraints *)
|
|
|
|
(* Classes *)
|
|
class_type (* The type of class types *)
|
|
class_sig_item (* The type of class signature items *)
|
|
class_expr (* The type of class expressions *)
|
|
class_str_item (* The type of class structure items *)
|
|
*)
|
|
module type Camlp4Ast =
|
|
sig
|
|
module Loc : Loc
|
|
type meta_bool = | BTrue | BFalse | BAnt of string
|
|
type 'a meta_option = | ONone | OSome of 'a | OAnt of string
|
|
type 'a meta_list =
|
|
| LNil | LCons of 'a * 'a meta_list | LAnt of string
|
|
type ident =
|
|
| (* i . i *) (* i i *) (* foo *) (* Bar *)
|
|
IdAcc of Loc.t * ident * ident | IdApp of Loc.t * ident * ident
|
|
| IdLid of Loc.t * string | IdUid of Loc.t * string
|
|
| IdAnt of Loc.t * string
|
|
(* $s$ *)
|
|
type ctyp =
|
|
| (* t as t *) (* list 'a as 'a *) (* _ *) (* t t *) (* list 'a *)
|
|
(* t -> t *) (* int -> string *) (* #i *) (* #point *) (* ~s *)
|
|
(* i *) (* Lazy.t *) (* t == t *) (* type t = [ A | B ] == Foo.t *)
|
|
(* type t 'a 'b 'c = t constraint t = t constraint t = t *)
|
|
(* < (t)? (..)? > *) (* < move : int -> 'a .. > as 'a *) (* ?s *)
|
|
(* ! t . t *) (* ! 'a . list 'a -> 'a *) (* 's *) (* +'s *)
|
|
(* -'s *) (* `s *) (* { t } *)
|
|
(* { foo : int ; bar : mutable string } *) (* t : t *) (* t; t *)
|
|
(* t, t *) (* [ t ] *) (* [ A of int and string | B ] *)
|
|
(* t of t *) (* A of int *) (* t and t *) (* t | t *)
|
|
(* private t *) (* mutable t *) (* ( t ) *) (* (int * string) *)
|
|
(* t * t *) (* [ = t ] *) (* [ > t ] *) (* [ < t ] *)
|
|
(* [ < t > t ] *) (* t & t *) (* t of & t *) TyNil of Loc.t
|
|
| TyAli of Loc.t * ctyp * ctyp | TyAny of Loc.t
|
|
| TyApp of Loc.t * ctyp * ctyp | TyArr of Loc.t * ctyp * ctyp
|
|
| TyCls of Loc.t * ident | TyLab of Loc.t * string * ctyp
|
|
| TyId of Loc.t * ident | TyMan of Loc.t * ctyp * ctyp
|
|
| TyDcl of Loc.t * string * ctyp list * ctyp * (ctyp * ctyp) list
|
|
| TyObj of Loc.t * ctyp * meta_bool
|
|
| TyOlb of Loc.t * string * ctyp | TyPol of Loc.t * ctyp * ctyp
|
|
| TyQuo of Loc.t * string | TyQuP of Loc.t * string
|
|
| TyQuM of Loc.t * string | TyVrn of Loc.t * string
|
|
| TyRec of Loc.t * ctyp | TyCol of Loc.t * ctyp * ctyp
|
|
| TySem of Loc.t * ctyp * ctyp | TyCom of Loc.t * ctyp * ctyp
|
|
| TySum of Loc.t * ctyp | TyOf of Loc.t * ctyp * ctyp
|
|
| TyAnd of Loc.t * ctyp * ctyp | TyOr of Loc.t * ctyp * ctyp
|
|
| TyPrv of Loc.t * ctyp | TyMut of Loc.t * ctyp
|
|
| TyTup of Loc.t * ctyp | TySta of Loc.t * ctyp * ctyp
|
|
| TyVrnEq of Loc.t * ctyp | TyVrnSup of Loc.t * ctyp
|
|
| TyVrnInf of Loc.t * ctyp | TyVrnInfSup of Loc.t * ctyp * ctyp
|
|
| TyAmp of Loc.t * ctyp * ctyp | TyOfAmp of Loc.t * ctyp * ctyp
|
|
| TyAnt of Loc.t * string
|
|
(* $s$ *)
|
|
type (* i *)
|
|
(* p as p *)
|
|
(* (Node x y as n) *)
|
|
(* $s$ *)
|
|
(* _ *)
|
|
(* p p *)
|
|
(* fun x y -> *)
|
|
(* [| p |] *)
|
|
(* p, p *)
|
|
(* p; p *)
|
|
(* c *)
|
|
(* 'x' *)
|
|
(* ~s or ~s:(p) *)
|
|
(* ?s or ?s:(p = e) or ?(p = e) *)
|
|
(* | PaOlb of Loc.t and string and meta_option(*FIXME*) (patt * meta_option(*FIXME*) expr) *)
|
|
(* ?s or ?s:(p) *)
|
|
(* ?s:(p = e) or ?(p = e) *)
|
|
(* p | p *)
|
|
(* p .. p *)
|
|
(* { p } *)
|
|
(* i = p *)
|
|
(* s *)
|
|
(* ( p ) *)
|
|
(* (p : t) *)
|
|
(* #i *)
|
|
(* `s *)
|
|
(* i *)
|
|
(* e.e *)
|
|
(* $s$ *)
|
|
(* e e *)
|
|
(* e.(e) *)
|
|
(* [| e |] *)
|
|
(* e; e *)
|
|
(* assert False *)
|
|
(* assert e *)
|
|
(* e := e *)
|
|
(* 'c' *)
|
|
(* (e : t) or (e : t :> t) *)
|
|
(* 3.14 *)
|
|
(* for s = e to/downto e do { e } *)
|
|
(* fun [ a ] *)
|
|
(* if e then e else e *)
|
|
(* 42 *)
|
|
(* ~s or ~s:e *)
|
|
(* lazy e *)
|
|
(* let b in e or let rec b in e *)
|
|
(* let module s = me in e *)
|
|
(* match e with [ a ] *)
|
|
(* new i *)
|
|
(* object ((p))? (cst)? end *)
|
|
(* ?s or ?s:e *)
|
|
(* {< b >} *)
|
|
(* { b } or { (e) with b } *)
|
|
(* do { e } *)
|
|
(* e#s *)
|
|
(* e.[e] *)
|
|
(* s *)
|
|
(* "foo" *)
|
|
(* try e with [ a ] *)
|
|
(* (e) *)
|
|
(* e, e *)
|
|
(* (e : t) *)
|
|
(* `s *)
|
|
(* while e do { e } *)
|
|
(* i *)
|
|
(* A.B.C *)
|
|
(* functor (s : mt) -> mt *)
|
|
(* 's *)
|
|
(* sig (sg)? end *)
|
|
(* mt with wc *)
|
|
(* $s$ *)
|
|
(* class cict *)
|
|
(* class type cict *)
|
|
(* sg ; sg *)
|
|
(* # s or # s e *)
|
|
(* exception t *)
|
|
(* external s : t = s ... s *)
|
|
(* include mt *)
|
|
(* module s : mt *)
|
|
(* module rec mb *)
|
|
(* module type s = mt *)
|
|
(* open i *)
|
|
(* type t *)
|
|
(* value s : t *)
|
|
(* $s$ *)
|
|
(* type t = t *)
|
|
(* module i = i *)
|
|
(* wc and wc *)
|
|
(* $s$ *)
|
|
(* b and b *)
|
|
(* let a = 42 and c = 43 *)
|
|
(* p = e *)
|
|
(* let patt = expr *)
|
|
(* $s$ *)
|
|
(* b ; b *)
|
|
(* i = e *)
|
|
(* $s$ *)
|
|
(* mb and mb *)
|
|
(* module rec (s : mt) = me and (s : mt) = me *)
|
|
(* s : mt = me *)
|
|
(* s : mt *)
|
|
(* $s$ *)
|
|
(* a | a *)
|
|
(* p (when e)? -> e *)
|
|
(* $s$ *)
|
|
(* i *)
|
|
(* me me *)
|
|
(* functor (s : mt) -> me *)
|
|
(* struct (st)? end *)
|
|
(* (me : mt) *)
|
|
(* $s$ *)
|
|
(* class cice *)
|
|
(* class type cict *)
|
|
(* st ; st *)
|
|
(* # s or # s e *)
|
|
(* exception t or exception t = i *)
|
|
(*FIXME*)
|
|
(* e *)
|
|
(* external s : t = s ... s *)
|
|
(* include me *)
|
|
(* module s = me *)
|
|
(* module rec mb *)
|
|
(* module type s = mt *)
|
|
(* open i *)
|
|
(* type t *)
|
|
(* value b or value rec b *)
|
|
(* $s$ *)
|
|
(* (virtual)? i ([ t ])? *)
|
|
(* [t] -> ct *)
|
|
(* object ((t))? (csg)? end *)
|
|
(* ct and ct *)
|
|
(* ct : ct *)
|
|
(* ct = ct *)
|
|
(* $s$ *)
|
|
(* type t = t *)
|
|
(* csg ; csg *)
|
|
(* inherit ct *)
|
|
(* method s : t or method private s : t *)
|
|
(* value (virtual)? (mutable)? s : t *)
|
|
(* method virtual (mutable)? s : t *)
|
|
(* $s$ *)
|
|
(* ce e *)
|
|
(* (virtual)? i ([ t ])? *)
|
|
(* fun p -> ce *)
|
|
(* let (rec)? b in ce *)
|
|
(* object ((p))? (cst)? end *)
|
|
(* ce : ct *)
|
|
(* ce and ce *)
|
|
(* ce = ce *)
|
|
(* $s$ *)
|
|
patt =
|
|
| PaNil of Loc.t | PaId of Loc.t * ident
|
|
| PaAli of Loc.t * patt * patt | PaAnt of Loc.t * string
|
|
| PaAny of Loc.t | PaApp of Loc.t * patt * patt
|
|
| PaArr of Loc.t * patt | PaCom of Loc.t * patt * patt
|
|
| PaSem of Loc.t * patt * patt | PaChr of Loc.t * string
|
|
| PaInt of Loc.t * string | PaInt32 of Loc.t * string
|
|
| PaInt64 of Loc.t * string | PaNativeInt of Loc.t * string
|
|
| PaFlo of Loc.t * string | PaLab of Loc.t * string * patt
|
|
| PaOlb of Loc.t * string * patt
|
|
| PaOlbi of Loc.t * string * patt * expr
|
|
| PaOrp of Loc.t * patt * patt | PaRng of Loc.t * patt * patt
|
|
| PaRec of Loc.t * patt | PaEq of Loc.t * ident * patt
|
|
| PaStr of Loc.t * string | PaTup of Loc.t * patt
|
|
| PaTyc of Loc.t * patt * ctyp | PaTyp of Loc.t * ident
|
|
| PaVrn of Loc.t * string
|
|
and expr =
|
|
| ExNil of Loc.t | ExId of Loc.t * ident
|
|
| ExAcc of Loc.t * expr * expr | ExAnt of Loc.t * string
|
|
| ExApp of Loc.t * expr * expr | ExAre of Loc.t * expr * expr
|
|
| ExArr of Loc.t * expr | ExSem of Loc.t * expr * expr
|
|
| ExAsf of Loc.t | ExAsr of Loc.t * expr
|
|
| ExAss of Loc.t * expr * expr | ExChr of Loc.t * string
|
|
| ExCoe of Loc.t * expr * ctyp * ctyp | ExFlo of Loc.t * string
|
|
| ExFor of Loc.t * string * expr * expr * meta_bool * expr
|
|
| ExFun of Loc.t * match_case | ExIfe of Loc.t * expr * expr * expr
|
|
| ExInt of Loc.t * string | ExInt32 of Loc.t * string
|
|
| ExInt64 of Loc.t * string | ExNativeInt of Loc.t * string
|
|
| ExLab of Loc.t * string * expr | ExLaz of Loc.t * expr
|
|
| ExLet of Loc.t * meta_bool * binding * expr
|
|
| ExLmd of Loc.t * string * module_expr * expr
|
|
| ExMat of Loc.t * expr * match_case | ExNew of Loc.t * ident
|
|
| ExObj of Loc.t * patt * class_str_item
|
|
| ExOlb of Loc.t * string * expr | ExOvr of Loc.t * rec_binding
|
|
| ExRec of Loc.t * rec_binding * expr | ExSeq of Loc.t * expr
|
|
| ExSnd of Loc.t * expr * string | ExSte of Loc.t * expr * expr
|
|
| ExStr of Loc.t * string | ExTry of Loc.t * expr * match_case
|
|
| ExTup of Loc.t * expr | ExCom of Loc.t * expr * expr
|
|
| ExTyc of Loc.t * expr * ctyp | ExVrn of Loc.t * string
|
|
| ExWhi of Loc.t * expr * expr
|
|
and module_type =
|
|
| MtNil of Loc.t | MtId of Loc.t * ident
|
|
| MtFun of Loc.t * string * module_type * module_type
|
|
| MtQuo of Loc.t * string | MtSig of Loc.t * sig_item
|
|
| MtWit of Loc.t * module_type * with_constr
|
|
| MtAnt of Loc.t * string
|
|
and sig_item =
|
|
| SgNil of Loc.t | SgCls of Loc.t * class_type
|
|
| SgClt of Loc.t * class_type
|
|
| SgSem of Loc.t * sig_item * sig_item
|
|
| SgDir of Loc.t * string * expr | SgExc of Loc.t * ctyp
|
|
| SgExt of Loc.t * string * ctyp * string meta_list
|
|
| SgInc of Loc.t * module_type
|
|
| SgMod of Loc.t * string * module_type
|
|
| SgRecMod of Loc.t * module_binding
|
|
| SgMty of Loc.t * string * module_type | SgOpn of Loc.t * ident
|
|
| SgTyp of Loc.t * ctyp | SgVal of Loc.t * string * ctyp
|
|
| SgAnt of Loc.t * string
|
|
and with_constr =
|
|
| WcNil of Loc.t | WcTyp of Loc.t * ctyp * ctyp
|
|
| WcMod of Loc.t * ident * ident
|
|
| WcAnd of Loc.t * with_constr * with_constr
|
|
| WcAnt of Loc.t * string
|
|
and binding =
|
|
| BiNil of Loc.t | BiAnd of Loc.t * binding * binding
|
|
| BiEq of Loc.t * patt * expr | BiAnt of Loc.t * string
|
|
and rec_binding =
|
|
| RbNil of Loc.t | RbSem of Loc.t * rec_binding * rec_binding
|
|
| RbEq of Loc.t * ident * expr | RbAnt of Loc.t * string
|
|
and module_binding =
|
|
| MbNil of Loc.t | MbAnd of Loc.t * module_binding * module_binding
|
|
| MbColEq of Loc.t * string * module_type * module_expr
|
|
| MbCol of Loc.t * string * module_type | MbAnt of Loc.t * string
|
|
and match_case =
|
|
| McNil of Loc.t | McOr of Loc.t * match_case * match_case
|
|
| McArr of Loc.t * patt * expr * expr | McAnt of Loc.t * string
|
|
and module_expr =
|
|
| MeNil of Loc.t | MeId of Loc.t * ident
|
|
| MeApp of Loc.t * module_expr * module_expr
|
|
| MeFun of Loc.t * string * module_type * module_expr
|
|
| MeStr of Loc.t * str_item
|
|
| MeTyc of Loc.t * module_expr * module_type
|
|
| MeAnt of Loc.t * string
|
|
and str_item =
|
|
| StNil of Loc.t | StCls of Loc.t * class_expr
|
|
| StClt of Loc.t * class_type
|
|
| StSem of Loc.t * str_item * str_item
|
|
| StDir of Loc.t * string * expr
|
|
| StExc of Loc.t * ctyp * ident meta_option | StExp of Loc.t * expr
|
|
| StExt of Loc.t * string * ctyp * string meta_list
|
|
| StInc of Loc.t * module_expr
|
|
| StMod of Loc.t * string * module_expr
|
|
| StRecMod of Loc.t * module_binding
|
|
| StMty of Loc.t * string * module_type | StOpn of Loc.t * ident
|
|
| StTyp of Loc.t * ctyp | StVal of Loc.t * meta_bool * binding
|
|
| StAnt of Loc.t * string
|
|
and class_type =
|
|
| CtNil of Loc.t | CtCon of Loc.t * meta_bool * ident * ctyp
|
|
| CtFun of Loc.t * ctyp * class_type
|
|
| CtSig of Loc.t * ctyp * class_sig_item
|
|
| CtAnd of Loc.t * class_type * class_type
|
|
| CtCol of Loc.t * class_type * class_type
|
|
| CtEq of Loc.t * class_type * class_type | CtAnt of Loc.t * string
|
|
and class_sig_item =
|
|
| CgNil of Loc.t | CgCtr of Loc.t * ctyp * ctyp
|
|
| CgSem of Loc.t * class_sig_item * class_sig_item
|
|
| CgInh of Loc.t * class_type
|
|
| CgMth of Loc.t * string * meta_bool * ctyp
|
|
| CgVal of Loc.t * string * meta_bool * meta_bool * ctyp
|
|
| CgVir of Loc.t * string * meta_bool * ctyp
|
|
| CgAnt of Loc.t * string
|
|
and class_expr =
|
|
| CeNil of Loc.t | CeApp of Loc.t * class_expr * expr
|
|
| CeCon of Loc.t * meta_bool * ident * ctyp
|
|
| CeFun of Loc.t * patt * class_expr
|
|
| CeLet of Loc.t * meta_bool * binding * class_expr
|
|
| CeStr of Loc.t * patt * class_str_item
|
|
| CeTyc of Loc.t * class_expr * class_type
|
|
| CeAnd of Loc.t * class_expr * class_expr
|
|
| CeEq of Loc.t * class_expr * class_expr | CeAnt of Loc.t * string
|
|
and class_str_item =
|
|
| (* cst ; cst *) (* type t = t *)
|
|
(* inherit ce or inherit ce as s *) (* initializer e *)
|
|
(* method (private)? s : t = e or method (private)? s = e *)
|
|
(* value (mutable)? s = e *) (* method virtual (private)? s : t *)
|
|
(* value virtual (private)? s : t *) CrNil of Loc.t
|
|
| CrSem of Loc.t * class_str_item * class_str_item
|
|
| CrCtr of Loc.t * ctyp * ctyp
|
|
| CrInh of Loc.t * class_expr * string | CrIni of Loc.t * expr
|
|
| CrMth of Loc.t * string * meta_bool * expr * ctyp
|
|
| CrVal of Loc.t * string * meta_bool * expr
|
|
| CrVir of Loc.t * string * meta_bool * ctyp
|
|
| CrVvr of Loc.t * string * meta_bool * ctyp
|
|
| CrAnt of Loc.t * string
|
|
val loc_of_ctyp : ctyp -> Loc.t
|
|
val loc_of_patt : patt -> Loc.t
|
|
val loc_of_expr : expr -> Loc.t
|
|
val loc_of_module_type : module_type -> Loc.t
|
|
val loc_of_module_expr : module_expr -> Loc.t
|
|
val loc_of_sig_item : sig_item -> Loc.t
|
|
val loc_of_str_item : str_item -> Loc.t
|
|
val loc_of_class_type : class_type -> Loc.t
|
|
val loc_of_class_sig_item : class_sig_item -> Loc.t
|
|
val loc_of_class_expr : class_expr -> Loc.t
|
|
val loc_of_class_str_item : class_str_item -> Loc.t
|
|
val loc_of_with_constr : with_constr -> Loc.t
|
|
val loc_of_binding : binding -> Loc.t
|
|
val loc_of_rec_binding : rec_binding -> Loc.t
|
|
val loc_of_module_binding : module_binding -> Loc.t
|
|
val loc_of_match_case : match_case -> Loc.t
|
|
val loc_of_ident : ident -> Loc.t
|
|
module Meta :
|
|
sig
|
|
module type META_LOC =
|
|
sig
|
|
val meta_loc_patt : Loc.t -> Loc.t -> patt
|
|
val meta_loc_expr : Loc.t -> Loc.t -> expr
|
|
end
|
|
module MetaLoc :
|
|
sig
|
|
val meta_loc_patt : Loc.t -> Loc.t -> patt
|
|
val meta_loc_expr : Loc.t -> Loc.t -> expr
|
|
end
|
|
module MetaGhostLoc :
|
|
sig
|
|
val meta_loc_patt : Loc.t -> 'a -> patt
|
|
val meta_loc_expr : Loc.t -> 'a -> expr
|
|
end
|
|
module MetaLocVar :
|
|
sig
|
|
val meta_loc_patt : Loc.t -> 'a -> patt
|
|
val meta_loc_expr : Loc.t -> 'a -> expr
|
|
end
|
|
module Make (MetaLoc : META_LOC) :
|
|
sig
|
|
module Expr :
|
|
sig
|
|
val meta_string : Loc.t -> string -> expr
|
|
val meta_int : Loc.t -> string -> expr
|
|
val meta_float : Loc.t -> string -> expr
|
|
val meta_char : Loc.t -> string -> expr
|
|
val meta_bool : Loc.t -> bool -> expr
|
|
val meta_list :
|
|
(Loc.t -> 'a -> expr) -> Loc.t -> 'a list -> expr
|
|
val meta_binding : Loc.t -> binding -> expr
|
|
val meta_rec_binding : Loc.t -> rec_binding -> expr
|
|
val meta_class_expr : Loc.t -> class_expr -> expr
|
|
val meta_class_sig_item : Loc.t -> class_sig_item -> expr
|
|
val meta_class_str_item : Loc.t -> class_str_item -> expr
|
|
val meta_class_type : Loc.t -> class_type -> expr
|
|
val meta_ctyp : Loc.t -> ctyp -> expr
|
|
val meta_expr : Loc.t -> expr -> expr
|
|
val meta_ident : Loc.t -> ident -> expr
|
|
val meta_match_case : Loc.t -> match_case -> expr
|
|
val meta_module_binding : Loc.t -> module_binding -> expr
|
|
val meta_module_expr : Loc.t -> module_expr -> expr
|
|
val meta_module_type : Loc.t -> module_type -> expr
|
|
val meta_patt : Loc.t -> patt -> expr
|
|
val meta_sig_item : Loc.t -> sig_item -> expr
|
|
val meta_str_item : Loc.t -> str_item -> expr
|
|
val meta_with_constr : Loc.t -> with_constr -> expr
|
|
end
|
|
module Patt :
|
|
sig
|
|
val meta_string : Loc.t -> string -> patt
|
|
val meta_int : Loc.t -> string -> patt
|
|
val meta_float : Loc.t -> string -> patt
|
|
val meta_char : Loc.t -> string -> patt
|
|
val meta_bool : Loc.t -> bool -> patt
|
|
val meta_list :
|
|
(Loc.t -> 'a -> patt) -> Loc.t -> 'a list -> patt
|
|
val meta_binding : Loc.t -> binding -> patt
|
|
val meta_rec_binding : Loc.t -> rec_binding -> patt
|
|
val meta_class_expr : Loc.t -> class_expr -> patt
|
|
val meta_class_sig_item : Loc.t -> class_sig_item -> patt
|
|
val meta_class_str_item : Loc.t -> class_str_item -> patt
|
|
val meta_class_type : Loc.t -> class_type -> patt
|
|
val meta_ctyp : Loc.t -> ctyp -> patt
|
|
val meta_expr : Loc.t -> expr -> patt
|
|
val meta_ident : Loc.t -> ident -> patt
|
|
val meta_match_case : Loc.t -> match_case -> patt
|
|
val meta_module_binding : Loc.t -> module_binding -> patt
|
|
val meta_module_expr : Loc.t -> module_expr -> patt
|
|
val meta_module_type : Loc.t -> module_type -> patt
|
|
val meta_patt : Loc.t -> patt -> patt
|
|
val meta_sig_item : Loc.t -> sig_item -> patt
|
|
val meta_str_item : Loc.t -> str_item -> patt
|
|
val meta_with_constr : Loc.t -> with_constr -> patt
|
|
end
|
|
end
|
|
end
|
|
class map :
|
|
object
|
|
inherit mapper
|
|
method meta_bool : meta_bool -> meta_bool
|
|
method meta_option :
|
|
'a 'b. ('a -> 'b) -> 'a meta_option -> 'b meta_option
|
|
method meta_list :
|
|
'a 'b. ('a -> 'b) -> 'a meta_list -> 'b meta_list
|
|
method _Loc_t : Loc.t -> Loc.t
|
|
method expr : expr -> expr
|
|
method patt : patt -> patt
|
|
method ctyp : ctyp -> ctyp
|
|
method str_item : str_item -> str_item
|
|
method sig_item : sig_item -> sig_item
|
|
method module_expr : module_expr -> module_expr
|
|
method module_type : module_type -> module_type
|
|
method class_expr : class_expr -> class_expr
|
|
method class_type : class_type -> class_type
|
|
method class_sig_item : class_sig_item -> class_sig_item
|
|
method class_str_item : class_str_item -> class_str_item
|
|
method with_constr : with_constr -> with_constr
|
|
method binding : binding -> binding
|
|
method rec_binding : rec_binding -> rec_binding
|
|
method module_binding : module_binding -> module_binding
|
|
method match_case : match_case -> match_case
|
|
method ident : ident -> ident
|
|
end
|
|
class fold :
|
|
object ('self_type)
|
|
method string : string -> 'self_type
|
|
method int : int -> 'self_type
|
|
method float : float -> 'self_type
|
|
method bool : bool -> 'self_type
|
|
method list :
|
|
'a. ('self_type -> 'a -> 'self_type) -> 'a list -> 'self_type
|
|
method option :
|
|
'a. ('self_type -> 'a -> 'self_type) -> 'a option -> 'self_type
|
|
method array :
|
|
'a. ('self_type -> 'a -> 'self_type) -> 'a array -> 'self_type
|
|
method ref :
|
|
'a. ('self_type -> 'a -> 'self_type) -> 'a ref -> 'self_type
|
|
method meta_bool : meta_bool -> 'self_type
|
|
method meta_option :
|
|
'a.
|
|
('self_type -> 'a -> 'self_type) ->
|
|
'a meta_option -> 'self_type
|
|
method meta_list :
|
|
'a.
|
|
('self_type -> 'a -> 'self_type) ->
|
|
'a meta_list -> 'self_type
|
|
method _Loc_t : Loc.t -> 'self_type
|
|
method expr : expr -> 'self_type
|
|
method patt : patt -> 'self_type
|
|
method ctyp : ctyp -> 'self_type
|
|
method str_item : str_item -> 'self_type
|
|
method sig_item : sig_item -> 'self_type
|
|
method module_expr : module_expr -> 'self_type
|
|
method module_type : module_type -> 'self_type
|
|
method class_expr : class_expr -> 'self_type
|
|
method class_type : class_type -> 'self_type
|
|
method class_sig_item : class_sig_item -> 'self_type
|
|
method class_str_item : class_str_item -> 'self_type
|
|
method with_constr : with_constr -> 'self_type
|
|
method binding : binding -> 'self_type
|
|
method rec_binding : rec_binding -> 'self_type
|
|
method module_binding : module_binding -> 'self_type
|
|
method match_case : match_case -> 'self_type
|
|
method ident : ident -> 'self_type
|
|
end
|
|
val map_expr : (expr -> expr) -> map
|
|
val map_patt : (patt -> patt) -> map
|
|
val map_ctyp : (ctyp -> ctyp) -> map
|
|
val map_str_item : (str_item -> str_item) -> map
|
|
val map_sig_item : (sig_item -> sig_item) -> map
|
|
val map_loc : (Loc.t -> Loc.t) -> map
|
|
val ident_of_expr : expr -> ident
|
|
val ident_of_patt : patt -> ident
|
|
val ident_of_ctyp : ctyp -> ident
|
|
val biAnd_of_list : binding list -> binding
|
|
val rbSem_of_list : rec_binding list -> rec_binding
|
|
val paSem_of_list : patt list -> patt
|
|
val paCom_of_list : patt list -> patt
|
|
val tyOr_of_list : ctyp list -> ctyp
|
|
val tyAnd_of_list : ctyp list -> ctyp
|
|
val tyAmp_of_list : ctyp list -> ctyp
|
|
val tySem_of_list : ctyp list -> ctyp
|
|
val tyCom_of_list : ctyp list -> ctyp
|
|
val tySta_of_list : ctyp list -> ctyp
|
|
val stSem_of_list : str_item list -> str_item
|
|
val sgSem_of_list : sig_item list -> sig_item
|
|
val crSem_of_list : class_str_item list -> class_str_item
|
|
val cgSem_of_list : class_sig_item list -> class_sig_item
|
|
val ctAnd_of_list : class_type list -> class_type
|
|
val ceAnd_of_list : class_expr list -> class_expr
|
|
val wcAnd_of_list : with_constr list -> with_constr
|
|
val meApp_of_list : module_expr list -> module_expr
|
|
val mbAnd_of_list : module_binding list -> module_binding
|
|
val mcOr_of_list : match_case list -> match_case
|
|
val idAcc_of_list : ident list -> ident
|
|
val idApp_of_list : ident list -> ident
|
|
val exSem_of_list : expr list -> expr
|
|
val exCom_of_list : expr list -> expr
|
|
val list_of_ctyp : ctyp -> ctyp list -> ctyp list
|
|
val list_of_binding : binding -> binding list -> binding list
|
|
val list_of_rec_binding :
|
|
rec_binding -> rec_binding list -> rec_binding list
|
|
val list_of_with_constr :
|
|
with_constr -> with_constr list -> with_constr list
|
|
val list_of_patt : patt -> patt list -> patt list
|
|
val list_of_expr : expr -> expr list -> expr list
|
|
val list_of_str_item : str_item -> str_item list -> str_item list
|
|
val list_of_sig_item : sig_item -> sig_item list -> sig_item list
|
|
val list_of_class_sig_item :
|
|
class_sig_item -> class_sig_item list -> class_sig_item list
|
|
val list_of_class_str_item :
|
|
class_str_item -> class_str_item list -> class_str_item list
|
|
val list_of_class_type :
|
|
class_type -> class_type list -> class_type list
|
|
val list_of_class_expr :
|
|
class_expr -> class_expr list -> class_expr list
|
|
val list_of_module_expr :
|
|
module_expr -> module_expr list -> module_expr list
|
|
val list_of_module_binding :
|
|
module_binding -> module_binding list -> module_binding list
|
|
val list_of_match_case :
|
|
match_case -> match_case list -> match_case list
|
|
val list_of_ident : ident -> ident list -> ident list
|
|
val safe_string_escaped : string -> string
|
|
val is_irrefut_patt : patt -> bool
|
|
val is_constructor : ident -> bool
|
|
val is_patt_constructor : patt -> bool
|
|
val is_expr_constructor : expr -> bool
|
|
val ty_of_stl : (Loc.t * string * (ctyp list)) -> ctyp
|
|
val ty_of_sbt : (Loc.t * string * bool * ctyp) -> ctyp
|
|
val bi_of_pe : (patt * expr) -> binding
|
|
val pel_of_binding : binding -> (patt * expr) list
|
|
val binding_of_pel : (patt * expr) list -> binding
|
|
val sum_type_of_list : (Loc.t * string * (ctyp list)) list -> ctyp
|
|
val record_type_of_list : (Loc.t * string * bool * ctyp) list -> ctyp
|
|
end
|
|
module Camlp4AstToAst (M : Camlp4Ast) : Ast with module Loc = M.Loc
|
|
and type meta_bool = M.meta_bool
|
|
and type 'a meta_option = 'a M.meta_option
|
|
and type 'a meta_list = 'a M.meta_list and type ctyp = M.ctyp
|
|
and type patt = M.patt and type expr = M.expr
|
|
and type module_type = M.module_type and type sig_item = M.sig_item
|
|
and type with_constr = M.with_constr
|
|
and type module_expr = M.module_expr and type str_item = M.str_item
|
|
and type class_type = M.class_type
|
|
and type class_sig_item = M.class_sig_item
|
|
and type class_expr = M.class_expr
|
|
and type class_str_item = M.class_str_item and type binding = M.binding
|
|
and type rec_binding = M.rec_binding
|
|
and type module_binding = M.module_binding
|
|
and type match_case = M.match_case and type ident = M.ident = M
|
|
module MakeCamlp4Ast (Loc : Type) =
|
|
struct
|
|
type meta_bool = | BTrue | BFalse | BAnt of string
|
|
type 'a meta_option = | ONone | OSome of 'a | OAnt of string
|
|
type 'a meta_list =
|
|
| LNil | LCons of 'a * 'a meta_list | LAnt of string
|
|
type ident =
|
|
| IdAcc of Loc.t * ident * ident | IdApp of Loc.t * ident * ident
|
|
| IdLid of Loc.t * string | IdUid of Loc.t * string
|
|
| IdAnt of Loc.t * string
|
|
type ctyp =
|
|
| TyNil of Loc.t | TyAli of Loc.t * ctyp * ctyp | TyAny of Loc.t
|
|
| TyApp of Loc.t * ctyp * ctyp | TyArr of Loc.t * ctyp * ctyp
|
|
| TyCls of Loc.t * ident | TyLab of Loc.t * string * ctyp
|
|
| TyId of Loc.t * ident | TyMan of Loc.t * ctyp * ctyp
|
|
| TyDcl of Loc.t * string * ctyp list * ctyp * (ctyp * ctyp) list
|
|
| TyObj of Loc.t * ctyp * meta_bool
|
|
| TyOlb of Loc.t * string * ctyp | TyPol of Loc.t * ctyp * ctyp
|
|
| TyQuo of Loc.t * string | TyQuP of Loc.t * string
|
|
| TyQuM of Loc.t * string | TyVrn of Loc.t * string
|
|
| TyRec of Loc.t * ctyp | TyCol of Loc.t * ctyp * ctyp
|
|
| TySem of Loc.t * ctyp * ctyp | TyCom of Loc.t * ctyp * ctyp
|
|
| TySum of Loc.t * ctyp | TyOf of Loc.t * ctyp * ctyp
|
|
| TyAnd of Loc.t * ctyp * ctyp | TyOr of Loc.t * ctyp * ctyp
|
|
| TyPrv of Loc.t * ctyp | TyMut of Loc.t * ctyp
|
|
| TyTup of Loc.t * ctyp | TySta of Loc.t * ctyp * ctyp
|
|
| TyVrnEq of Loc.t * ctyp | TyVrnSup of Loc.t * ctyp
|
|
| TyVrnInf of Loc.t * ctyp | TyVrnInfSup of Loc.t * ctyp * ctyp
|
|
| TyAmp of Loc.t * ctyp * ctyp | TyOfAmp of Loc.t * ctyp * ctyp
|
|
| TyAnt of Loc.t * string
|
|
type patt =
|
|
| PaNil of Loc.t | PaId of Loc.t * ident
|
|
| PaAli of Loc.t * patt * patt | PaAnt of Loc.t * string
|
|
| PaAny of Loc.t | PaApp of Loc.t * patt * patt
|
|
| PaArr of Loc.t * patt | PaCom of Loc.t * patt * patt
|
|
| PaSem of Loc.t * patt * patt | PaChr of Loc.t * string
|
|
| PaInt of Loc.t * string | PaInt32 of Loc.t * string
|
|
| PaInt64 of Loc.t * string | PaNativeInt of Loc.t * string
|
|
| PaFlo of Loc.t * string | PaLab of Loc.t * string * patt
|
|
| PaOlb of Loc.t * string * patt
|
|
| PaOlbi of Loc.t * string * patt * expr
|
|
| PaOrp of Loc.t * patt * patt | PaRng of Loc.t * patt * patt
|
|
| PaRec of Loc.t * patt | PaEq of Loc.t * ident * patt
|
|
| PaStr of Loc.t * string | PaTup of Loc.t * patt
|
|
| PaTyc of Loc.t * patt * ctyp | PaTyp of Loc.t * ident
|
|
| PaVrn of Loc.t * string
|
|
and expr =
|
|
| ExNil of Loc.t | ExId of Loc.t * ident
|
|
| ExAcc of Loc.t * expr * expr | ExAnt of Loc.t * string
|
|
| ExApp of Loc.t * expr * expr | ExAre of Loc.t * expr * expr
|
|
| ExArr of Loc.t * expr | ExSem of Loc.t * expr * expr
|
|
| ExAsf of Loc.t | ExAsr of Loc.t * expr
|
|
| ExAss of Loc.t * expr * expr | ExChr of Loc.t * string
|
|
| ExCoe of Loc.t * expr * ctyp * ctyp | ExFlo of Loc.t * string
|
|
| ExFor of Loc.t * string * expr * expr * meta_bool * expr
|
|
| ExFun of Loc.t * match_case | ExIfe of Loc.t * expr * expr * expr
|
|
| ExInt of Loc.t * string | ExInt32 of Loc.t * string
|
|
| ExInt64 of Loc.t * string | ExNativeInt of Loc.t * string
|
|
| ExLab of Loc.t * string * expr | ExLaz of Loc.t * expr
|
|
| ExLet of Loc.t * meta_bool * binding * expr
|
|
| ExLmd of Loc.t * string * module_expr * expr
|
|
| ExMat of Loc.t * expr * match_case | ExNew of Loc.t * ident
|
|
| ExObj of Loc.t * patt * class_str_item
|
|
| ExOlb of Loc.t * string * expr | ExOvr of Loc.t * rec_binding
|
|
| ExRec of Loc.t * rec_binding * expr | ExSeq of Loc.t * expr
|
|
| ExSnd of Loc.t * expr * string | ExSte of Loc.t * expr * expr
|
|
| ExStr of Loc.t * string | ExTry of Loc.t * expr * match_case
|
|
| ExTup of Loc.t * expr | ExCom of Loc.t * expr * expr
|
|
| ExTyc of Loc.t * expr * ctyp | ExVrn of Loc.t * string
|
|
| ExWhi of Loc.t * expr * expr
|
|
and module_type =
|
|
| MtNil of Loc.t | MtId of Loc.t * ident
|
|
| MtFun of Loc.t * string * module_type * module_type
|
|
| MtQuo of Loc.t * string | MtSig of Loc.t * sig_item
|
|
| MtWit of Loc.t * module_type * with_constr
|
|
| MtAnt of Loc.t * string
|
|
and sig_item =
|
|
| SgNil of Loc.t | SgCls of Loc.t * class_type
|
|
| SgClt of Loc.t * class_type
|
|
| SgSem of Loc.t * sig_item * sig_item
|
|
| SgDir of Loc.t * string * expr | SgExc of Loc.t * ctyp
|
|
| SgExt of Loc.t * string * ctyp * string meta_list
|
|
| SgInc of Loc.t * module_type
|
|
| SgMod of Loc.t * string * module_type
|
|
| SgRecMod of Loc.t * module_binding
|
|
| SgMty of Loc.t * string * module_type | SgOpn of Loc.t * ident
|
|
| SgTyp of Loc.t * ctyp | SgVal of Loc.t * string * ctyp
|
|
| SgAnt of Loc.t * string
|
|
and with_constr =
|
|
| WcNil of Loc.t | WcTyp of Loc.t * ctyp * ctyp
|
|
| WcMod of Loc.t * ident * ident
|
|
| WcAnd of Loc.t * with_constr * with_constr
|
|
| WcAnt of Loc.t * string
|
|
and binding =
|
|
| BiNil of Loc.t | BiAnd of Loc.t * binding * binding
|
|
| BiEq of Loc.t * patt * expr | BiAnt of Loc.t * string
|
|
and rec_binding =
|
|
| RbNil of Loc.t | RbSem of Loc.t * rec_binding * rec_binding
|
|
| RbEq of Loc.t * ident * expr | RbAnt of Loc.t * string
|
|
and module_binding =
|
|
| MbNil of Loc.t | MbAnd of Loc.t * module_binding * module_binding
|
|
| MbColEq of Loc.t * string * module_type * module_expr
|
|
| MbCol of Loc.t * string * module_type | MbAnt of Loc.t * string
|
|
and match_case =
|
|
| McNil of Loc.t | McOr of Loc.t * match_case * match_case
|
|
| McArr of Loc.t * patt * expr * expr | McAnt of Loc.t * string
|
|
and module_expr =
|
|
| MeNil of Loc.t | MeId of Loc.t * ident
|
|
| MeApp of Loc.t * module_expr * module_expr
|
|
| MeFun of Loc.t * string * module_type * module_expr
|
|
| MeStr of Loc.t * str_item
|
|
| MeTyc of Loc.t * module_expr * module_type
|
|
| MeAnt of Loc.t * string
|
|
and str_item =
|
|
| StNil of Loc.t | StCls of Loc.t * class_expr
|
|
| StClt of Loc.t * class_type
|
|
| StSem of Loc.t * str_item * str_item
|
|
| StDir of Loc.t * string * expr
|
|
| StExc of Loc.t * ctyp * ident meta_option | StExp of Loc.t * expr
|
|
| StExt of Loc.t * string * ctyp * string meta_list
|
|
| StInc of Loc.t * module_expr
|
|
| StMod of Loc.t * string * module_expr
|
|
| StRecMod of Loc.t * module_binding
|
|
| StMty of Loc.t * string * module_type | StOpn of Loc.t * ident
|
|
| StTyp of Loc.t * ctyp | StVal of Loc.t * meta_bool * binding
|
|
| StAnt of Loc.t * string
|
|
and class_type =
|
|
| CtNil of Loc.t | CtCon of Loc.t * meta_bool * ident * ctyp
|
|
| CtFun of Loc.t * ctyp * class_type
|
|
| CtSig of Loc.t * ctyp * class_sig_item
|
|
| CtAnd of Loc.t * class_type * class_type
|
|
| CtCol of Loc.t * class_type * class_type
|
|
| CtEq of Loc.t * class_type * class_type | CtAnt of Loc.t * string
|
|
and class_sig_item =
|
|
| CgNil of Loc.t | CgCtr of Loc.t * ctyp * ctyp
|
|
| CgSem of Loc.t * class_sig_item * class_sig_item
|
|
| CgInh of Loc.t * class_type
|
|
| CgMth of Loc.t * string * meta_bool * ctyp
|
|
| CgVal of Loc.t * string * meta_bool * meta_bool * ctyp
|
|
| CgVir of Loc.t * string * meta_bool * ctyp
|
|
| CgAnt of Loc.t * string
|
|
and class_expr =
|
|
| CeNil of Loc.t | CeApp of Loc.t * class_expr * expr
|
|
| CeCon of Loc.t * meta_bool * ident * ctyp
|
|
| CeFun of Loc.t * patt * class_expr
|
|
| CeLet of Loc.t * meta_bool * binding * class_expr
|
|
| CeStr of Loc.t * patt * class_str_item
|
|
| CeTyc of Loc.t * class_expr * class_type
|
|
| CeAnd of Loc.t * class_expr * class_expr
|
|
| CeEq of Loc.t * class_expr * class_expr | CeAnt of Loc.t * string
|
|
and class_str_item =
|
|
| CrNil of Loc.t | CrSem of Loc.t * class_str_item * class_str_item
|
|
| CrCtr of Loc.t * ctyp * ctyp
|
|
| CrInh of Loc.t * class_expr * string | CrIni of Loc.t * expr
|
|
| CrMth of Loc.t * string * meta_bool * expr * ctyp
|
|
| CrVal of Loc.t * string * meta_bool * expr
|
|
| CrVir of Loc.t * string * meta_bool * ctyp
|
|
| CrVvr of Loc.t * string * meta_bool * ctyp
|
|
| CrAnt of Loc.t * string
|
|
end
|
|
module type AstFilters =
|
|
sig
|
|
module Ast : Camlp4Ast
|
|
type 'a filter = 'a -> 'a
|
|
val register_sig_item_filter : Ast.sig_item filter -> unit
|
|
val register_str_item_filter : Ast.str_item filter -> unit
|
|
val fold_interf_filters :
|
|
('a -> Ast.sig_item filter -> 'a) -> 'a -> 'a
|
|
val fold_implem_filters :
|
|
('a -> Ast.str_item filter -> 'a) -> 'a -> 'a
|
|
end
|
|
module type DynAst =
|
|
sig
|
|
module Ast : Ast
|
|
type 'a tag
|
|
val ctyp_tag : Ast.ctyp tag
|
|
val patt_tag : Ast.patt tag
|
|
val expr_tag : Ast.expr tag
|
|
val module_type_tag : Ast.module_type tag
|
|
val sig_item_tag : Ast.sig_item tag
|
|
val with_constr_tag : Ast.with_constr tag
|
|
val module_expr_tag : Ast.module_expr tag
|
|
val str_item_tag : Ast.str_item tag
|
|
val class_type_tag : Ast.class_type tag
|
|
val class_sig_item_tag : Ast.class_sig_item tag
|
|
val class_expr_tag : Ast.class_expr tag
|
|
val class_str_item_tag : Ast.class_str_item tag
|
|
val match_case_tag : Ast.match_case tag
|
|
val ident_tag : Ast.ident tag
|
|
val binding_tag : Ast.binding tag
|
|
val rec_binding_tag : Ast.rec_binding tag
|
|
val module_binding_tag : Ast.module_binding tag
|
|
val string_of_tag : 'a tag -> string
|
|
module Pack (X : sig type 'a t end) :
|
|
sig
|
|
type pack
|
|
val pack : 'a tag -> 'a X.t -> pack
|
|
val unpack : 'a tag -> pack -> 'a X.t
|
|
val print_tag : Format.formatter -> pack -> unit
|
|
end
|
|
end
|
|
type quotation =
|
|
{ q_name : string; q_loc : string; q_shift : int; q_contents : string
|
|
}
|
|
module type Quotation =
|
|
sig
|
|
module Ast : Ast
|
|
module DynAst : DynAst with module Ast = Ast
|
|
open Ast
|
|
type 'a expand_fun = Loc.t -> string option -> string -> 'a
|
|
val add : string -> 'a DynAst.tag -> 'a expand_fun -> unit
|
|
val find : string -> 'a DynAst.tag -> 'a expand_fun
|
|
val default : string ref
|
|
val parse_quotation_result :
|
|
(Loc.t -> string -> 'a) ->
|
|
Loc.t -> quotation -> string -> string -> 'a
|
|
val translate : (string -> string) ref
|
|
val expand : Loc.t -> quotation -> 'a DynAst.tag -> 'a
|
|
val dump_file : (string option) ref
|
|
module Error : Error
|
|
end
|
|
type ('a, 'loc) stream_filter =
|
|
('a * 'loc) Stream.t -> ('a * 'loc) Stream.t
|
|
module type Token =
|
|
sig
|
|
module Loc : Loc
|
|
type t
|
|
val to_string : t -> string
|
|
val print : Format.formatter -> t -> unit
|
|
val match_keyword : string -> t -> bool
|
|
val extract_string : t -> string
|
|
module Filter :
|
|
sig
|
|
type token_filter = (t, Loc.t) stream_filter
|
|
type t
|
|
val mk : (string -> bool) -> t
|
|
val define_filter : t -> (token_filter -> token_filter) -> unit
|
|
val filter : t -> token_filter
|
|
val keyword_added : t -> string -> bool -> unit
|
|
val keyword_removed : t -> string -> unit
|
|
end
|
|
module Error : Error
|
|
end
|
|
type camlp4_token =
|
|
| KEYWORD of string | SYMBOL of string | LIDENT of string
|
|
| UIDENT of string | ESCAPED_IDENT of string | INT of int * string
|
|
| INT32 of int32 * string | INT64 of int64 * string
|
|
| NATIVEINT of nativeint * string | FLOAT of float * string
|
|
| CHAR of char * string | STRING of string * string | LABEL of string
|
|
| OPTLABEL of string | QUOTATION of quotation
|
|
| ANTIQUOT of string * string | COMMENT of string | BLANKS of string
|
|
| NEWLINE | LINE_DIRECTIVE of int * string option | EOI
|
|
module type Camlp4Token = Token with type t = camlp4_token
|
|
module type DynLoader =
|
|
sig
|
|
type t
|
|
exception Error of string * string
|
|
val mk : ?ocaml_stdlib: bool -> ?camlp4_stdlib: bool -> unit -> t
|
|
val fold_load_path : t -> (string -> 'a -> 'a) -> 'a -> 'a
|
|
val load : t -> string -> unit
|
|
val include_dir : t -> string -> unit
|
|
val find_in_path : t -> string -> string
|
|
end
|
|
module Grammar =
|
|
struct
|
|
module type Action =
|
|
sig
|
|
type t
|
|
val mk : 'a -> t
|
|
val get : t -> 'a
|
|
val getf : t -> 'a -> 'b
|
|
val getf2 : t -> 'a -> 'b -> 'c
|
|
end
|
|
type assoc = | NonA | RightA | LeftA
|
|
type position =
|
|
| First | Last | Before of string | After of string
|
|
| Level of string
|
|
module type Structure =
|
|
sig
|
|
module Loc : Loc
|
|
module Action : Action
|
|
module Token : Token with module Loc = Loc
|
|
type gram
|
|
type internal_entry
|
|
type tree
|
|
type token_pattern = ((Token.t -> bool) * string)
|
|
type symbol =
|
|
| Smeta of string * symbol list * Action.t
|
|
| Snterm of internal_entry | Snterml of internal_entry * string
|
|
| Slist0 of symbol | Slist0sep of symbol * symbol
|
|
| Slist1 of symbol | Slist1sep of symbol * symbol
|
|
| Sopt of symbol | Sself | Snext | Stoken of token_pattern
|
|
| Skeyword of string | Stree of tree
|
|
type production_rule = ((symbol list) * Action.t)
|
|
type single_extend_statment =
|
|
((string option) * (assoc option) * (production_rule list))
|
|
type extend_statment =
|
|
((position option) * (single_extend_statment list))
|
|
type delete_statment = symbol list
|
|
type ('a, 'b, 'c) fold =
|
|
internal_entry ->
|
|
symbol list -> ('a Stream.t -> 'b) -> 'a Stream.t -> 'c
|
|
type ('a, 'b, 'c) foldsep =
|
|
internal_entry ->
|
|
symbol list ->
|
|
('a Stream.t -> 'b) ->
|
|
('a Stream.t -> unit) -> 'a Stream.t -> 'c
|
|
end
|
|
module type Dynamic =
|
|
sig
|
|
include Structure
|
|
val mk : unit -> gram
|
|
module Entry :
|
|
sig
|
|
type 'a t
|
|
val mk : gram -> string -> 'a t
|
|
val of_parser :
|
|
gram ->
|
|
string -> ((Token.t * Loc.t) Stream.t -> 'a) -> 'a t
|
|
val setup_parser :
|
|
'a t -> ((Token.t * Loc.t) Stream.t -> 'a) -> unit
|
|
val name : 'a t -> string
|
|
val print : Format.formatter -> 'a t -> unit
|
|
val dump : Format.formatter -> 'a t -> unit
|
|
val obj : 'a t -> internal_entry
|
|
val clear : 'a t -> unit
|
|
end
|
|
val get_filter : gram -> Token.Filter.t
|
|
type 'a not_filtered
|
|
val extend : 'a Entry.t -> extend_statment -> unit
|
|
val delete_rule : 'a Entry.t -> delete_statment -> unit
|
|
val srules :
|
|
'a Entry.t -> ((symbol list) * Action.t) list -> symbol
|
|
val sfold0 : ('a -> 'b -> 'b) -> 'b -> (_, 'a, 'b) fold
|
|
val sfold1 : ('a -> 'b -> 'b) -> 'b -> (_, 'a, 'b) fold
|
|
val sfold0sep : ('a -> 'b -> 'b) -> 'b -> (_, 'a, 'b) foldsep
|
|
val lex :
|
|
gram ->
|
|
Loc.t ->
|
|
char Stream.t -> ((Token.t * Loc.t) Stream.t) not_filtered
|
|
val lex_string :
|
|
gram ->
|
|
Loc.t -> string -> ((Token.t * Loc.t) Stream.t) not_filtered
|
|
val filter :
|
|
gram ->
|
|
((Token.t * Loc.t) Stream.t) not_filtered ->
|
|
(Token.t * Loc.t) Stream.t
|
|
val parse : 'a Entry.t -> Loc.t -> char Stream.t -> 'a
|
|
val parse_string : 'a Entry.t -> Loc.t -> string -> 'a
|
|
val parse_tokens_before_filter :
|
|
'a Entry.t -> ((Token.t * Loc.t) Stream.t) not_filtered -> 'a
|
|
val parse_tokens_after_filter :
|
|
'a Entry.t -> (Token.t * Loc.t) Stream.t -> 'a
|
|
end
|
|
module type Static =
|
|
sig
|
|
include Structure
|
|
module Entry :
|
|
sig
|
|
type 'a t
|
|
val mk : string -> 'a t
|
|
val of_parser :
|
|
string -> ((Token.t * Loc.t) Stream.t -> 'a) -> 'a t
|
|
val setup_parser :
|
|
'a t -> ((Token.t * Loc.t) Stream.t -> 'a) -> unit
|
|
val name : 'a t -> string
|
|
val print : Format.formatter -> 'a t -> unit
|
|
val dump : Format.formatter -> 'a t -> unit
|
|
val obj : 'a t -> internal_entry
|
|
val clear : 'a t -> unit
|
|
end
|
|
val get_filter : unit -> Token.Filter.t
|
|
type 'a not_filtered
|
|
val extend : 'a Entry.t -> extend_statment -> unit
|
|
val delete_rule : 'a Entry.t -> delete_statment -> unit
|
|
val srules :
|
|
'a Entry.t -> ((symbol list) * Action.t) list -> symbol
|
|
val sfold0 : ('a -> 'b -> 'b) -> 'b -> (_, 'a, 'b) fold
|
|
val sfold1 : ('a -> 'b -> 'b) -> 'b -> (_, 'a, 'b) fold
|
|
val sfold0sep : ('a -> 'b -> 'b) -> 'b -> (_, 'a, 'b) foldsep
|
|
val lex :
|
|
Loc.t ->
|
|
char Stream.t -> ((Token.t * Loc.t) Stream.t) not_filtered
|
|
val lex_string :
|
|
Loc.t -> string -> ((Token.t * Loc.t) Stream.t) not_filtered
|
|
val filter :
|
|
((Token.t * Loc.t) Stream.t) not_filtered ->
|
|
(Token.t * Loc.t) Stream.t
|
|
val parse : 'a Entry.t -> Loc.t -> char Stream.t -> 'a
|
|
val parse_string : 'a Entry.t -> Loc.t -> string -> 'a
|
|
val parse_tokens_before_filter :
|
|
'a Entry.t -> ((Token.t * Loc.t) Stream.t) not_filtered -> 'a
|
|
val parse_tokens_after_filter :
|
|
'a Entry.t -> (Token.t * Loc.t) Stream.t -> 'a
|
|
end
|
|
end
|
|
module type Lexer =
|
|
sig
|
|
module Loc : Loc
|
|
module Token : Token with module Loc = Loc
|
|
module Error : Error
|
|
val mk : unit -> Loc.t -> char Stream.t -> (Token.t * Loc.t) Stream.t
|
|
end
|
|
module Parser (Ast : Ast) =
|
|
struct
|
|
module type S =
|
|
sig
|
|
val parse_implem :
|
|
?directive_handler: (Ast.str_item -> Ast.str_item option) ->
|
|
Ast.Loc.t -> char Stream.t -> Ast.str_item
|
|
val parse_interf :
|
|
?directive_handler: (Ast.sig_item -> Ast.sig_item option) ->
|
|
Ast.Loc.t -> char Stream.t -> Ast.sig_item
|
|
end
|
|
end
|
|
module Printer (Ast : Ast) =
|
|
struct
|
|
module type S =
|
|
sig
|
|
val print_interf :
|
|
?input_file: string ->
|
|
?output_file: string -> Ast.sig_item -> unit
|
|
val print_implem :
|
|
?input_file: string ->
|
|
?output_file: string -> Ast.str_item -> unit
|
|
end
|
|
end
|
|
module type Syntax =
|
|
sig
|
|
module Loc : Loc
|
|
module Ast : Ast with module Loc = Loc
|
|
module Token : Token with module Loc = Loc
|
|
module Gram : Grammar.Static with module Loc = Loc
|
|
and module Token = Token
|
|
module AntiquotSyntax : AntiquotSyntax with module Ast = Ast
|
|
module Quotation : Quotation with module Ast = Ast
|
|
include Warning(Loc).S
|
|
include Parser(Ast).S
|
|
include Printer(Ast).S
|
|
end
|
|
module type Camlp4Syntax =
|
|
sig
|
|
module Loc : Loc
|
|
module Ast : Camlp4Ast with module Loc = Loc
|
|
module Token : Camlp4Token with module Loc = Loc
|
|
module Gram : Grammar.Static with module Loc = Loc
|
|
and module Token = Token
|
|
module AntiquotSyntax :
|
|
AntiquotSyntax with module Ast = Camlp4AstToAst(Ast)
|
|
module Quotation : Quotation with module Ast = Camlp4AstToAst(Ast)
|
|
include Warning(Loc).S
|
|
include Parser(Ast).S
|
|
include Printer(Ast).S
|
|
val interf : ((Ast.sig_item list) * (Loc.t option)) Gram.Entry.t
|
|
val implem : ((Ast.str_item list) * (Loc.t option)) Gram.Entry.t
|
|
val top_phrase : (Ast.str_item option) Gram.Entry.t
|
|
val use_file : ((Ast.str_item list) * (Loc.t option)) Gram.Entry.t
|
|
val a_CHAR : string Gram.Entry.t
|
|
val a_FLOAT : string Gram.Entry.t
|
|
val a_INT : string Gram.Entry.t
|
|
val a_INT32 : string Gram.Entry.t
|
|
val a_INT64 : string Gram.Entry.t
|
|
val a_LABEL : string Gram.Entry.t
|
|
val a_LIDENT : string Gram.Entry.t
|
|
val a_NATIVEINT : string Gram.Entry.t
|
|
val a_OPTLABEL : string Gram.Entry.t
|
|
val a_STRING : string Gram.Entry.t
|
|
val a_UIDENT : string Gram.Entry.t
|
|
val a_ident : string Gram.Entry.t
|
|
val amp_ctyp : Ast.ctyp Gram.Entry.t
|
|
val and_ctyp : Ast.ctyp Gram.Entry.t
|
|
val match_case : Ast.match_case Gram.Entry.t
|
|
val match_case0 : Ast.match_case Gram.Entry.t
|
|
val match_case_quot : Ast.match_case Gram.Entry.t
|
|
val binding : Ast.binding Gram.Entry.t
|
|
val binding_quot : Ast.binding Gram.Entry.t
|
|
val rec_binding_quot : Ast.rec_binding Gram.Entry.t
|
|
val class_declaration : Ast.class_expr Gram.Entry.t
|
|
val class_description : Ast.class_type Gram.Entry.t
|
|
val class_expr : Ast.class_expr Gram.Entry.t
|
|
val class_expr_quot : Ast.class_expr Gram.Entry.t
|
|
val class_fun_binding : Ast.class_expr Gram.Entry.t
|
|
val class_fun_def : Ast.class_expr Gram.Entry.t
|
|
val class_info_for_class_expr : Ast.class_expr Gram.Entry.t
|
|
val class_info_for_class_type : Ast.class_type Gram.Entry.t
|
|
val class_longident : Ast.ident Gram.Entry.t
|
|
val class_longident_and_param : Ast.class_expr Gram.Entry.t
|
|
val class_name_and_param : (string * Ast.ctyp) Gram.Entry.t
|
|
val class_sig_item : Ast.class_sig_item Gram.Entry.t
|
|
val class_sig_item_quot : Ast.class_sig_item Gram.Entry.t
|
|
val class_signature : Ast.class_sig_item Gram.Entry.t
|
|
val class_str_item : Ast.class_str_item Gram.Entry.t
|
|
val class_str_item_quot : Ast.class_str_item Gram.Entry.t
|
|
val class_structure : Ast.class_str_item Gram.Entry.t
|
|
val class_type : Ast.class_type Gram.Entry.t
|
|
val class_type_declaration : Ast.class_type Gram.Entry.t
|
|
val class_type_longident : Ast.ident Gram.Entry.t
|
|
val class_type_longident_and_param : Ast.class_type Gram.Entry.t
|
|
val class_type_plus : Ast.class_type Gram.Entry.t
|
|
val class_type_quot : Ast.class_type Gram.Entry.t
|
|
val comma_ctyp : Ast.ctyp Gram.Entry.t
|
|
val comma_expr : Ast.expr Gram.Entry.t
|
|
val comma_ipatt : Ast.patt Gram.Entry.t
|
|
val comma_patt : Ast.patt Gram.Entry.t
|
|
val comma_type_parameter : Ast.ctyp Gram.Entry.t
|
|
val constrain : (Ast.ctyp * Ast.ctyp) Gram.Entry.t
|
|
val constructor_arg_list : Ast.ctyp Gram.Entry.t
|
|
val constructor_declaration : Ast.ctyp Gram.Entry.t
|
|
val constructor_declarations : Ast.ctyp Gram.Entry.t
|
|
val ctyp : Ast.ctyp Gram.Entry.t
|
|
val ctyp_quot : Ast.ctyp Gram.Entry.t
|
|
val cvalue_binding : Ast.expr Gram.Entry.t
|
|
val direction_flag : Ast.meta_bool Gram.Entry.t
|
|
val dummy : unit Gram.Entry.t
|
|
val eq_expr : (string -> Ast.patt -> Ast.patt) Gram.Entry.t
|
|
val expr : Ast.expr Gram.Entry.t
|
|
val expr_eoi : Ast.expr Gram.Entry.t
|
|
val expr_quot : Ast.expr Gram.Entry.t
|
|
val field_expr : Ast.rec_binding Gram.Entry.t
|
|
val fun_binding : Ast.expr Gram.Entry.t
|
|
val fun_def : Ast.expr Gram.Entry.t
|
|
val ident : Ast.ident Gram.Entry.t
|
|
val ident_quot : Ast.ident Gram.Entry.t
|
|
val ipatt : Ast.patt Gram.Entry.t
|
|
val ipatt_tcon : Ast.patt Gram.Entry.t
|
|
val label : string Gram.Entry.t
|
|
val label_declaration : Ast.ctyp Gram.Entry.t
|
|
val label_expr : Ast.rec_binding Gram.Entry.t
|
|
val label_ipatt : Ast.patt Gram.Entry.t
|
|
val label_longident : Ast.ident Gram.Entry.t
|
|
val label_patt : Ast.patt Gram.Entry.t
|
|
val labeled_ipatt : Ast.patt Gram.Entry.t
|
|
val let_binding : Ast.binding Gram.Entry.t
|
|
val meth_list : Ast.ctyp Gram.Entry.t
|
|
val module_binding : Ast.module_binding Gram.Entry.t
|
|
val module_binding0 : Ast.module_expr Gram.Entry.t
|
|
val module_binding_quot : Ast.module_binding Gram.Entry.t
|
|
val module_declaration : Ast.module_type Gram.Entry.t
|
|
val module_expr : Ast.module_expr Gram.Entry.t
|
|
val module_expr_quot : Ast.module_expr Gram.Entry.t
|
|
val module_longident : Ast.ident Gram.Entry.t
|
|
val module_longident_with_app : Ast.ident Gram.Entry.t
|
|
val module_rec_declaration : Ast.module_binding Gram.Entry.t
|
|
val module_type : Ast.module_type Gram.Entry.t
|
|
val module_type_quot : Ast.module_type Gram.Entry.t
|
|
val more_ctyp : Ast.ctyp Gram.Entry.t
|
|
val name_tags : Ast.ctyp Gram.Entry.t
|
|
val opt_as_lident : string Gram.Entry.t
|
|
val opt_class_self_patt : Ast.patt Gram.Entry.t
|
|
val opt_class_self_type : Ast.ctyp Gram.Entry.t
|
|
val opt_comma_ctyp : Ast.ctyp Gram.Entry.t
|
|
val opt_dot_dot : Ast.meta_bool Gram.Entry.t
|
|
val opt_eq_ctyp : Ast.ctyp Gram.Entry.t
|
|
val opt_expr : Ast.expr Gram.Entry.t
|
|
val opt_meth_list : Ast.ctyp Gram.Entry.t
|
|
val opt_mutable : Ast.meta_bool Gram.Entry.t
|
|
val opt_polyt : Ast.ctyp Gram.Entry.t
|
|
val opt_private : Ast.meta_bool Gram.Entry.t
|
|
val opt_rec : Ast.meta_bool Gram.Entry.t
|
|
val opt_virtual : Ast.meta_bool Gram.Entry.t
|
|
val opt_when_expr : Ast.expr Gram.Entry.t
|
|
val patt : Ast.patt Gram.Entry.t
|
|
val patt_as_patt_opt : Ast.patt Gram.Entry.t
|
|
val patt_eoi : Ast.patt Gram.Entry.t
|
|
val patt_quot : Ast.patt Gram.Entry.t
|
|
val patt_tcon : Ast.patt Gram.Entry.t
|
|
val phrase : Ast.str_item Gram.Entry.t
|
|
val poly_type : Ast.ctyp Gram.Entry.t
|
|
val row_field : Ast.ctyp Gram.Entry.t
|
|
val sem_expr : Ast.expr Gram.Entry.t
|
|
val sem_expr_for_list : (Ast.expr -> Ast.expr) Gram.Entry.t
|
|
val sem_patt : Ast.patt Gram.Entry.t
|
|
val sem_patt_for_list : (Ast.patt -> Ast.patt) Gram.Entry.t
|
|
val semi : unit Gram.Entry.t
|
|
val sequence : Ast.expr Gram.Entry.t
|
|
val do_sequence : Ast.expr Gram.Entry.t
|
|
val sig_item : Ast.sig_item Gram.Entry.t
|
|
val sig_item_quot : Ast.sig_item Gram.Entry.t
|
|
val sig_items : Ast.sig_item Gram.Entry.t
|
|
val star_ctyp : Ast.ctyp Gram.Entry.t
|
|
val str_item : Ast.str_item Gram.Entry.t
|
|
val str_item_quot : Ast.str_item Gram.Entry.t
|
|
val str_items : Ast.str_item Gram.Entry.t
|
|
val type_constraint : unit Gram.Entry.t
|
|
val type_declaration : Ast.ctyp Gram.Entry.t
|
|
val type_ident_and_parameters :
|
|
(string * (Ast.ctyp list)) Gram.Entry.t
|
|
val type_kind : Ast.ctyp Gram.Entry.t
|
|
val type_longident : Ast.ident Gram.Entry.t
|
|
val type_longident_and_parameters : Ast.ctyp Gram.Entry.t
|
|
val type_parameter : Ast.ctyp Gram.Entry.t
|
|
val type_parameters : (Ast.ctyp -> Ast.ctyp) Gram.Entry.t
|
|
val typevars : Ast.ctyp Gram.Entry.t
|
|
val val_longident : Ast.ident Gram.Entry.t
|
|
val value_let : unit Gram.Entry.t
|
|
val value_val : unit Gram.Entry.t
|
|
val with_constr : Ast.with_constr Gram.Entry.t
|
|
val with_constr_quot : Ast.with_constr Gram.Entry.t
|
|
val prefixop : Ast.expr Gram.Entry.t
|
|
val infixop0 : Ast.expr Gram.Entry.t
|
|
val infixop1 : Ast.expr Gram.Entry.t
|
|
val infixop2 : Ast.expr Gram.Entry.t
|
|
val infixop3 : Ast.expr Gram.Entry.t
|
|
val infixop4 : Ast.expr Gram.Entry.t
|
|
end
|
|
module type SyntaxExtension =
|
|
functor (Syn : Syntax) -> Syntax with module Loc = Syn.Loc
|
|
and module Ast = Syn.Ast and module Token = Syn.Token
|
|
and module Gram = Syn.Gram
|
|
and module AntiquotSyntax = Syn.AntiquotSyntax
|
|
and module Quotation = Syn.Quotation
|
|
end
|
|
module ErrorHandler :
|
|
sig
|
|
val print : Format.formatter -> exn -> unit
|
|
val try_print : Format.formatter -> exn -> unit
|
|
val to_string : exn -> string
|
|
val try_to_string : exn -> string
|
|
val register : (Format.formatter -> exn -> unit) -> unit
|
|
module Register (Error : Sig.Error) : sig end
|
|
module ObjTools :
|
|
sig
|
|
val print : Format.formatter -> Obj.t -> unit
|
|
val print_desc : Format.formatter -> Obj.t -> unit
|
|
val to_string : Obj.t -> string
|
|
val desc : Obj.t -> string
|
|
end
|
|
end =
|
|
struct
|
|
open Format
|
|
module ObjTools =
|
|
struct
|
|
let desc obj =
|
|
if Obj.is_block obj
|
|
then "tag = " ^ (string_of_int (Obj.tag obj))
|
|
else "int_val = " ^ (string_of_int (Obj.obj obj))
|
|
let rec to_string r =
|
|
if Obj.is_int r
|
|
then
|
|
(let i : int = Obj.magic r
|
|
in (string_of_int i) ^ (" | CstTag" ^ (string_of_int (i + 1))))
|
|
else
|
|
(let rec get_fields acc =
|
|
function
|
|
| 0 -> acc
|
|
| n -> let n = n - 1 in get_fields ((Obj.field r n) :: acc) n in
|
|
let rec is_list r =
|
|
if Obj.is_int r
|
|
then r = (Obj.repr 0)
|
|
else
|
|
(let s = Obj.size r
|
|
and t = Obj.tag r
|
|
in (t = 0) && ((s = 2) && (is_list (Obj.field r 1)))) in
|
|
let rec get_list r =
|
|
if Obj.is_int r
|
|
then []
|
|
else
|
|
(let h = Obj.field r 0
|
|
and t = get_list (Obj.field r 1)
|
|
in h :: t) in
|
|
let opaque name = "<" ^ (name ^ ">") in
|
|
let s = Obj.size r
|
|
and t = Obj.tag r
|
|
in
|
|
match t with
|
|
| _ when is_list r ->
|
|
let fields = get_list r
|
|
in
|
|
"[" ^
|
|
((String.concat "; " (List.map to_string fields)) ^
|
|
"]")
|
|
| 0 ->
|
|
let fields = get_fields [] s
|
|
in
|
|
"(" ^
|
|
((String.concat ", " (List.map to_string fields)) ^
|
|
")")
|
|
| x when x = Obj.lazy_tag -> opaque "lazy"
|
|
| x when x = Obj.closure_tag -> opaque "closure"
|
|
| x when x = Obj.object_tag ->
|
|
let fields = get_fields [] s in
|
|
let (_class, id, slots) =
|
|
(match fields with
|
|
| h :: h' :: t -> (h, h', t)
|
|
| _ -> assert false)
|
|
in
|
|
"Object #" ^
|
|
((to_string id) ^
|
|
(" (" ^
|
|
((String.concat ", " (List.map to_string slots))
|
|
^ ")")))
|
|
| x when x = Obj.infix_tag -> opaque "infix"
|
|
| x when x = Obj.forward_tag -> opaque "forward"
|
|
| x when x < Obj.no_scan_tag ->
|
|
let fields = get_fields [] s
|
|
in
|
|
"Tag" ^
|
|
((string_of_int t) ^
|
|
(" (" ^
|
|
((String.concat ", " (List.map to_string fields))
|
|
^ ")")))
|
|
| x when x = Obj.string_tag ->
|
|
"\"" ^ ((String.escaped (Obj.magic r : string)) ^ "\"")
|
|
| x when x = Obj.double_tag ->
|
|
string_of_float (Obj.magic r : float)
|
|
| x when x = Obj.abstract_tag -> opaque "abstract"
|
|
| x when x = Obj.custom_tag -> opaque "custom"
|
|
| x when x = Obj.final_tag -> opaque "final"
|
|
| _ ->
|
|
failwith
|
|
("ObjTools.to_string: unknown tag (" ^
|
|
((string_of_int t) ^ ")")))
|
|
let print ppf x = fprintf ppf "%s" (to_string x)
|
|
let print_desc ppf x = fprintf ppf "%s" (desc x)
|
|
end
|
|
let default_handler ppf x =
|
|
let x = Obj.repr x
|
|
in
|
|
(fprintf ppf "Camlp4: Uncaught exception: %s"
|
|
(Obj.obj (Obj.field (Obj.field x 0) 0) : string);
|
|
if (Obj.size x) > 1
|
|
then
|
|
(pp_print_string ppf " (";
|
|
for i = 1 to (Obj.size x) - 1 do
|
|
if i > 1 then pp_print_string ppf ", " else ();
|
|
ObjTools.print ppf (Obj.field x i)
|
|
done;
|
|
pp_print_char ppf ')')
|
|
else ();
|
|
fprintf ppf "@.")
|
|
let handler =
|
|
ref (fun ppf default_handler exn -> default_handler ppf exn)
|
|
let register f =
|
|
let current_handler = !handler
|
|
in
|
|
handler :=
|
|
fun ppf default_handler exn ->
|
|
try f ppf exn
|
|
with | exn -> current_handler ppf default_handler exn
|
|
module Register (Error : Sig.Error) =
|
|
struct
|
|
let _ =
|
|
let current_handler = !handler
|
|
in
|
|
handler :=
|
|
fun ppf default_handler ->
|
|
function
|
|
| Error.E x -> Error.print ppf x
|
|
| x -> current_handler ppf default_handler x
|
|
end
|
|
let gen_print ppf default_handler =
|
|
function
|
|
| Out_of_memory -> fprintf ppf "Out of memory"
|
|
| Assert_failure ((file, line, char)) ->
|
|
fprintf ppf "Assertion failed, file %S, line %d, char %d" file line
|
|
char
|
|
| Match_failure ((file, line, char)) ->
|
|
fprintf ppf "Pattern matching failed, file %S, line %d, char %d"
|
|
file line char
|
|
| Failure str -> fprintf ppf "Failure: %S" str
|
|
| Invalid_argument str -> fprintf ppf "Invalid argument: %S" str
|
|
| Sys_error str -> fprintf ppf "I/O error: %S" str
|
|
| Stream.Failure -> fprintf ppf "Parse failure"
|
|
| Stream.Error str -> fprintf ppf "Parse error: %s" str
|
|
| x -> !handler ppf default_handler x
|
|
let print ppf = gen_print ppf default_handler
|
|
let try_print ppf = gen_print ppf (fun _ -> raise)
|
|
let to_string exn =
|
|
let buf = Buffer.create 128 in
|
|
let () = bprintf buf "%a" print exn in Buffer.contents buf
|
|
let try_to_string exn =
|
|
let buf = Buffer.create 128 in
|
|
let () = bprintf buf "%a" try_print exn in Buffer.contents buf
|
|
end
|
|
module Struct =
|
|
struct
|
|
module Loc : sig include Sig.Loc end =
|
|
struct
|
|
open Format
|
|
type pos = { line : int; bol : int; off : int }
|
|
type t =
|
|
{ file_name : string; start : pos; stop : pos; ghost : bool
|
|
}
|
|
let dump_sel f x =
|
|
let s =
|
|
match x with
|
|
| `start -> "`start"
|
|
| `stop -> "`stop"
|
|
| `both -> "`both"
|
|
| _ -> "<not-printable>"
|
|
in pp_print_string f s
|
|
let dump_pos f x =
|
|
fprintf f "@[<hov 2>{ line = %d ;@ bol = %d ;@ off = %d } : pos@]"
|
|
x.line x.bol x.off
|
|
let dump_long f x =
|
|
fprintf f
|
|
"@[<hov 2>{ file_name = %s ;@ start = %a (%d-%d);@ stop = %a (%d);@ ghost = %b@ } : Loc.t@]"
|
|
x.file_name dump_pos x.start (x.start.off - x.start.bol)
|
|
(x.stop.off - x.start.bol) dump_pos x.stop
|
|
(x.stop.off - x.stop.bol) x.ghost
|
|
let dump f x =
|
|
fprintf f "[%S: %d:%d-%d %d:%d%t]" x.file_name x.start.line
|
|
(x.start.off - x.start.bol) (x.stop.off - x.start.bol)
|
|
x.stop.line (x.stop.off - x.stop.bol)
|
|
(fun o -> if x.ghost then fprintf o " (ghost)" else ())
|
|
let start_pos = { line = 1; bol = 0; off = 0; }
|
|
let ghost =
|
|
{
|
|
file_name = "ghost-location";
|
|
start = start_pos;
|
|
stop = start_pos;
|
|
ghost = true;
|
|
}
|
|
let mk file_name =
|
|
{
|
|
file_name = file_name;
|
|
start = start_pos;
|
|
stop = start_pos;
|
|
ghost = false;
|
|
}
|
|
let of_tuple (file_name, start_line, start_bol, start_off, stop_line,
|
|
stop_bol, stop_off, ghost)
|
|
=
|
|
{
|
|
file_name = file_name;
|
|
start = { line = start_line; bol = start_bol; off = start_off; };
|
|
stop = { line = stop_line; bol = stop_bol; off = stop_off; };
|
|
ghost = ghost;
|
|
}
|
|
let to_tuple {
|
|
file_name = file_name;
|
|
start =
|
|
{
|
|
line = start_line;
|
|
bol = start_bol;
|
|
off = start_off
|
|
};
|
|
stop =
|
|
{ line = stop_line; bol = stop_bol; off = stop_off };
|
|
ghost = ghost
|
|
} =
|
|
(file_name, start_line, start_bol, start_off, stop_line, stop_bol,
|
|
stop_off, ghost)
|
|
let pos_of_lexing_position p =
|
|
let pos =
|
|
{
|
|
line = p.Lexing.pos_lnum;
|
|
bol = p.Lexing.pos_bol;
|
|
off = p.Lexing.pos_cnum;
|
|
}
|
|
in pos
|
|
let pos_to_lexing_position p file_name =
|
|
{
|
|
Lexing.pos_fname = file_name;
|
|
pos_lnum = p.line;
|
|
pos_bol = p.bol;
|
|
pos_cnum = p.off;
|
|
}
|
|
let better_file_name a b =
|
|
match (a, b) with
|
|
| ("", "") -> a
|
|
| ("", x) -> x
|
|
| (x, "") -> x
|
|
| ("-", x) -> x
|
|
| (x, "-") -> x
|
|
| (x, _) -> x
|
|
let of_lexbuf lb =
|
|
let start = Lexing.lexeme_start_p lb
|
|
and stop = Lexing.lexeme_end_p lb in
|
|
let loc =
|
|
{
|
|
file_name =
|
|
better_file_name start.Lexing.pos_fname stop.Lexing.pos_fname;
|
|
start = pos_of_lexing_position start;
|
|
stop = pos_of_lexing_position stop;
|
|
ghost = false;
|
|
}
|
|
in loc
|
|
let of_lexing_position pos =
|
|
let loc =
|
|
{
|
|
file_name = pos.Lexing.pos_fname;
|
|
start = pos_of_lexing_position pos;
|
|
stop = pos_of_lexing_position pos;
|
|
ghost = false;
|
|
}
|
|
in loc
|
|
let to_ocaml_location x =
|
|
{
|
|
Location.loc_start = pos_to_lexing_position x.start x.file_name;
|
|
loc_end = pos_to_lexing_position x.stop x.file_name;
|
|
loc_ghost = x.ghost;
|
|
}
|
|
let of_ocaml_location x =
|
|
let (a, b) = ((x.Location.loc_start), (x.Location.loc_end)) in
|
|
let res =
|
|
{
|
|
file_name =
|
|
better_file_name a.Lexing.pos_fname b.Lexing.pos_fname;
|
|
start = pos_of_lexing_position a;
|
|
stop = pos_of_lexing_position b;
|
|
ghost = x.Location.loc_ghost;
|
|
}
|
|
in res
|
|
let start_pos x = pos_to_lexing_position x.start x.file_name
|
|
let stop_pos x = pos_to_lexing_position x.stop x.file_name
|
|
let merge a b =
|
|
if a == b
|
|
then a
|
|
else
|
|
(let r =
|
|
match ((a.ghost), (b.ghost)) with
|
|
| (false, false) -> { (a) with stop = b.stop; }
|
|
| (true, true) -> { (a) with stop = b.stop; }
|
|
| (true, _) -> { (a) with stop = b.stop; }
|
|
| (_, true) -> { (b) with start = a.start; }
|
|
in r)
|
|
let join x = { (x) with stop = x.start; }
|
|
let map f start_stop_both x =
|
|
match start_stop_both with
|
|
| `start -> { (x) with start = f x.start; }
|
|
| `stop -> { (x) with stop = f x.stop; }
|
|
| `both -> { (x) with start = f x.start; stop = f x.stop; }
|
|
let move_pos chars x = { (x) with off = x.off + chars; }
|
|
let move s chars x = map (move_pos chars) s x
|
|
let move_line lines x =
|
|
let move_line_pos x =
|
|
{ (x) with line = x.line + lines; bol = x.off; }
|
|
in map move_line_pos `both x
|
|
let shift width x =
|
|
{ (x) with start = x.stop; stop = move_pos width x.stop; }
|
|
let file_name x = x.file_name
|
|
let start_line x = x.start.line
|
|
let stop_line x = x.stop.line
|
|
let start_bol x = x.start.bol
|
|
let stop_bol x = x.stop.bol
|
|
let start_off x = x.start.off
|
|
let stop_off x = x.stop.off
|
|
let is_ghost x = x.ghost
|
|
let set_file_name s x = { (x) with file_name = s; }
|
|
let ghostify x = { (x) with ghost = true; }
|
|
let make_absolute x =
|
|
let pwd = Sys.getcwd ()
|
|
in
|
|
if Filename.is_relative x.file_name
|
|
then { (x) with file_name = Filename.concat pwd x.file_name; }
|
|
else x
|
|
let strictly_before x y =
|
|
let b = (x.stop.off < y.start.off) && (x.file_name = y.file_name)
|
|
in b
|
|
let to_string x =
|
|
let (a, b) = ((x.start), (x.stop)) in
|
|
let res =
|
|
sprintf "File \"%s\", line %d, characters %d-%d" x.file_name
|
|
a.line (a.off - a.bol) (b.off - a.bol)
|
|
in
|
|
if x.start.line <> x.stop.line
|
|
then
|
|
sprintf "%s (end at line %d, character %d)" res x.stop.line
|
|
(b.off - b.bol)
|
|
else res
|
|
let print out x = pp_print_string out (to_string x)
|
|
let check x msg =
|
|
if
|
|
((start_line x) > (stop_line x)) ||
|
|
(((start_bol x) > (stop_bol x)) ||
|
|
(((start_off x) > (stop_off x)) ||
|
|
(((start_line x) < 0) ||
|
|
(((stop_line x) < 0) ||
|
|
(((start_bol x) < 0) ||
|
|
(((stop_bol x) < 0) ||
|
|
(((start_off x) < 0) || ((stop_off x) < 0))))))))
|
|
then
|
|
(eprintf "*** Warning: (%s) strange positions ***\n%a@\n" msg
|
|
print x;
|
|
false)
|
|
else true
|
|
exception Exc_located of t * exn
|
|
let _ =
|
|
ErrorHandler.register
|
|
(fun ppf ->
|
|
function
|
|
| Exc_located (loc, exn) ->
|
|
fprintf ppf "%a:@\n%a" print loc ErrorHandler.print exn
|
|
| exn -> raise exn)
|
|
let name = ref "_loc"
|
|
let raise loc exc =
|
|
match exc with
|
|
| Exc_located (_, _) -> raise exc
|
|
| _ -> raise (Exc_located (loc, exc))
|
|
end
|
|
module Token :
|
|
sig
|
|
module Make (Loc : Sig.Loc) : Sig.Camlp4Token with module Loc = Loc
|
|
module Eval :
|
|
sig
|
|
val char : string -> char
|
|
val string : ?strict: unit -> string -> string
|
|
end
|
|
end =
|
|
struct
|
|
open Format
|
|
module Make (Loc : Sig.Loc) : Sig.Camlp4Token with module Loc = Loc =
|
|
struct
|
|
module Loc = Loc
|
|
open Sig
|
|
type t = camlp4_token
|
|
type token = t
|
|
let to_string =
|
|
function
|
|
| KEYWORD s -> sprintf "KEYWORD %S" s
|
|
| SYMBOL s -> sprintf "SYMBOL %S" s
|
|
| LIDENT s -> sprintf "LIDENT %S" s
|
|
| UIDENT s -> sprintf "UIDENT %S" s
|
|
| INT (_, s) -> sprintf "INT %s" s
|
|
| INT32 (_, s) -> sprintf "INT32 %sd" s
|
|
| INT64 (_, s) -> sprintf "INT64 %sd" s
|
|
| NATIVEINT (_, s) -> sprintf "NATIVEINT %sd" s
|
|
| FLOAT (_, s) -> sprintf "FLOAT %s" s
|
|
| CHAR (_, s) -> sprintf "CHAR '%s'" s
|
|
| STRING (_, s) -> sprintf "STRING \"%s\"" s
|
|
| LABEL s -> sprintf "LABEL %S" s
|
|
| OPTLABEL s -> sprintf "OPTLABEL %S" s
|
|
| ANTIQUOT (n, s) -> sprintf "ANTIQUOT %s: %S" n s
|
|
| QUOTATION x ->
|
|
sprintf
|
|
"QUOTATION { q_name=%S; q_loc=%S; q_shift=%d; q_contents=%S }"
|
|
x.q_name x.q_loc x.q_shift x.q_contents
|
|
| COMMENT s -> sprintf "COMMENT %S" s
|
|
| BLANKS s -> sprintf "BLANKS %S" s
|
|
| NEWLINE -> sprintf "NEWLINE"
|
|
| EOI -> sprintf "EOI"
|
|
| ESCAPED_IDENT s -> sprintf "ESCAPED_IDENT %S" s
|
|
| LINE_DIRECTIVE (i, None) -> sprintf "LINE_DIRECTIVE %d" i
|
|
| LINE_DIRECTIVE (i, (Some s)) ->
|
|
sprintf "LINE_DIRECTIVE %d %S" i s
|
|
let print ppf x = pp_print_string ppf (to_string x)
|
|
let match_keyword kwd =
|
|
function | KEYWORD kwd' when kwd = kwd' -> true | _ -> false
|
|
let extract_string =
|
|
function
|
|
| KEYWORD s | SYMBOL s | LIDENT s | UIDENT s | INT (_, s) |
|
|
INT32 (_, s) | INT64 (_, s) | NATIVEINT (_, s) |
|
|
FLOAT (_, s) | CHAR (_, s) | STRING (_, s) | LABEL s |
|
|
OPTLABEL s | COMMENT s | BLANKS s | ESCAPED_IDENT s -> s
|
|
| tok ->
|
|
invalid_arg
|
|
("Cannot extract a string from this token: " ^
|
|
(to_string tok))
|
|
module Error =
|
|
struct
|
|
type t =
|
|
| Illegal_token of string | Keyword_as_label of string
|
|
| Illegal_token_pattern of string * string
|
|
| Illegal_constructor of string
|
|
exception E of t
|
|
let print ppf =
|
|
function
|
|
| Illegal_token s -> fprintf ppf "Illegal token (%s)" s
|
|
| Keyword_as_label kwd ->
|
|
fprintf ppf
|
|
"`%s' is a keyword, it cannot be used as label name"
|
|
kwd
|
|
| Illegal_token_pattern (p_con, p_prm) ->
|
|
fprintf ppf "Illegal token pattern: %s %S" p_con p_prm
|
|
| Illegal_constructor con ->
|
|
fprintf ppf "Illegal constructor %S" con
|
|
let to_string x =
|
|
let b = Buffer.create 50 in
|
|
let () = bprintf b "%a" print x in Buffer.contents b
|
|
end
|
|
let _ = let module M = ErrorHandler.Register(Error) in ()
|
|
module Filter =
|
|
struct
|
|
type token_filter = (t, Loc.t) stream_filter
|
|
type t =
|
|
{ is_kwd : string -> bool; mutable filter : token_filter
|
|
}
|
|
let err error loc =
|
|
raise (Loc.Exc_located (loc, Error.E error))
|
|
let keyword_conversion tok is_kwd =
|
|
match tok with
|
|
| SYMBOL s | LIDENT s | UIDENT s when is_kwd s -> KEYWORD s
|
|
| ESCAPED_IDENT s -> LIDENT s
|
|
| _ -> tok
|
|
let check_keyword_as_label tok loc is_kwd =
|
|
let s =
|
|
match tok with | LABEL s -> s | OPTLABEL s -> s | _ -> ""
|
|
in
|
|
if (s <> "") && (is_kwd s)
|
|
then err (Error.Keyword_as_label s) loc
|
|
else ()
|
|
let check_unknown_keywords tok loc =
|
|
match tok with
|
|
| SYMBOL s -> err (Error.Illegal_token s) loc
|
|
| _ -> ()
|
|
let error_no_respect_rules p_con p_prm =
|
|
raise
|
|
(Error.E (Error.Illegal_token_pattern (p_con, p_prm)))
|
|
let check_keyword _ = true
|
|
let error_on_unknown_keywords = ref false
|
|
let rec ignore_layout (__strm : _ Stream.t) =
|
|
match Stream.peek __strm with
|
|
| Some
|
|
(((COMMENT _ | BLANKS _ | NEWLINE |
|
|
LINE_DIRECTIVE (_, _)),
|
|
_))
|
|
-> (Stream.junk __strm; ignore_layout __strm)
|
|
| Some x ->
|
|
(Stream.junk __strm;
|
|
let s = __strm
|
|
in
|
|
Stream.icons x
|
|
(Stream.slazy (fun _ -> ignore_layout s)))
|
|
| _ -> Stream.sempty
|
|
let mk is_kwd = { is_kwd = is_kwd; filter = ignore_layout; }
|
|
let filter x =
|
|
let f tok loc =
|
|
let tok = keyword_conversion tok x.is_kwd
|
|
in
|
|
(check_keyword_as_label tok loc x.is_kwd;
|
|
if !error_on_unknown_keywords
|
|
then check_unknown_keywords tok loc
|
|
else ();
|
|
(tok, loc)) in
|
|
let rec filter (__strm : _ Stream.t) =
|
|
match Stream.peek __strm with
|
|
| Some ((tok, loc)) ->
|
|
(Stream.junk __strm;
|
|
let s = __strm
|
|
in
|
|
Stream.lcons (fun _ -> f tok loc)
|
|
(Stream.slazy (fun _ -> filter s)))
|
|
| _ -> Stream.sempty in
|
|
let rec tracer (__strm : _ Stream.t) =
|
|
match Stream.peek __strm with
|
|
| Some (((_tok, _loc) as x)) ->
|
|
(Stream.junk __strm;
|
|
let xs = __strm
|
|
in
|
|
Stream.icons x (Stream.slazy (fun _ -> tracer xs)))
|
|
| _ -> Stream.sempty
|
|
in fun strm -> tracer (x.filter (filter strm))
|
|
let define_filter x f = x.filter <- f x.filter
|
|
let keyword_added _ _ _ = ()
|
|
let keyword_removed _ _ = ()
|
|
end
|
|
end
|
|
module Eval =
|
|
struct
|
|
let valch x = (Char.code x) - (Char.code '0')
|
|
let valch_hex x =
|
|
let d = Char.code x
|
|
in
|
|
if d >= 97
|
|
then d - 87
|
|
else if d >= 65 then d - 55 else d - 48
|
|
let rec skip_indent (__strm : _ Stream.t) =
|
|
match Stream.peek __strm with
|
|
| Some (' ' | '\t') -> (Stream.junk __strm; skip_indent __strm)
|
|
| _ -> ()
|
|
let skip_opt_linefeed (__strm : _ Stream.t) =
|
|
match Stream.peek __strm with
|
|
| Some '\010' -> (Stream.junk __strm; ())
|
|
| _ -> ()
|
|
let rec backslash (__strm : _ Stream.t) =
|
|
match Stream.peek __strm with
|
|
| Some '\010' -> (Stream.junk __strm; '\010')
|
|
| Some '\013' -> (Stream.junk __strm; '\013')
|
|
| Some 'n' -> (Stream.junk __strm; '\n')
|
|
| Some 'r' -> (Stream.junk __strm; '\r')
|
|
| Some 't' -> (Stream.junk __strm; '\t')
|
|
| Some 'b' -> (Stream.junk __strm; '\b')
|
|
| Some '\\' -> (Stream.junk __strm; '\\')
|
|
| Some '"' -> (Stream.junk __strm; '"')
|
|
| Some '\'' -> (Stream.junk __strm; '\'')
|
|
| Some ' ' -> (Stream.junk __strm; ' ')
|
|
| Some (('0' .. '9' as c1)) ->
|
|
(Stream.junk __strm;
|
|
(match Stream.peek __strm with
|
|
| Some (('0' .. '9' as c2)) ->
|
|
(Stream.junk __strm;
|
|
(match Stream.peek __strm with
|
|
| Some (('0' .. '9' as c3)) ->
|
|
(Stream.junk __strm;
|
|
Char.chr
|
|
(((100 * (valch c1)) + (10 * (valch c2))) +
|
|
(valch c3)))
|
|
| _ -> raise (Stream.Error "")))
|
|
| _ -> raise (Stream.Error "")))
|
|
| Some 'x' ->
|
|
(Stream.junk __strm;
|
|
(match Stream.peek __strm with
|
|
| Some (('0' .. '9' | 'a' .. 'f' | 'A' .. 'F' as c1)) ->
|
|
(Stream.junk __strm;
|
|
(match Stream.peek __strm with
|
|
| Some
|
|
(('0' .. '9' | 'a' .. 'f' | 'A' .. 'F' as c2))
|
|
->
|
|
(Stream.junk __strm;
|
|
Char.chr
|
|
((16 * (valch_hex c1)) + (valch_hex c2)))
|
|
| _ -> raise (Stream.Error "")))
|
|
| _ -> raise (Stream.Error "")))
|
|
| _ -> raise Stream.Failure
|
|
let rec backslash_in_string strict store (__strm : _ Stream.t) =
|
|
match Stream.peek __strm with
|
|
| Some '\010' -> (Stream.junk __strm; skip_indent __strm)
|
|
| Some '\013' ->
|
|
(Stream.junk __strm;
|
|
let s = __strm in (skip_opt_linefeed s; skip_indent s))
|
|
| _ ->
|
|
(match try Some (backslash __strm)
|
|
with | Stream.Failure -> None
|
|
with
|
|
| Some x -> store x
|
|
| _ ->
|
|
(match Stream.peek __strm with
|
|
| Some c when not strict ->
|
|
(Stream.junk __strm; store '\\'; store c)
|
|
| _ -> failwith "invalid string token"))
|
|
let char s =
|
|
if (String.length s) = 1
|
|
then s.[0]
|
|
else
|
|
if (String.length s) = 0
|
|
then failwith "invalid char token"
|
|
else
|
|
(let (__strm : _ Stream.t) = Stream.of_string s
|
|
in
|
|
match Stream.peek __strm with
|
|
| Some '\\' ->
|
|
(Stream.junk __strm;
|
|
(try backslash __strm
|
|
with | Stream.Failure -> raise (Stream.Error "")))
|
|
| _ -> failwith "invalid char token")
|
|
let string ?strict s =
|
|
let buf = Buffer.create 23 in
|
|
let store = Buffer.add_char buf in
|
|
let rec parse (__strm : _ Stream.t) =
|
|
match Stream.peek __strm with
|
|
| Some '\\' ->
|
|
(Stream.junk __strm;
|
|
let _ =
|
|
(try backslash_in_string (strict <> None) store __strm
|
|
with | Stream.Failure -> raise (Stream.Error ""))
|
|
in parse __strm)
|
|
| Some c ->
|
|
(Stream.junk __strm;
|
|
let s = __strm in (store c; parse s))
|
|
| _ -> Buffer.contents buf
|
|
in parse (Stream.of_string s)
|
|
end
|
|
end
|
|
module Lexer =
|
|
struct
|
|
module TokenEval = Token.Eval
|
|
module Make (Token : Sig.Camlp4Token) =
|
|
struct
|
|
module Loc = Token.Loc
|
|
module Token = Token
|
|
open Lexing
|
|
open Sig
|
|
module Error =
|
|
struct
|
|
type t =
|
|
| Illegal_character of char | Illegal_escape of string
|
|
| Unterminated_comment | Unterminated_string
|
|
| Unterminated_quotation | Unterminated_antiquot
|
|
| Unterminated_string_in_comment | Comment_start
|
|
| Comment_not_end | Literal_overflow of string
|
|
exception E of t
|
|
open Format
|
|
let print ppf =
|
|
function
|
|
| Illegal_character c ->
|
|
fprintf ppf "Illegal character (%s)" (Char.escaped c)
|
|
| Illegal_escape s ->
|
|
fprintf ppf
|
|
"Illegal backslash escape in string or character (%s)"
|
|
s
|
|
| Unterminated_comment ->
|
|
fprintf ppf "Comment not terminated"
|
|
| Unterminated_string ->
|
|
fprintf ppf "String literal not terminated"
|
|
| Unterminated_string_in_comment ->
|
|
fprintf ppf
|
|
"This comment contains an unterminated string literal"
|
|
| Unterminated_quotation ->
|
|
fprintf ppf "Quotation not terminated"
|
|
| Unterminated_antiquot ->
|
|
fprintf ppf "Antiquotation not terminated"
|
|
| Literal_overflow ty ->
|
|
fprintf ppf
|
|
"Integer literal exceeds the range of representable integers of type %s"
|
|
ty
|
|
| Comment_start ->
|
|
fprintf ppf "this is the start of a comment"
|
|
| Comment_not_end ->
|
|
fprintf ppf "this is not the end of a comment"
|
|
let to_string x =
|
|
let b = Buffer.create 50 in
|
|
let () = bprintf b "%a" print x in Buffer.contents b
|
|
end
|
|
let _ = let module M = ErrorHandler.Register(Error) in ()
|
|
open Error
|
|
type context =
|
|
{ loc : Loc.t; in_comment : bool; quotations : bool;
|
|
antiquots : bool; lexbuf : lexbuf; buffer : Buffer.t
|
|
}
|
|
let default_context lb =
|
|
{
|
|
loc = Loc.ghost;
|
|
in_comment = false;
|
|
quotations = true;
|
|
antiquots = false;
|
|
lexbuf = lb;
|
|
buffer = Buffer.create 256;
|
|
}
|
|
let store c = Buffer.add_string c.buffer (Lexing.lexeme c.lexbuf)
|
|
let istore_char c i =
|
|
Buffer.add_char c.buffer (Lexing.lexeme_char c.lexbuf i)
|
|
let buff_contents c =
|
|
let contents = Buffer.contents c.buffer
|
|
in (Buffer.reset c.buffer; contents)
|
|
let loc c = Loc.merge c.loc (Loc.of_lexbuf c.lexbuf)
|
|
let quotations c = c.quotations
|
|
let antiquots c = c.antiquots
|
|
let is_in_comment c = c.in_comment
|
|
let in_comment c = { (c) with in_comment = true; }
|
|
let set_start_p c = c.lexbuf.lex_start_p <- Loc.start_pos c.loc
|
|
let move_start_p shift c =
|
|
let p = c.lexbuf.lex_start_p
|
|
in
|
|
c.lexbuf.lex_start_p <-
|
|
{ (p) with pos_cnum = p.pos_cnum + shift; }
|
|
let update_loc c = { (c) with loc = Loc.of_lexbuf c.lexbuf; }
|
|
let with_curr_loc f c = f (update_loc c) c.lexbuf
|
|
let parse_nested f c =
|
|
(with_curr_loc f c; set_start_p c; buff_contents c)
|
|
let shift n c = { (c) with loc = Loc.move `both n c.loc; }
|
|
let store_parse f c = (store c; f c c.lexbuf)
|
|
let parse f c = f c c.lexbuf
|
|
let mk_quotation quotation c name loc shift =
|
|
let s = parse_nested quotation (update_loc c) in
|
|
let contents = String.sub s 0 ((String.length s) - 2)
|
|
in
|
|
QUOTATION
|
|
{
|
|
q_name = name;
|
|
q_loc = loc;
|
|
q_shift = shift;
|
|
q_contents = contents;
|
|
}
|
|
let update_loc c file line absolute chars =
|
|
let lexbuf = c.lexbuf in
|
|
let pos = lexbuf.lex_curr_p in
|
|
let new_file =
|
|
match file with | None -> pos.pos_fname | Some s -> s
|
|
in
|
|
lexbuf.lex_curr_p <-
|
|
{
|
|
(pos)
|
|
with
|
|
pos_fname = new_file;
|
|
pos_lnum = if absolute then line else pos.pos_lnum + line;
|
|
pos_bol = pos.pos_cnum - chars;
|
|
}
|
|
let err error loc = raise (Loc.Exc_located (loc, Error.E error))
|
|
let warn error loc =
|
|
Format.eprintf "Warning: %a: %a@." Loc.print loc Error.print
|
|
error
|
|
let __ocaml_lex_tables =
|
|
{
|
|
Lexing.lex_base =
|
|
"\000\000\223\255\224\255\224\000\226\255\253\000\035\001\072\001\
|
|
\109\001\146\001\183\001\218\001\068\000\190\001\002\002\227\255\
|
|
\119\000\046\002\087\002\154\002\123\000\244\255\173\002\206\002\
|
|
\023\003\231\003\198\004\034\005\120\000\001\000\255\255\242\005\
|
|
\253\255\194\006\252\255\245\255\246\255\247\255\092\000\224\000\
|
|
\082\000\105\000\098\003\050\004\061\006\213\001\020\002\129\000\
|
|
\162\007\095\000\151\000\099\000\243\255\242\255\241\255\150\005\
|
|
\253\000\100\000\104\002\075\006\162\007\255\007\039\008\106\008\
|
|
\145\008\212\008\109\000\239\255\249\008\024\001\060\009\099\009\
|
|
\166\009\232\255\231\255\230\255\205\009\016\010\055\010\122\010\
|
|
\161\010\075\001\228\255\229\255\238\255\201\007\196\010\233\010\
|
|
\014\011\051\011\088\011\125\011\162\011\199\011\236\011\052\007\
|
|
\153\003\004\000\233\255\007\000\153\000\175\002\008\000\005\000\
|
|
\233\255\243\011\024\012\061\012\098\012\105\012\142\012\179\012\
|
|
\216\012\251\012\030\013\035\013\070\013\105\013\142\013\179\013\
|
|
\241\013\006\000\192\002\251\255\203\014\006\001\121\000\122\000\
|
|
\254\255\011\015\202\015\154\016\106\017\074\018\126\000\002\001\
|
|
\149\000\150\000\249\255\248\255\022\007\184\002\152\000\079\004\
|
|
\208\000\060\014\219\000\165\001\009\000\101\018\250\255\021\016\
|
|
\198\004\079\001\070\001\215\004\229\016\140\018\207\018\174\019\
|
|
\204\019\171\020\138\021\171\021\235\021\187\022\254\255\164\001\
|
|
\012\000\197\000\079\001\251\022\186\023\138\024\090\025\054\026\
|
|
\237\000\016\027\233\027\028\001\185\028\206\001\080\001\013\000\
|
|
\249\028\184\029\136\030\088\031";
|
|
Lexing.lex_backtrk =
|
|
"\255\255\255\255\255\255\030\000\255\255\028\000\030\000\030\000\
|
|
\030\000\030\000\028\000\028\000\028\000\028\000\028\000\255\255\
|
|
\028\000\030\000\030\000\028\000\028\000\255\255\006\000\006\000\
|
|
\005\000\004\000\030\000\030\000\001\000\000\000\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\007\000\
|
|
\255\255\255\255\255\255\006\000\006\000\006\000\007\000\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\014\000\
|
|
\014\000\014\000\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\028\000\028\000\015\000\255\255\028\000\255\255\255\255\028\000\
|
|
\255\255\255\255\255\255\255\255\028\000\028\000\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\030\000\021\000\
|
|
\020\000\018\000\030\000\019\000\028\000\030\000\255\255\255\255\
|
|
\255\255\022\000\255\255\255\255\255\255\255\255\255\255\022\000\
|
|
\255\255\255\255\255\255\028\000\255\255\255\255\028\000\028\000\
|
|
\255\255\028\000\028\000\028\000\028\000\030\000\030\000\030\000\
|
|
\255\255\013\000\014\000\255\255\003\000\014\000\014\000\014\000\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\005\000\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\006\000\008\000\255\255\005\000\
|
|
\005\000\001\000\001\000\255\255\255\255\000\000\001\000\001\000\
|
|
\255\255\002\000\002\000\255\255\255\255\255\255\255\255\255\255\
|
|
\003\000\004\000\004\000\255\255\255\255\255\255\255\255\255\255\
|
|
\002\000\002\000\002\000\255\255\255\255\255\255\004\000\002\000\
|
|
\255\255\255\255\255\255\255\255";
|
|
Lexing.lex_default =
|
|
"\001\000\000\000\000\000\255\255\000\000\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\000\000\
|
|
\255\255\255\255\255\255\255\255\049\000\000\000\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\000\000\255\255\
|
|
\000\000\255\255\000\000\000\000\000\000\000\000\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\054\000\255\255\255\255\255\255\000\000\000\000\000\000\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\000\000\255\255\255\255\255\255\255\255\
|
|
\255\255\000\000\000\000\000\000\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\000\000\000\000\000\000\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\099\000\
|
|
\255\255\255\255\000\000\099\000\100\000\099\000\102\000\255\255\
|
|
\000\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\054\000\255\255\134\000\000\000\255\255\255\255\255\255\255\255\
|
|
\000\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\000\000\000\000\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\037\000\255\255\150\000\000\000\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\000\000\123\000\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\032\000\
|
|
\255\255\255\255\255\255\255\255\255\255\123\000\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255";
|
|
Lexing.lex_trans =
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\028\000\030\000\030\000\028\000\029\000\098\000\104\000\
|
|
\053\000\098\000\104\000\138\000\097\000\103\000\034\000\032\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\028\000\003\000\021\000\016\000\004\000\009\000\009\000\020\000\
|
|
\019\000\005\000\018\000\003\000\015\000\003\000\014\000\009\000\
|
|
\023\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
|
|
\022\000\022\000\013\000\012\000\017\000\006\000\007\000\026\000\
|
|
\009\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
|
|
\024\000\024\000\024\000\011\000\003\000\005\000\009\000\025\000\
|
|
\015\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
|
|
\025\000\025\000\025\000\010\000\008\000\005\000\027\000\015\000\
|
|
\096\000\028\000\045\000\045\000\028\000\051\000\053\000\047\000\
|
|
\050\000\047\000\052\000\053\000\046\000\046\000\046\000\046\000\
|
|
\046\000\046\000\046\000\046\000\046\000\046\000\067\000\096\000\
|
|
\028\000\044\000\044\000\044\000\044\000\044\000\044\000\044\000\
|
|
\044\000\051\000\128\000\098\000\030\000\037\000\097\000\095\000\
|
|
\095\000\095\000\095\000\095\000\095\000\095\000\095\000\095\000\
|
|
\095\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
|
|
\046\000\046\000\046\000\102\000\139\000\138\000\052\000\036\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\048\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\025\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\035\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
|
|
\002\000\003\000\021\000\128\000\003\000\003\000\003\000\255\255\
|
|
\255\255\000\000\003\000\003\000\136\000\003\000\003\000\003\000\
|
|
\039\000\039\000\039\000\039\000\039\000\039\000\039\000\039\000\
|
|
\039\000\039\000\003\000\179\000\003\000\003\000\003\000\003\000\
|
|
\003\000\069\000\094\000\094\000\069\000\038\000\085\000\128\000\
|
|
\000\000\139\000\000\000\094\000\094\000\058\000\058\000\058\000\
|
|
\058\000\058\000\058\000\058\000\058\000\058\000\058\000\085\000\
|
|
\069\000\085\000\085\000\085\000\003\000\094\000\003\000\039\000\
|
|
\130\000\075\000\032\000\000\000\003\000\038\000\129\000\003\000\
|
|
\009\000\009\000\179\000\000\000\085\000\003\000\003\000\154\000\
|
|
\003\000\009\000\009\000\000\000\081\000\000\000\128\000\081\000\
|
|
\154\000\154\000\085\000\094\000\003\000\086\000\003\000\006\000\
|
|
\006\000\006\000\003\000\009\000\000\000\000\000\154\000\000\000\
|
|
\000\000\003\000\000\000\081\000\003\000\118\000\118\000\154\000\
|
|
\000\000\085\000\003\000\003\000\082\000\003\000\118\000\118\000\
|
|
\000\000\085\000\085\000\255\255\000\000\000\000\000\000\003\000\
|
|
\085\000\009\000\117\000\000\000\007\000\007\000\007\000\003\000\
|
|
\118\000\172\000\185\000\030\000\034\000\000\000\003\000\171\000\
|
|
\184\000\003\000\009\000\009\000\000\000\000\000\005\000\003\000\
|
|
\003\000\255\255\003\000\009\000\009\000\000\000\000\000\086\000\
|
|
\085\000\003\000\000\000\000\000\003\000\005\000\118\000\086\000\
|
|
\000\000\006\000\006\000\006\000\003\000\009\000\034\000\138\000\
|
|
\000\000\168\000\148\000\003\000\000\000\000\000\003\000\009\000\
|
|
\009\000\000\000\000\000\092\000\003\000\003\000\000\000\003\000\
|
|
\009\000\009\000\000\000\000\000\117\000\005\000\003\000\030\000\
|
|
\000\000\003\000\005\000\009\000\093\000\000\000\009\000\009\000\
|
|
\009\000\003\000\009\000\000\000\000\000\000\000\000\000\000\000\
|
|
\032\000\000\000\000\000\183\000\114\000\114\000\000\000\060\000\
|
|
\170\000\000\000\169\000\105\000\105\000\114\000\114\000\005\000\
|
|
\000\000\086\000\005\000\003\000\105\000\105\000\003\000\092\000\
|
|
\009\000\115\000\030\000\113\000\112\000\112\000\000\000\114\000\
|
|
\111\000\000\000\108\000\110\000\110\000\000\000\105\000\114\000\
|
|
\114\000\149\000\060\000\000\000\000\000\045\000\045\000\000\000\
|
|
\114\000\114\000\182\000\000\000\000\000\000\000\093\000\092\000\
|
|
\003\000\000\000\060\000\000\000\113\000\114\000\113\000\112\000\
|
|
\112\000\000\000\114\000\005\000\105\000\000\000\000\000\000\000\
|
|
\000\000\036\000\000\000\000\000\000\000\000\000\000\000\105\000\
|
|
\105\000\000\000\000\000\092\000\000\000\000\000\000\000\000\000\
|
|
\107\000\105\000\060\000\115\000\045\000\060\000\000\000\000\000\
|
|
\114\000\000\000\109\000\005\000\106\000\000\000\105\000\105\000\
|
|
\105\000\037\000\105\000\035\000\046\000\046\000\046\000\046\000\
|
|
\046\000\046\000\046\000\046\000\046\000\046\000\000\000\003\000\
|
|
\000\000\000\000\003\000\009\000\009\000\060\000\113\000\085\000\
|
|
\003\000\003\000\000\000\003\000\009\000\009\000\000\000\092\000\
|
|
\105\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\087\000\000\000\089\000\006\000\006\000\003\000\088\000\000\000\
|
|
\000\000\000\000\000\000\046\000\000\000\000\000\000\000\000\000\
|
|
\003\000\000\000\000\000\003\000\003\000\003\000\106\000\092\000\
|
|
\084\000\003\000\003\000\000\000\003\000\003\000\003\000\000\000\
|
|
\000\000\000\000\003\000\085\000\009\000\000\000\000\000\000\000\
|
|
\000\000\003\000\000\000\003\000\003\000\003\000\003\000\003\000\
|
|
\049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\
|
|
\049\000\049\000\000\000\061\000\032\000\139\000\061\000\000\000\
|
|
\000\000\000\000\086\000\085\000\003\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\003\000\000\000\003\000\000\000\000\000\
|
|
\101\000\098\000\061\000\062\000\097\000\000\000\062\000\065\000\
|
|
\065\000\000\000\060\000\000\000\066\000\062\000\000\000\062\000\
|
|
\065\000\065\000\136\000\000\000\000\000\135\000\128\000\101\000\
|
|
\000\000\100\000\000\000\003\000\064\000\003\000\063\000\063\000\
|
|
\063\000\062\000\065\000\039\000\000\000\022\000\022\000\022\000\
|
|
\022\000\022\000\022\000\022\000\022\000\022\000\022\000\137\000\
|
|
\143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
|
|
\143\000\143\000\038\000\000\000\000\000\060\000\062\000\000\000\
|
|
\065\000\036\000\000\000\000\000\039\000\000\000\022\000\022\000\
|
|
\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
|
|
\000\000\000\000\000\000\000\000\022\000\000\000\000\000\000\000\
|
|
\040\000\000\000\038\000\038\000\000\000\060\000\064\000\000\000\
|
|
\062\000\037\000\036\000\035\000\133\000\041\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\042\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\022\000\000\000\000\000\
|
|
\040\000\000\000\000\000\038\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\037\000\000\000\035\000\041\000\024\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\042\000\024\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
|
|
\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
|
|
\024\000\024\000\000\000\000\000\000\000\000\000\024\000\000\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
|
|
\024\000\024\000\043\000\043\000\043\000\043\000\043\000\043\000\
|
|
\043\000\043\000\043\000\043\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\096\000\043\000\043\000\043\000\043\000\043\000\
|
|
\043\000\000\000\000\000\000\000\000\000\000\000\000\000\255\255\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\096\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\255\255\000\000\000\000\043\000\043\000\043\000\043\000\043\000\
|
|
\043\000\095\000\095\000\095\000\095\000\095\000\095\000\095\000\
|
|
\095\000\095\000\095\000\000\000\000\000\000\000\000\000\024\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\000\000\024\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\025\000\024\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\025\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
|
|
\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
|
|
\025\000\025\000\000\000\000\000\000\000\000\000\025\000\000\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
|
|
\025\000\025\000\043\000\043\000\043\000\043\000\043\000\043\000\
|
|
\043\000\043\000\043\000\043\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\043\000\043\000\043\000\043\000\043\000\
|
|
\043\000\000\000\000\000\000\000\000\000\000\000\036\000\144\000\
|
|
\144\000\144\000\144\000\144\000\144\000\144\000\144\000\144\000\
|
|
\144\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\043\000\000\000\043\000\043\000\043\000\043\000\043\000\
|
|
\043\000\000\000\000\000\000\000\000\000\000\000\037\000\000\000\
|
|
\035\000\000\000\000\000\000\000\000\000\000\000\000\000\025\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\000\000\025\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\000\000\025\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\003\000\
|
|
\000\000\000\000\003\000\003\000\003\000\000\000\000\000\000\000\
|
|
\003\000\003\000\000\000\003\000\003\000\003\000\155\000\155\000\
|
|
\155\000\155\000\155\000\155\000\155\000\155\000\155\000\155\000\
|
|
\003\000\000\000\003\000\003\000\003\000\003\000\003\000\034\000\
|
|
\034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\
|
|
\034\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\003\000\000\000\003\000\033\000\000\000\033\000\
|
|
\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\000\000\003\000\003\000\003\000\000\000\003\000\003\000\
|
|
\003\000\000\000\000\000\000\000\003\000\003\000\000\000\003\000\
|
|
\003\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\003\000\000\000\003\000\003\000\
|
|
\003\000\003\000\003\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\
|
|
\003\000\031\000\000\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\031\000\031\000\031\000\000\000\003\000\000\000\
|
|
\003\000\000\000\000\000\000\000\000\000\033\000\033\000\033\000\
|
|
\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\033\000\033\000\033\000\033\000\000\000\033\000\033\000\
|
|
\033\000\033\000\033\000\033\000\033\000\033\000\059\000\059\000\
|
|
\059\000\059\000\059\000\059\000\059\000\059\000\059\000\059\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\059\000\
|
|
\059\000\059\000\059\000\059\000\059\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\059\000\
|
|
\059\000\059\000\059\000\059\000\059\000\000\000\000\000\000\000\
|
|
\000\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\031\000\031\000\032\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\031\000\031\000\031\000\000\000\000\000\000\000\
|
|
\000\000\031\000\000\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\031\000\031\000\031\000\044\000\044\000\044\000\
|
|
\044\000\044\000\044\000\044\000\044\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\049\000\049\000\049\000\049\000\049\000\
|
|
\049\000\049\000\049\000\049\000\049\000\000\000\000\000\000\000\
|
|
\000\000\036\000\000\000\000\000\049\000\049\000\049\000\049\000\
|
|
\049\000\049\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\044\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\037\000\000\000\035\000\049\000\049\000\049\000\049\000\
|
|
\049\000\049\000\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\000\000\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\033\000\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\033\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\033\000\033\000\033\000\034\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\033\000\033\000\033\000\033\000\000\000\000\000\000\000\
|
|
\000\000\033\000\000\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\033\000\033\000\033\000\033\000\101\000\098\000\000\000\
|
|
\000\000\097\000\000\000\000\000\000\000\000\000\145\000\145\000\
|
|
\145\000\145\000\145\000\145\000\145\000\145\000\145\000\145\000\
|
|
\000\000\000\000\000\000\000\000\101\000\000\000\100\000\145\000\
|
|
\145\000\145\000\145\000\145\000\145\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\095\000\095\000\095\000\095\000\
|
|
\095\000\095\000\095\000\095\000\095\000\095\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\145\000\
|
|
\145\000\145\000\145\000\145\000\145\000\000\000\000\000\000\000\
|
|
\000\000\000\000\033\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\000\000\033\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\000\000\033\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\033\000\057\000\000\000\057\000\000\000\000\000\068\000\
|
|
\068\000\057\000\060\000\000\000\000\000\000\000\000\000\000\000\
|
|
\068\000\068\000\056\000\056\000\056\000\056\000\056\000\056\000\
|
|
\056\000\056\000\056\000\056\000\060\000\000\000\060\000\060\000\
|
|
\060\000\000\000\068\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\094\000\094\000\
|
|
\000\000\000\000\085\000\000\000\000\000\000\000\000\000\094\000\
|
|
\094\000\000\000\000\000\000\000\000\000\060\000\057\000\000\000\
|
|
\068\000\000\000\000\000\085\000\057\000\085\000\085\000\085\000\
|
|
\061\000\094\000\000\000\061\000\000\000\000\000\000\000\000\000\
|
|
\057\000\000\000\000\000\000\000\057\000\000\000\057\000\000\000\
|
|
\000\000\000\000\055\000\000\000\000\000\060\000\060\000\061\000\
|
|
\079\000\000\000\000\000\079\000\079\000\079\000\085\000\094\000\
|
|
\000\000\080\000\079\000\000\000\079\000\079\000\079\000\000\000\
|
|
\069\000\000\000\000\000\069\000\255\255\000\000\000\000\000\000\
|
|
\000\000\079\000\000\000\079\000\079\000\079\000\079\000\079\000\
|
|
\000\000\000\000\000\000\000\000\000\000\085\000\085\000\069\000\
|
|
\070\000\000\000\000\000\070\000\070\000\070\000\000\000\000\000\
|
|
\073\000\072\000\070\000\000\000\070\000\070\000\070\000\000\000\
|
|
\000\000\000\000\000\000\079\000\000\000\079\000\000\000\000\000\
|
|
\000\000\070\000\000\000\070\000\070\000\070\000\070\000\070\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\069\000\000\000\000\000\069\000\000\000\
|
|
\000\000\000\000\000\000\079\000\000\000\079\000\000\000\000\000\
|
|
\000\000\000\000\000\000\070\000\000\000\070\000\000\000\000\000\
|
|
\000\000\000\000\069\000\070\000\000\000\000\000\070\000\071\000\
|
|
\071\000\000\000\060\000\073\000\072\000\070\000\000\000\070\000\
|
|
\071\000\071\000\069\000\000\000\000\000\069\000\000\000\000\000\
|
|
\000\000\000\000\255\255\070\000\078\000\070\000\078\000\078\000\
|
|
\078\000\070\000\071\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\069\000\070\000\000\000\000\000\070\000\077\000\077\000\
|
|
\000\000\060\000\073\000\072\000\070\000\000\000\070\000\077\000\
|
|
\077\000\000\000\000\000\000\000\000\000\060\000\070\000\000\000\
|
|
\071\000\000\000\000\000\076\000\000\000\076\000\076\000\076\000\
|
|
\070\000\077\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\069\000\000\000\000\000\
|
|
\069\000\000\000\000\000\000\000\000\000\060\000\078\000\000\000\
|
|
\070\000\000\000\000\000\000\000\060\000\070\000\000\000\077\000\
|
|
\000\000\000\000\000\000\000\000\069\000\070\000\000\000\000\000\
|
|
\070\000\071\000\071\000\000\000\068\000\073\000\072\000\070\000\
|
|
\000\000\070\000\071\000\071\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\060\000\076\000\071\000\070\000\
|
|
\071\000\071\000\071\000\070\000\071\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\068\000\068\000\
|
|
\000\000\068\000\000\000\000\000\000\000\000\000\000\000\068\000\
|
|
\068\000\000\000\000\000\000\000\000\000\000\000\000\000\068\000\
|
|
\070\000\000\000\071\000\068\000\000\000\068\000\068\000\068\000\
|
|
\000\000\068\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\069\000\000\000\000\000\
|
|
\069\000\000\000\000\000\000\000\000\000\000\000\000\000\068\000\
|
|
\071\000\000\000\070\000\000\000\068\000\000\000\000\000\068\000\
|
|
\000\000\000\000\000\000\000\000\069\000\070\000\000\000\000\000\
|
|
\070\000\070\000\070\000\000\000\000\000\074\000\072\000\070\000\
|
|
\000\000\070\000\070\000\070\000\069\000\000\000\000\000\069\000\
|
|
\000\000\000\000\000\000\000\000\068\000\068\000\070\000\000\000\
|
|
\070\000\070\000\070\000\070\000\070\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\069\000\070\000\000\000\000\000\070\000\
|
|
\071\000\071\000\000\000\068\000\074\000\072\000\070\000\000\000\
|
|
\070\000\071\000\071\000\000\000\000\000\000\000\000\000\000\000\
|
|
\070\000\000\000\070\000\000\000\000\000\071\000\000\000\071\000\
|
|
\071\000\071\000\070\000\071\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\069\000\
|
|
\000\000\000\000\069\000\000\000\000\000\000\000\000\000\000\000\
|
|
\070\000\000\000\070\000\000\000\000\000\000\000\068\000\070\000\
|
|
\000\000\071\000\000\000\000\000\000\000\000\000\069\000\070\000\
|
|
\000\000\000\000\070\000\070\000\070\000\000\000\000\000\000\000\
|
|
\072\000\070\000\000\000\070\000\070\000\070\000\069\000\000\000\
|
|
\000\000\069\000\000\000\000\000\000\000\000\000\068\000\071\000\
|
|
\070\000\070\000\070\000\070\000\070\000\070\000\070\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\069\000\070\000\000\000\
|
|
\000\000\070\000\077\000\077\000\000\000\060\000\074\000\072\000\
|
|
\070\000\000\000\070\000\077\000\077\000\000\000\000\000\000\000\
|
|
\000\000\000\000\070\000\000\000\070\000\000\000\000\000\076\000\
|
|
\000\000\076\000\076\000\076\000\070\000\077\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\069\000\000\000\000\000\069\000\000\000\000\000\000\000\
|
|
\000\000\000\000\070\000\000\000\070\000\000\000\000\000\000\000\
|
|
\060\000\070\000\000\000\077\000\000\000\000\000\000\000\000\000\
|
|
\069\000\070\000\000\000\000\000\070\000\077\000\077\000\000\000\
|
|
\068\000\074\000\072\000\070\000\000\000\070\000\077\000\077\000\
|
|
\069\000\000\000\000\000\069\000\000\000\000\000\000\000\000\000\
|
|
\060\000\076\000\077\000\070\000\077\000\077\000\077\000\070\000\
|
|
\077\000\000\000\000\000\000\000\000\000\000\000\000\000\069\000\
|
|
\070\000\000\000\000\000\070\000\071\000\071\000\000\000\060\000\
|
|
\074\000\072\000\070\000\000\000\070\000\071\000\071\000\000\000\
|
|
\000\000\000\000\000\000\068\000\070\000\000\000\077\000\000\000\
|
|
\000\000\078\000\000\000\078\000\078\000\078\000\070\000\071\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\081\000\000\000\000\000\081\000\000\000\
|
|
\000\000\000\000\000\000\068\000\077\000\000\000\070\000\000\000\
|
|
\000\000\000\000\060\000\070\000\000\000\071\000\000\000\000\000\
|
|
\000\000\000\000\081\000\079\000\000\000\000\000\079\000\079\000\
|
|
\079\000\000\000\000\000\083\000\080\000\079\000\000\000\079\000\
|
|
\079\000\079\000\081\000\000\000\000\000\081\000\000\000\000\000\
|
|
\000\000\000\000\060\000\078\000\079\000\070\000\079\000\079\000\
|
|
\079\000\079\000\079\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\081\000\079\000\000\000\000\000\079\000\079\000\079\000\
|
|
\000\000\000\000\000\000\080\000\079\000\000\000\079\000\079\000\
|
|
\079\000\000\000\000\000\000\000\000\000\000\000\079\000\000\000\
|
|
\079\000\000\000\000\000\079\000\000\000\079\000\079\000\079\000\
|
|
\079\000\079\000\000\000\000\000\000\000\003\000\000\000\000\000\
|
|
\003\000\009\000\009\000\000\000\000\000\005\000\003\000\003\000\
|
|
\000\000\003\000\009\000\009\000\000\000\000\000\079\000\000\000\
|
|
\079\000\000\000\000\000\000\000\000\000\079\000\086\000\079\000\
|
|
\006\000\006\000\006\000\003\000\009\000\000\000\000\000\000\000\
|
|
\000\000\000\000\003\000\000\000\000\000\003\000\009\000\009\000\
|
|
\000\000\000\000\005\000\003\000\003\000\000\000\003\000\009\000\
|
|
\009\000\000\000\000\000\000\000\000\000\079\000\000\000\079\000\
|
|
\003\000\085\000\009\000\086\000\000\000\006\000\006\000\006\000\
|
|
\003\000\009\000\000\000\000\000\000\000\000\000\000\000\003\000\
|
|
\000\000\000\000\003\000\009\000\009\000\000\000\000\000\092\000\
|
|
\003\000\003\000\000\000\003\000\009\000\009\000\000\000\000\000\
|
|
\086\000\005\000\003\000\000\000\000\000\003\000\085\000\009\000\
|
|
\093\000\000\000\009\000\009\000\009\000\003\000\009\000\000\000\
|
|
\000\000\000\000\000\000\000\000\003\000\000\000\000\000\003\000\
|
|
\009\000\009\000\000\000\000\000\085\000\003\000\003\000\000\000\
|
|
\003\000\009\000\009\000\000\000\000\000\086\000\005\000\003\000\
|
|
\000\000\000\000\003\000\092\000\009\000\086\000\000\000\006\000\
|
|
\006\000\090\000\003\000\009\000\000\000\000\000\000\000\000\000\
|
|
\000\000\003\000\000\000\000\000\003\000\009\000\009\000\000\000\
|
|
\000\000\085\000\003\000\003\000\000\000\003\000\009\000\009\000\
|
|
\000\000\000\000\093\000\092\000\003\000\000\000\000\000\003\000\
|
|
\085\000\009\000\086\000\000\000\006\000\006\000\091\000\003\000\
|
|
\009\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\
|
|
\000\000\003\000\009\000\009\000\000\000\000\000\085\000\003\000\
|
|
\003\000\000\000\003\000\009\000\009\000\000\000\000\000\086\000\
|
|
\085\000\003\000\000\000\000\000\003\000\085\000\009\000\086\000\
|
|
\000\000\006\000\006\000\006\000\003\000\009\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\094\000\
|
|
\094\000\000\000\000\000\092\000\000\000\000\000\000\000\000\000\
|
|
\094\000\094\000\000\000\000\000\086\000\085\000\003\000\000\000\
|
|
\000\000\003\000\085\000\009\000\094\000\000\000\094\000\094\000\
|
|
\094\000\000\000\094\000\000\000\000\000\000\000\000\000\000\000\
|
|
\003\000\000\000\000\000\003\000\009\000\009\000\000\000\000\000\
|
|
\092\000\003\000\003\000\000\000\003\000\009\000\009\000\000\000\
|
|
\000\000\086\000\085\000\003\000\000\000\000\000\000\000\092\000\
|
|
\094\000\093\000\000\000\009\000\009\000\009\000\003\000\009\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\094\000\094\000\000\000\000\000\092\000\000\000\000\000\
|
|
\105\000\105\000\094\000\094\000\092\000\000\000\094\000\092\000\
|
|
\000\000\105\000\105\000\003\000\092\000\009\000\094\000\000\000\
|
|
\094\000\094\000\094\000\000\000\094\000\106\000\000\000\105\000\
|
|
\105\000\105\000\000\000\105\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\105\000\105\000\000\000\
|
|
\000\000\092\000\000\000\093\000\092\000\003\000\105\000\105\000\
|
|
\000\000\092\000\094\000\000\000\000\000\000\000\000\000\000\000\
|
|
\092\000\105\000\106\000\000\000\105\000\105\000\105\000\000\000\
|
|
\105\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\105\000\105\000\000\000\000\000\092\000\000\000\
|
|
\094\000\092\000\000\000\105\000\105\000\000\000\000\000\106\000\
|
|
\092\000\000\000\000\000\000\000\000\000\092\000\105\000\106\000\
|
|
\000\000\105\000\105\000\105\000\000\000\105\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\105\000\
|
|
\105\000\000\000\000\000\085\000\000\000\000\000\105\000\105\000\
|
|
\105\000\105\000\005\000\000\000\106\000\092\000\000\000\105\000\
|
|
\105\000\000\000\092\000\105\000\109\000\000\000\108\000\108\000\
|
|
\108\000\000\000\105\000\109\000\000\000\108\000\108\000\108\000\
|
|
\000\000\105\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\105\000\105\000\000\000\000\000\085\000\
|
|
\000\000\106\000\092\000\000\000\105\000\105\000\000\000\085\000\
|
|
\105\000\000\000\000\000\000\000\000\000\000\000\085\000\105\000\
|
|
\109\000\000\000\108\000\108\000\108\000\000\000\105\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\105\000\105\000\000\000\000\000\005\000\000\000\109\000\085\000\
|
|
\000\000\105\000\105\000\000\000\000\000\109\000\005\000\000\000\
|
|
\000\000\000\000\000\000\085\000\105\000\109\000\000\000\108\000\
|
|
\108\000\108\000\000\000\105\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\114\000\114\000\000\000\
|
|
\060\000\000\000\000\000\000\000\000\000\000\000\114\000\114\000\
|
|
\000\000\000\000\109\000\085\000\000\000\000\000\000\000\000\000\
|
|
\085\000\105\000\112\000\000\000\113\000\112\000\112\000\000\000\
|
|
\114\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\114\000\114\000\000\000\060\000\000\000\000\000\000\000\000\000\
|
|
\000\000\114\000\114\000\000\000\000\000\000\000\000\000\109\000\
|
|
\005\000\000\000\000\000\060\000\000\000\112\000\114\000\113\000\
|
|
\112\000\112\000\000\000\114\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\114\000\114\000\000\000\068\000\000\000\
|
|
\116\000\116\000\000\000\060\000\114\000\114\000\000\000\000\000\
|
|
\000\000\116\000\116\000\060\000\112\000\000\000\060\000\000\000\
|
|
\114\000\114\000\114\000\114\000\114\000\115\000\114\000\115\000\
|
|
\115\000\115\000\000\000\116\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\116\000\116\000\000\000\068\000\000\000\
|
|
\000\000\000\000\000\000\000\000\116\000\116\000\060\000\112\000\
|
|
\000\000\068\000\000\000\000\000\114\000\000\000\060\000\000\000\
|
|
\116\000\116\000\116\000\116\000\116\000\000\000\116\000\000\000\
|
|
\000\000\000\000\003\000\000\000\000\000\003\000\118\000\118\000\
|
|
\000\000\000\000\005\000\003\000\003\000\000\000\003\000\118\000\
|
|
\118\000\068\000\114\000\000\000\000\000\000\000\060\000\115\000\
|
|
\000\000\068\000\000\000\117\000\116\000\007\000\007\000\007\000\
|
|
\003\000\118\000\000\000\000\000\000\000\000\000\000\000\003\000\
|
|
\000\000\000\000\003\000\118\000\118\000\000\000\000\000\092\000\
|
|
\003\000\003\000\000\000\003\000\118\000\118\000\000\000\000\000\
|
|
\000\000\068\000\116\000\000\000\000\000\003\000\005\000\118\000\
|
|
\119\000\000\000\118\000\118\000\118\000\003\000\118\000\000\000\
|
|
\000\000\000\000\000\000\000\000\003\000\000\000\000\000\003\000\
|
|
\118\000\118\000\000\000\000\000\092\000\003\000\003\000\000\000\
|
|
\003\000\118\000\118\000\000\000\000\000\117\000\005\000\003\000\
|
|
\000\000\000\000\003\000\092\000\118\000\119\000\000\000\118\000\
|
|
\118\000\118\000\003\000\118\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\053\000\000\000\000\000\121\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\119\000\092\000\003\000\000\000\000\000\003\000\
|
|
\092\000\118\000\000\000\123\000\000\000\000\000\000\000\000\000\
|
|
\122\000\127\000\000\000\126\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\125\000\000\000\119\000\
|
|
\092\000\003\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\000\000\000\000\000\000\000\000\
|
|
\124\000\000\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\146\000\146\000\146\000\146\000\
|
|
\146\000\146\000\146\000\146\000\146\000\146\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\146\000\146\000\146\000\
|
|
\146\000\146\000\146\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\146\000\146\000\146\000\
|
|
\146\000\146\000\146\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\000\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\000\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\052\000\124\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\124\000\000\000\000\000\
|
|
\000\000\000\000\124\000\000\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\124\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\132\000\000\000\000\000\
|
|
\000\000\000\000\132\000\000\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\132\000\000\000\000\000\
|
|
\000\000\000\000\000\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\000\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\000\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\000\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\000\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\000\000\000\000\000\000\
|
|
\000\000\131\000\000\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\156\000\156\000\156\000\
|
|
\156\000\156\000\156\000\156\000\156\000\156\000\156\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\156\000\156\000\
|
|
\156\000\156\000\156\000\156\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\156\000\156\000\
|
|
\156\000\156\000\156\000\156\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\000\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\000\000\000\000\032\000\000\000\
|
|
\000\000\000\000\129\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\000\000\000\000\000\000\
|
|
\000\000\131\000\000\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\123\000\123\000\123\000\
|
|
\123\000\123\000\123\000\123\000\123\000\123\000\123\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\123\000\123\000\
|
|
\123\000\123\000\123\000\123\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\123\000\123\000\
|
|
\123\000\123\000\123\000\123\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\000\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\132\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\000\000\000\000\032\000\000\000\
|
|
\000\000\000\000\000\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\000\000\000\000\000\000\
|
|
\000\000\132\000\000\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\000\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\000\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\142\000\000\000\142\000\000\000\000\000\154\000\
|
|
\000\000\142\000\153\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\141\000\141\000\141\000\141\000\141\000\141\000\
|
|
\141\000\141\000\141\000\141\000\000\000\032\000\000\000\032\000\
|
|
\000\000\000\000\000\000\000\000\032\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\152\000\152\000\152\000\
|
|
\152\000\152\000\152\000\152\000\152\000\152\000\152\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\142\000\000\000\
|
|
\000\000\000\000\000\000\000\000\142\000\157\000\000\000\000\000\
|
|
\157\000\157\000\157\000\000\000\000\000\000\000\157\000\157\000\
|
|
\142\000\157\000\157\000\157\000\142\000\000\000\142\000\000\000\
|
|
\000\000\032\000\140\000\000\000\000\000\000\000\157\000\032\000\
|
|
\157\000\157\000\157\000\157\000\157\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\032\000\000\000\000\000\000\000\032\000\
|
|
\000\000\032\000\000\000\000\000\000\000\151\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\157\000\000\000\157\000\000\000\000\000\000\000\000\000\000\000\
|
|
\159\000\000\000\000\000\159\000\159\000\159\000\000\000\000\000\
|
|
\000\000\159\000\159\000\000\000\159\000\159\000\159\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\157\000\159\000\157\000\159\000\159\000\159\000\159\000\159\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\000\000\159\000\000\000\159\000\160\000\000\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\000\000\159\000\000\000\159\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\255\255\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\000\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\000\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\159\000\
|
|
\000\000\000\000\159\000\159\000\159\000\000\000\000\000\000\000\
|
|
\159\000\159\000\000\000\159\000\159\000\159\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\159\000\000\000\159\000\159\000\159\000\159\000\159\000\000\000\
|
|
\000\000\000\000\000\000\160\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\000\000\000\000\
|
|
\030\000\000\000\159\000\000\000\159\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\000\000\
|
|
\000\000\000\000\159\000\160\000\159\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\000\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\000\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\162\000\000\000\000\000\162\000\
|
|
\162\000\162\000\000\000\000\000\000\000\162\000\162\000\000\000\
|
|
\162\000\162\000\162\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\162\000\000\000\162\000\
|
|
\162\000\162\000\162\000\162\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\000\000\162\000\
|
|
\000\000\162\000\163\000\000\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\000\000\162\000\
|
|
\000\000\162\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\000\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\000\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\162\000\000\000\000\000\162\000\162\000\
|
|
\162\000\000\000\000\000\000\000\162\000\162\000\000\000\162\000\
|
|
\162\000\162\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\162\000\000\000\162\000\162\000\
|
|
\162\000\162\000\162\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\163\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\000\000\162\000\030\000\
|
|
\162\000\000\000\000\000\164\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\162\000\000\000\
|
|
\162\000\000\000\163\000\000\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\000\000\000\000\
|
|
\000\000\000\000\165\000\000\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\000\000\000\000\
|
|
\000\000\000\000\000\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\000\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\000\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\000\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\000\000\000\000\166\000\
|
|
\000\000\000\000\000\000\000\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\000\000\000\000\
|
|
\000\000\000\000\165\000\000\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\174\000\000\000\000\000\
|
|
\000\000\000\000\174\000\000\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\174\000\000\000\000\000\
|
|
\000\000\000\000\000\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\000\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\000\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\000\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\000\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\000\000\000\000\000\000\
|
|
\000\000\173\000\000\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\000\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\000\000\000\000\030\000\000\000\
|
|
\000\000\000\000\171\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\000\000\000\000\000\000\
|
|
\000\000\173\000\000\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\000\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\174\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\000\000\000\000\030\000\000\000\
|
|
\000\000\000\000\000\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\000\000\000\000\000\000\
|
|
\000\000\174\000\000\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\000\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\000\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\030\000\000\000\000\000\177\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\176\000\000\000\177\000\177\000\
|
|
\177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
|
|
\128\000\000\000\000\000\000\000\000\000\000\000\000\000\177\000\
|
|
\177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
|
|
\177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
|
|
\177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
|
|
\177\000\000\000\000\000\000\000\000\000\177\000\178\000\177\000\
|
|
\177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
|
|
\177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
|
|
\177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
|
|
\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\177\000\177\000\
|
|
\177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
|
|
\177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
|
|
\177\000\177\000\177\000\177\000\177\000\000\000\177\000\177\000\
|
|
\177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
|
|
\177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
|
|
\177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
|
|
\177\000\177\000\177\000\177\000\177\000\000\000\177\000\177\000\
|
|
\177\000\177\000\177\000\177\000\177\000\177\000\255\255\180\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\128\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\000\000\000\000\000\000\000\000\180\000\
|
|
\000\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\000\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\000\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\000\000\000\000\000\000\000\000\000\000\000\000\179\000\
|
|
\000\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\128\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\000\000\000\000\000\000\000\000\
|
|
\180\000\000\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\000\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\128\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\000\000\000\000\000\000\000\000\
|
|
\180\000\000\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\187\000\000\000\000\000\000\000\000\000\
|
|
\187\000\000\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\187\000\000\000\000\000\000\000\000\000\
|
|
\000\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\000\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\000\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\000\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\000\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\000\000\000\000\000\000\000\000\186\000\
|
|
\000\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\000\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\000\000\000\000\034\000\000\000\000\000\000\000\
|
|
\184\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\000\000\000\000\000\000\000\000\186\000\
|
|
\000\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\000\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\187\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\000\000\000\000\034\000\000\000\000\000\000\000\
|
|
\000\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\000\000\000\000\000\000\000\000\187\000\
|
|
\000\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\000\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\000\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\000\000";
|
|
Lexing.lex_check =
|
|
"\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\000\000\000\000\029\000\000\000\000\000\097\000\103\000\
|
|
\121\000\099\000\102\000\148\000\099\000\102\000\168\000\183\000\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\
|
|
\016\000\028\000\040\000\040\000\028\000\020\000\049\000\038\000\
|
|
\020\000\038\000\051\000\057\000\038\000\038\000\038\000\038\000\
|
|
\038\000\038\000\038\000\038\000\038\000\038\000\066\000\016\000\
|
|
\028\000\041\000\041\000\041\000\041\000\041\000\041\000\041\000\
|
|
\041\000\050\000\126\000\100\000\127\000\134\000\100\000\016\000\
|
|
\016\000\016\000\016\000\016\000\016\000\016\000\016\000\016\000\
|
|
\016\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\
|
|
\047\000\047\000\047\000\100\000\136\000\137\000\050\000\142\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\003\000\146\000\169\000\003\000\003\000\003\000\099\000\
|
|
\102\000\255\255\003\000\003\000\135\000\003\000\003\000\003\000\
|
|
\039\000\039\000\039\000\039\000\039\000\039\000\039\000\039\000\
|
|
\039\000\039\000\003\000\176\000\003\000\003\000\003\000\003\000\
|
|
\003\000\069\000\005\000\005\000\069\000\039\000\005\000\176\000\
|
|
\255\255\135\000\255\255\005\000\005\000\056\000\056\000\056\000\
|
|
\056\000\056\000\056\000\056\000\056\000\056\000\056\000\005\000\
|
|
\069\000\005\000\005\000\005\000\003\000\005\000\003\000\039\000\
|
|
\125\000\069\000\125\000\255\255\006\000\039\000\125\000\006\000\
|
|
\006\000\006\000\179\000\255\255\006\000\006\000\006\000\154\000\
|
|
\006\000\006\000\006\000\255\255\081\000\255\255\179\000\081\000\
|
|
\153\000\153\000\005\000\005\000\003\000\006\000\003\000\006\000\
|
|
\006\000\006\000\006\000\006\000\255\255\255\255\154\000\255\255\
|
|
\255\255\007\000\255\255\081\000\007\000\007\000\007\000\153\000\
|
|
\255\255\007\000\007\000\007\000\081\000\007\000\007\000\007\000\
|
|
\255\255\005\000\005\000\020\000\255\255\255\255\255\255\006\000\
|
|
\006\000\006\000\007\000\255\255\007\000\007\000\007\000\007\000\
|
|
\007\000\170\000\182\000\170\000\182\000\255\255\008\000\170\000\
|
|
\182\000\008\000\008\000\008\000\255\255\255\255\008\000\008\000\
|
|
\008\000\100\000\008\000\008\000\008\000\255\255\255\255\006\000\
|
|
\006\000\006\000\255\255\255\255\007\000\007\000\007\000\008\000\
|
|
\255\255\008\000\008\000\008\000\008\000\008\000\167\000\147\000\
|
|
\255\255\167\000\147\000\009\000\255\255\255\255\009\000\009\000\
|
|
\009\000\255\255\255\255\009\000\009\000\009\000\255\255\009\000\
|
|
\009\000\009\000\255\255\255\255\007\000\007\000\007\000\147\000\
|
|
\255\255\008\000\008\000\008\000\009\000\255\255\009\000\009\000\
|
|
\009\000\009\000\009\000\255\255\255\255\255\255\255\255\255\255\
|
|
\181\000\255\255\255\255\181\000\010\000\010\000\255\255\010\000\
|
|
\167\000\255\255\167\000\013\000\013\000\010\000\010\000\013\000\
|
|
\255\255\008\000\008\000\008\000\013\000\013\000\009\000\009\000\
|
|
\009\000\010\000\181\000\010\000\010\000\010\000\255\255\010\000\
|
|
\013\000\255\255\013\000\013\000\013\000\255\255\013\000\011\000\
|
|
\011\000\147\000\011\000\255\255\255\255\045\000\045\000\255\255\
|
|
\011\000\011\000\181\000\255\255\255\255\255\255\009\000\009\000\
|
|
\009\000\255\255\010\000\255\255\011\000\010\000\011\000\011\000\
|
|
\011\000\255\255\011\000\013\000\013\000\255\255\255\255\255\255\
|
|
\255\255\045\000\255\255\255\255\255\255\255\255\255\255\014\000\
|
|
\014\000\255\255\255\255\014\000\255\255\255\255\255\255\255\255\
|
|
\014\000\014\000\010\000\010\000\045\000\011\000\255\255\255\255\
|
|
\011\000\255\255\013\000\013\000\014\000\255\255\014\000\014\000\
|
|
\014\000\045\000\014\000\045\000\046\000\046\000\046\000\046\000\
|
|
\046\000\046\000\046\000\046\000\046\000\046\000\255\255\017\000\
|
|
\255\255\255\255\017\000\017\000\017\000\011\000\011\000\017\000\
|
|
\017\000\017\000\255\255\017\000\017\000\017\000\255\255\014\000\
|
|
\014\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\017\000\255\255\017\000\017\000\017\000\017\000\017\000\255\255\
|
|
\255\255\255\255\255\255\046\000\255\255\255\255\255\255\255\255\
|
|
\018\000\255\255\255\255\018\000\018\000\018\000\014\000\014\000\
|
|
\018\000\018\000\018\000\255\255\018\000\018\000\018\000\255\255\
|
|
\255\255\255\255\017\000\017\000\017\000\255\255\255\255\255\255\
|
|
\255\255\018\000\255\255\018\000\018\000\018\000\018\000\018\000\
|
|
\058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
|
|
\058\000\058\000\255\255\019\000\167\000\147\000\019\000\255\255\
|
|
\255\255\255\255\017\000\017\000\017\000\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\018\000\255\255\018\000\255\255\255\255\
|
|
\101\000\101\000\019\000\019\000\101\000\255\255\019\000\019\000\
|
|
\019\000\255\255\019\000\255\255\019\000\019\000\255\255\019\000\
|
|
\019\000\019\000\122\000\255\255\255\255\122\000\181\000\101\000\
|
|
\255\255\101\000\255\255\018\000\019\000\018\000\019\000\019\000\
|
|
\019\000\019\000\019\000\022\000\255\255\022\000\022\000\022\000\
|
|
\022\000\022\000\022\000\022\000\022\000\022\000\022\000\122\000\
|
|
\141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
|
|
\141\000\141\000\022\000\255\255\255\255\019\000\019\000\255\255\
|
|
\019\000\022\000\255\255\255\255\023\000\255\255\023\000\023\000\
|
|
\023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\
|
|
\255\255\255\255\255\255\255\255\022\000\255\255\255\255\255\255\
|
|
\023\000\255\255\022\000\023\000\255\255\019\000\019\000\255\255\
|
|
\019\000\022\000\023\000\022\000\122\000\023\000\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\023\000\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\023\000\255\255\255\255\
|
|
\023\000\255\255\255\255\023\000\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\023\000\255\255\023\000\023\000\024\000\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\023\000\024\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
|
|
\024\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
|
|
\024\000\024\000\255\255\255\255\255\255\255\255\024\000\255\255\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
|
|
\024\000\024\000\042\000\042\000\042\000\042\000\042\000\042\000\
|
|
\042\000\042\000\042\000\042\000\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\096\000\042\000\042\000\042\000\042\000\042\000\
|
|
\042\000\255\255\255\255\255\255\255\255\255\255\255\255\101\000\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\096\000\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\122\000\255\255\255\255\042\000\042\000\042\000\042\000\042\000\
|
|
\042\000\096\000\096\000\096\000\096\000\096\000\096\000\096\000\
|
|
\096\000\096\000\096\000\255\255\255\255\255\255\255\255\024\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\255\255\024\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\025\000\024\000\
|
|
\024\000\024\000\024\000\024\000\024\000\024\000\024\000\025\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
|
|
\025\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
|
|
\025\000\025\000\255\255\255\255\255\255\255\255\025\000\255\255\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
|
|
\025\000\025\000\043\000\043\000\043\000\043\000\043\000\043\000\
|
|
\043\000\043\000\043\000\043\000\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\043\000\043\000\043\000\043\000\043\000\
|
|
\043\000\255\255\255\255\255\255\255\255\255\255\043\000\143\000\
|
|
\143\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\
|
|
\143\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\043\000\255\255\043\000\043\000\043\000\043\000\043\000\
|
|
\043\000\255\255\255\255\255\255\255\255\255\255\043\000\255\255\
|
|
\043\000\255\255\255\255\255\255\255\255\255\255\255\255\025\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\255\255\025\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\255\255\025\000\
|
|
\025\000\025\000\025\000\025\000\025\000\025\000\025\000\026\000\
|
|
\255\255\255\255\026\000\026\000\026\000\255\255\255\255\255\255\
|
|
\026\000\026\000\255\255\026\000\026\000\026\000\152\000\152\000\
|
|
\152\000\152\000\152\000\152\000\152\000\152\000\152\000\152\000\
|
|
\026\000\255\255\026\000\026\000\026\000\026\000\026\000\155\000\
|
|
\155\000\155\000\155\000\155\000\155\000\155\000\155\000\155\000\
|
|
\155\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\026\000\255\255\026\000\026\000\255\255\026\000\
|
|
\026\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\
|
|
\026\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\
|
|
\026\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\
|
|
\026\000\255\255\026\000\027\000\026\000\255\255\027\000\027\000\
|
|
\027\000\255\255\255\255\255\255\027\000\027\000\255\255\027\000\
|
|
\027\000\027\000\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\027\000\255\255\027\000\027\000\
|
|
\027\000\027\000\027\000\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\027\000\255\255\
|
|
\027\000\027\000\255\255\027\000\027\000\027\000\027\000\027\000\
|
|
\027\000\027\000\027\000\027\000\027\000\027\000\027\000\027\000\
|
|
\027\000\027\000\027\000\027\000\027\000\027\000\027\000\027\000\
|
|
\027\000\027\000\027\000\027\000\027\000\255\255\027\000\255\255\
|
|
\027\000\255\255\255\255\255\255\255\255\026\000\026\000\026\000\
|
|
\026\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\
|
|
\026\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\
|
|
\026\000\026\000\026\000\026\000\026\000\255\255\026\000\026\000\
|
|
\026\000\026\000\026\000\026\000\026\000\026\000\055\000\055\000\
|
|
\055\000\055\000\055\000\055\000\055\000\055\000\055\000\055\000\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\055\000\
|
|
\055\000\055\000\055\000\055\000\055\000\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\055\000\
|
|
\055\000\055\000\055\000\055\000\055\000\255\255\255\255\255\255\
|
|
\255\255\027\000\027\000\027\000\027\000\027\000\027\000\027\000\
|
|
\027\000\027\000\027\000\027\000\027\000\027\000\027\000\027\000\
|
|
\027\000\027\000\027\000\027\000\027\000\027\000\027\000\027\000\
|
|
\027\000\031\000\027\000\027\000\027\000\027\000\027\000\027\000\
|
|
\027\000\027\000\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\031\000\031\000\031\000\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\031\000\031\000\031\000\255\255\255\255\255\255\
|
|
\255\255\031\000\255\255\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\031\000\031\000\031\000\044\000\044\000\044\000\
|
|
\044\000\044\000\044\000\044\000\044\000\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\059\000\059\000\059\000\059\000\059\000\
|
|
\059\000\059\000\059\000\059\000\059\000\255\255\255\255\255\255\
|
|
\255\255\044\000\255\255\255\255\059\000\059\000\059\000\059\000\
|
|
\059\000\059\000\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\044\000\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\044\000\255\255\044\000\059\000\059\000\059\000\059\000\
|
|
\059\000\059\000\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\255\255\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\033\000\031\000\031\000\031\000\031\000\031\000\031\000\
|
|
\031\000\031\000\033\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\033\000\033\000\033\000\033\000\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\033\000\033\000\033\000\033\000\255\255\255\255\255\255\
|
|
\255\255\033\000\255\255\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\033\000\033\000\033\000\033\000\095\000\095\000\255\255\
|
|
\255\255\095\000\255\255\255\255\255\255\255\255\140\000\140\000\
|
|
\140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
|
|
\255\255\255\255\255\255\255\255\095\000\255\255\095\000\140\000\
|
|
\140\000\140\000\140\000\140\000\140\000\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\095\000\095\000\095\000\095\000\
|
|
\095\000\095\000\095\000\095\000\095\000\095\000\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\140\000\
|
|
\140\000\140\000\140\000\140\000\140\000\255\255\255\255\255\255\
|
|
\255\255\255\255\033\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\255\255\033\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\255\255\033\000\033\000\033\000\033\000\033\000\033\000\
|
|
\033\000\033\000\048\000\255\255\048\000\255\255\255\255\060\000\
|
|
\060\000\048\000\060\000\255\255\255\255\255\255\255\255\255\255\
|
|
\060\000\060\000\048\000\048\000\048\000\048\000\048\000\048\000\
|
|
\048\000\048\000\048\000\048\000\060\000\255\255\060\000\060\000\
|
|
\060\000\255\255\060\000\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\085\000\085\000\
|
|
\255\255\255\255\085\000\255\255\255\255\255\255\255\255\085\000\
|
|
\085\000\255\255\255\255\255\255\255\255\060\000\048\000\255\255\
|
|
\060\000\255\255\255\255\085\000\048\000\085\000\085\000\085\000\
|
|
\061\000\085\000\255\255\061\000\255\255\255\255\255\255\255\255\
|
|
\048\000\255\255\255\255\255\255\048\000\255\255\048\000\255\255\
|
|
\255\255\255\255\048\000\255\255\255\255\060\000\060\000\061\000\
|
|
\061\000\255\255\255\255\061\000\061\000\061\000\085\000\085\000\
|
|
\255\255\061\000\061\000\255\255\061\000\061\000\061\000\255\255\
|
|
\062\000\255\255\255\255\062\000\095\000\255\255\255\255\255\255\
|
|
\255\255\061\000\255\255\061\000\061\000\061\000\061\000\061\000\
|
|
\255\255\255\255\255\255\255\255\255\255\085\000\085\000\062\000\
|
|
\062\000\255\255\255\255\062\000\062\000\062\000\255\255\255\255\
|
|
\062\000\062\000\062\000\255\255\062\000\062\000\062\000\255\255\
|
|
\255\255\255\255\255\255\061\000\255\255\061\000\255\255\255\255\
|
|
\255\255\062\000\255\255\062\000\062\000\062\000\062\000\062\000\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\063\000\255\255\255\255\063\000\255\255\
|
|
\255\255\255\255\255\255\061\000\255\255\061\000\255\255\255\255\
|
|
\255\255\255\255\255\255\062\000\255\255\062\000\255\255\255\255\
|
|
\255\255\255\255\063\000\063\000\255\255\255\255\063\000\063\000\
|
|
\063\000\255\255\063\000\063\000\063\000\063\000\255\255\063\000\
|
|
\063\000\063\000\064\000\255\255\255\255\064\000\255\255\255\255\
|
|
\255\255\255\255\048\000\062\000\063\000\062\000\063\000\063\000\
|
|
\063\000\063\000\063\000\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\064\000\064\000\255\255\255\255\064\000\064\000\064\000\
|
|
\255\255\064\000\064\000\064\000\064\000\255\255\064\000\064\000\
|
|
\064\000\255\255\255\255\255\255\255\255\063\000\063\000\255\255\
|
|
\063\000\255\255\255\255\064\000\255\255\064\000\064\000\064\000\
|
|
\064\000\064\000\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\065\000\255\255\255\255\
|
|
\065\000\255\255\255\255\255\255\255\255\063\000\063\000\255\255\
|
|
\063\000\255\255\255\255\255\255\064\000\064\000\255\255\064\000\
|
|
\255\255\255\255\255\255\255\255\065\000\065\000\255\255\255\255\
|
|
\065\000\065\000\065\000\255\255\065\000\065\000\065\000\065\000\
|
|
\255\255\065\000\065\000\065\000\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\064\000\064\000\065\000\064\000\
|
|
\065\000\065\000\065\000\065\000\065\000\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\068\000\068\000\
|
|
\255\255\068\000\255\255\255\255\255\255\255\255\255\255\068\000\
|
|
\068\000\255\255\255\255\255\255\255\255\255\255\255\255\065\000\
|
|
\065\000\255\255\065\000\068\000\255\255\068\000\068\000\068\000\
|
|
\255\255\068\000\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\070\000\255\255\255\255\
|
|
\070\000\255\255\255\255\255\255\255\255\255\255\255\255\065\000\
|
|
\065\000\255\255\065\000\255\255\068\000\255\255\255\255\068\000\
|
|
\255\255\255\255\255\255\255\255\070\000\070\000\255\255\255\255\
|
|
\070\000\070\000\070\000\255\255\255\255\070\000\070\000\070\000\
|
|
\255\255\070\000\070\000\070\000\071\000\255\255\255\255\071\000\
|
|
\255\255\255\255\255\255\255\255\068\000\068\000\070\000\255\255\
|
|
\070\000\070\000\070\000\070\000\070\000\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\071\000\071\000\255\255\255\255\071\000\
|
|
\071\000\071\000\255\255\071\000\071\000\071\000\071\000\255\255\
|
|
\071\000\071\000\071\000\255\255\255\255\255\255\255\255\255\255\
|
|
\070\000\255\255\070\000\255\255\255\255\071\000\255\255\071\000\
|
|
\071\000\071\000\071\000\071\000\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\072\000\
|
|
\255\255\255\255\072\000\255\255\255\255\255\255\255\255\255\255\
|
|
\070\000\255\255\070\000\255\255\255\255\255\255\071\000\071\000\
|
|
\255\255\071\000\255\255\255\255\255\255\255\255\072\000\072\000\
|
|
\255\255\255\255\072\000\072\000\072\000\255\255\255\255\255\255\
|
|
\072\000\072\000\255\255\072\000\072\000\072\000\076\000\255\255\
|
|
\255\255\076\000\255\255\255\255\255\255\255\255\071\000\071\000\
|
|
\072\000\071\000\072\000\072\000\072\000\072\000\072\000\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\076\000\076\000\255\255\
|
|
\255\255\076\000\076\000\076\000\255\255\076\000\076\000\076\000\
|
|
\076\000\255\255\076\000\076\000\076\000\255\255\255\255\255\255\
|
|
\255\255\255\255\072\000\255\255\072\000\255\255\255\255\076\000\
|
|
\255\255\076\000\076\000\076\000\076\000\076\000\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\077\000\255\255\255\255\077\000\255\255\255\255\255\255\
|
|
\255\255\255\255\072\000\255\255\072\000\255\255\255\255\255\255\
|
|
\076\000\076\000\255\255\076\000\255\255\255\255\255\255\255\255\
|
|
\077\000\077\000\255\255\255\255\077\000\077\000\077\000\255\255\
|
|
\077\000\077\000\077\000\077\000\255\255\077\000\077\000\077\000\
|
|
\078\000\255\255\255\255\078\000\255\255\255\255\255\255\255\255\
|
|
\076\000\076\000\077\000\076\000\077\000\077\000\077\000\077\000\
|
|
\077\000\255\255\255\255\255\255\255\255\255\255\255\255\078\000\
|
|
\078\000\255\255\255\255\078\000\078\000\078\000\255\255\078\000\
|
|
\078\000\078\000\078\000\255\255\078\000\078\000\078\000\255\255\
|
|
\255\255\255\255\255\255\077\000\077\000\255\255\077\000\255\255\
|
|
\255\255\078\000\255\255\078\000\078\000\078\000\078\000\078\000\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\079\000\255\255\255\255\079\000\255\255\
|
|
\255\255\255\255\255\255\077\000\077\000\255\255\077\000\255\255\
|
|
\255\255\255\255\078\000\078\000\255\255\078\000\255\255\255\255\
|
|
\255\255\255\255\079\000\079\000\255\255\255\255\079\000\079\000\
|
|
\079\000\255\255\255\255\079\000\079\000\079\000\255\255\079\000\
|
|
\079\000\079\000\080\000\255\255\255\255\080\000\255\255\255\255\
|
|
\255\255\255\255\078\000\078\000\079\000\078\000\079\000\079\000\
|
|
\079\000\079\000\079\000\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\080\000\080\000\255\255\255\255\080\000\080\000\080\000\
|
|
\255\255\255\255\255\255\080\000\080\000\255\255\080\000\080\000\
|
|
\080\000\255\255\255\255\255\255\255\255\255\255\079\000\255\255\
|
|
\079\000\255\255\255\255\080\000\255\255\080\000\080\000\080\000\
|
|
\080\000\080\000\255\255\255\255\255\255\086\000\255\255\255\255\
|
|
\086\000\086\000\086\000\255\255\255\255\086\000\086\000\086\000\
|
|
\255\255\086\000\086\000\086\000\255\255\255\255\079\000\255\255\
|
|
\079\000\255\255\255\255\255\255\255\255\080\000\086\000\080\000\
|
|
\086\000\086\000\086\000\086\000\086\000\255\255\255\255\255\255\
|
|
\255\255\255\255\087\000\255\255\255\255\087\000\087\000\087\000\
|
|
\255\255\255\255\087\000\087\000\087\000\255\255\087\000\087\000\
|
|
\087\000\255\255\255\255\255\255\255\255\080\000\255\255\080\000\
|
|
\086\000\086\000\086\000\087\000\255\255\087\000\087\000\087\000\
|
|
\087\000\087\000\255\255\255\255\255\255\255\255\255\255\088\000\
|
|
\255\255\255\255\088\000\088\000\088\000\255\255\255\255\088\000\
|
|
\088\000\088\000\255\255\088\000\088\000\088\000\255\255\255\255\
|
|
\086\000\086\000\086\000\255\255\255\255\087\000\087\000\087\000\
|
|
\088\000\255\255\088\000\088\000\088\000\088\000\088\000\255\255\
|
|
\255\255\255\255\255\255\255\255\089\000\255\255\255\255\089\000\
|
|
\089\000\089\000\255\255\255\255\089\000\089\000\089\000\255\255\
|
|
\089\000\089\000\089\000\255\255\255\255\087\000\087\000\087\000\
|
|
\255\255\255\255\088\000\088\000\088\000\089\000\255\255\089\000\
|
|
\089\000\089\000\089\000\089\000\255\255\255\255\255\255\255\255\
|
|
\255\255\090\000\255\255\255\255\090\000\090\000\090\000\255\255\
|
|
\255\255\090\000\090\000\090\000\255\255\090\000\090\000\090\000\
|
|
\255\255\255\255\088\000\088\000\088\000\255\255\255\255\089\000\
|
|
\089\000\089\000\090\000\255\255\090\000\090\000\090\000\090\000\
|
|
\090\000\255\255\255\255\255\255\255\255\255\255\091\000\255\255\
|
|
\255\255\091\000\091\000\091\000\255\255\255\255\091\000\091\000\
|
|
\091\000\255\255\091\000\091\000\091\000\255\255\255\255\089\000\
|
|
\089\000\089\000\255\255\255\255\090\000\090\000\090\000\091\000\
|
|
\255\255\091\000\091\000\091\000\091\000\091\000\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\092\000\
|
|
\092\000\255\255\255\255\092\000\255\255\255\255\255\255\255\255\
|
|
\092\000\092\000\255\255\255\255\090\000\090\000\090\000\255\255\
|
|
\255\255\091\000\091\000\091\000\092\000\255\255\092\000\092\000\
|
|
\092\000\255\255\092\000\255\255\255\255\255\255\255\255\255\255\
|
|
\093\000\255\255\255\255\093\000\093\000\093\000\255\255\255\255\
|
|
\093\000\093\000\093\000\255\255\093\000\093\000\093\000\255\255\
|
|
\255\255\091\000\091\000\091\000\255\255\255\255\255\255\092\000\
|
|
\092\000\093\000\255\255\093\000\093\000\093\000\093\000\093\000\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\094\000\094\000\255\255\255\255\094\000\255\255\255\255\
|
|
\105\000\105\000\094\000\094\000\105\000\255\255\092\000\092\000\
|
|
\255\255\105\000\105\000\093\000\093\000\093\000\094\000\255\255\
|
|
\094\000\094\000\094\000\255\255\094\000\105\000\255\255\105\000\
|
|
\105\000\105\000\255\255\105\000\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\106\000\106\000\255\255\
|
|
\255\255\106\000\255\255\093\000\093\000\093\000\106\000\106\000\
|
|
\255\255\094\000\094\000\255\255\255\255\255\255\255\255\255\255\
|
|
\105\000\105\000\106\000\255\255\106\000\106\000\106\000\255\255\
|
|
\106\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\107\000\107\000\255\255\255\255\107\000\255\255\
|
|
\094\000\094\000\255\255\107\000\107\000\255\255\255\255\105\000\
|
|
\105\000\255\255\255\255\255\255\255\255\106\000\106\000\107\000\
|
|
\255\255\107\000\107\000\107\000\255\255\107\000\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\108\000\
|
|
\108\000\255\255\255\255\108\000\255\255\255\255\109\000\109\000\
|
|
\108\000\108\000\109\000\255\255\106\000\106\000\255\255\109\000\
|
|
\109\000\255\255\107\000\107\000\108\000\255\255\108\000\108\000\
|
|
\108\000\255\255\108\000\109\000\255\255\109\000\109\000\109\000\
|
|
\255\255\109\000\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\110\000\110\000\255\255\255\255\110\000\
|
|
\255\255\107\000\107\000\255\255\110\000\110\000\255\255\108\000\
|
|
\108\000\255\255\255\255\255\255\255\255\255\255\109\000\109\000\
|
|
\110\000\255\255\110\000\110\000\110\000\255\255\110\000\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\111\000\111\000\255\255\255\255\111\000\255\255\108\000\108\000\
|
|
\255\255\111\000\111\000\255\255\255\255\109\000\109\000\255\255\
|
|
\255\255\255\255\255\255\110\000\110\000\111\000\255\255\111\000\
|
|
\111\000\111\000\255\255\111\000\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\112\000\112\000\255\255\
|
|
\112\000\255\255\255\255\255\255\255\255\255\255\112\000\112\000\
|
|
\255\255\255\255\110\000\110\000\255\255\255\255\255\255\255\255\
|
|
\111\000\111\000\112\000\255\255\112\000\112\000\112\000\255\255\
|
|
\112\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\113\000\113\000\255\255\113\000\255\255\255\255\255\255\255\255\
|
|
\255\255\113\000\113\000\255\255\255\255\255\255\255\255\111\000\
|
|
\111\000\255\255\255\255\112\000\255\255\113\000\112\000\113\000\
|
|
\113\000\113\000\255\255\113\000\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\114\000\114\000\255\255\114\000\255\255\
|
|
\115\000\115\000\255\255\115\000\114\000\114\000\255\255\255\255\
|
|
\255\255\115\000\115\000\112\000\112\000\255\255\113\000\255\255\
|
|
\114\000\113\000\114\000\114\000\114\000\115\000\114\000\115\000\
|
|
\115\000\115\000\255\255\115\000\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\116\000\116\000\255\255\116\000\255\255\
|
|
\255\255\255\255\255\255\255\255\116\000\116\000\113\000\113\000\
|
|
\255\255\114\000\255\255\255\255\114\000\255\255\115\000\255\255\
|
|
\116\000\115\000\116\000\116\000\116\000\255\255\116\000\255\255\
|
|
\255\255\255\255\117\000\255\255\255\255\117\000\117\000\117\000\
|
|
\255\255\255\255\117\000\117\000\117\000\255\255\117\000\117\000\
|
|
\117\000\114\000\114\000\255\255\255\255\255\255\115\000\115\000\
|
|
\255\255\116\000\255\255\117\000\116\000\117\000\117\000\117\000\
|
|
\117\000\117\000\255\255\255\255\255\255\255\255\255\255\118\000\
|
|
\255\255\255\255\118\000\118\000\118\000\255\255\255\255\118\000\
|
|
\118\000\118\000\255\255\118\000\118\000\118\000\255\255\255\255\
|
|
\255\255\116\000\116\000\255\255\255\255\117\000\117\000\117\000\
|
|
\118\000\255\255\118\000\118\000\118\000\118\000\118\000\255\255\
|
|
\255\255\255\255\255\255\255\255\119\000\255\255\255\255\119\000\
|
|
\119\000\119\000\255\255\255\255\119\000\119\000\119\000\255\255\
|
|
\119\000\119\000\119\000\255\255\255\255\117\000\117\000\117\000\
|
|
\255\255\255\255\118\000\118\000\118\000\119\000\255\255\119\000\
|
|
\119\000\119\000\119\000\119\000\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\120\000\255\255\255\255\120\000\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\118\000\118\000\118\000\255\255\255\255\119\000\
|
|
\119\000\119\000\255\255\120\000\255\255\255\255\255\255\255\255\
|
|
\120\000\120\000\255\255\120\000\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\120\000\255\255\119\000\
|
|
\119\000\119\000\120\000\120\000\120\000\120\000\120\000\120\000\
|
|
\120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
|
|
\120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
|
|
\120\000\120\000\120\000\120\000\255\255\255\255\255\255\255\255\
|
|
\120\000\255\255\120\000\120\000\120\000\120\000\120\000\120\000\
|
|
\120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
|
|
\120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
|
|
\120\000\120\000\120\000\120\000\145\000\145\000\145\000\145\000\
|
|
\145\000\145\000\145\000\145\000\145\000\145\000\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\145\000\145\000\145\000\
|
|
\145\000\145\000\145\000\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\145\000\145\000\145\000\
|
|
\145\000\145\000\145\000\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
|
|
\120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
|
|
\120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
|
|
\255\255\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
|
|
\120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
|
|
\120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
|
|
\120\000\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
|
|
\255\255\120\000\120\000\120\000\120\000\120\000\120\000\120\000\
|
|
\120\000\120\000\124\000\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\124\000\255\255\255\255\
|
|
\255\255\255\255\124\000\255\255\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\124\000\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\129\000\129\000\129\000\129\000\
|
|
\129\000\129\000\129\000\129\000\129\000\129\000\129\000\129\000\
|
|
\129\000\129\000\129\000\129\000\129\000\129\000\129\000\129\000\
|
|
\129\000\129\000\129\000\129\000\129\000\129\000\255\255\255\255\
|
|
\255\255\255\255\129\000\255\255\129\000\129\000\129\000\129\000\
|
|
\129\000\129\000\129\000\129\000\129\000\129\000\129\000\129\000\
|
|
\129\000\129\000\129\000\129\000\129\000\129\000\129\000\129\000\
|
|
\129\000\129\000\129\000\129\000\129\000\129\000\255\255\255\255\
|
|
\255\255\255\255\255\255\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\255\255\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\255\255\124\000\124\000\124\000\124\000\124\000\
|
|
\124\000\124\000\124\000\129\000\129\000\129\000\129\000\129\000\
|
|
\129\000\129\000\129\000\129\000\129\000\129\000\129\000\129\000\
|
|
\129\000\129\000\129\000\129\000\129\000\129\000\129\000\129\000\
|
|
\129\000\129\000\255\255\129\000\129\000\129\000\129\000\129\000\
|
|
\129\000\129\000\129\000\129\000\129\000\129\000\129\000\129\000\
|
|
\129\000\129\000\129\000\129\000\129\000\129\000\129\000\129\000\
|
|
\129\000\129\000\129\000\129\000\129\000\129\000\129\000\129\000\
|
|
\129\000\129\000\255\255\129\000\129\000\129\000\129\000\129\000\
|
|
\129\000\129\000\129\000\130\000\130\000\130\000\130\000\130\000\
|
|
\130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
|
|
\130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
|
|
\130\000\130\000\130\000\130\000\130\000\255\255\255\255\255\255\
|
|
\255\255\130\000\255\255\130\000\130\000\130\000\130\000\130\000\
|
|
\130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
|
|
\130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
|
|
\130\000\130\000\130\000\130\000\130\000\151\000\151\000\151\000\
|
|
\151\000\151\000\151\000\151\000\151\000\151\000\151\000\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\151\000\151\000\
|
|
\151\000\151\000\151\000\151\000\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\151\000\151\000\
|
|
\151\000\151\000\151\000\151\000\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\130\000\130\000\130\000\130\000\130\000\130\000\
|
|
\130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
|
|
\130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
|
|
\130\000\255\255\130\000\130\000\130\000\130\000\130\000\130\000\
|
|
\130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
|
|
\130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
|
|
\130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
|
|
\130\000\131\000\130\000\130\000\130\000\130\000\130\000\130\000\
|
|
\130\000\130\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\255\255\255\255\131\000\255\255\
|
|
\255\255\255\255\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\255\255\255\255\255\255\
|
|
\255\255\131\000\255\255\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\156\000\156\000\156\000\
|
|
\156\000\156\000\156\000\156\000\156\000\156\000\156\000\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\156\000\156\000\
|
|
\156\000\156\000\156\000\156\000\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\156\000\156\000\
|
|
\156\000\156\000\156\000\156\000\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\255\255\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\132\000\131\000\131\000\131\000\131\000\131\000\131\000\
|
|
\131\000\131\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\255\255\255\255\132\000\255\255\
|
|
\255\255\255\255\255\255\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\255\255\255\255\255\255\
|
|
\255\255\132\000\255\255\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\255\255\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\255\255\132\000\132\000\132\000\132\000\132\000\132\000\
|
|
\132\000\132\000\133\000\255\255\133\000\255\255\255\255\149\000\
|
|
\255\255\133\000\149\000\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\133\000\133\000\133\000\133\000\133\000\133\000\
|
|
\133\000\133\000\133\000\133\000\255\255\149\000\255\255\149\000\
|
|
\255\255\255\255\255\255\255\255\149\000\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\149\000\149\000\149\000\
|
|
\149\000\149\000\149\000\149\000\149\000\149\000\149\000\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\133\000\255\255\
|
|
\255\255\255\255\255\255\255\255\133\000\157\000\255\255\255\255\
|
|
\157\000\157\000\157\000\255\255\255\255\255\255\157\000\157\000\
|
|
\133\000\157\000\157\000\157\000\133\000\255\255\133\000\255\255\
|
|
\255\255\149\000\133\000\255\255\255\255\255\255\157\000\149\000\
|
|
\157\000\157\000\157\000\157\000\157\000\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\149\000\255\255\255\255\255\255\149\000\
|
|
\255\255\149\000\255\255\255\255\255\255\149\000\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\157\000\255\255\157\000\255\255\255\255\255\255\255\255\255\255\
|
|
\158\000\255\255\255\255\158\000\158\000\158\000\255\255\255\255\
|
|
\255\255\158\000\158\000\255\255\158\000\158\000\158\000\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\157\000\158\000\157\000\158\000\158\000\158\000\158\000\158\000\
|
|
\158\000\158\000\158\000\158\000\158\000\158\000\158\000\158\000\
|
|
\158\000\158\000\158\000\158\000\158\000\158\000\158\000\158\000\
|
|
\158\000\158\000\158\000\158\000\158\000\158\000\158\000\158\000\
|
|
\158\000\158\000\255\255\158\000\255\255\158\000\158\000\255\255\
|
|
\158\000\158\000\158\000\158\000\158\000\158\000\158\000\158\000\
|
|
\158\000\158\000\158\000\158\000\158\000\158\000\158\000\158\000\
|
|
\158\000\158\000\158\000\158\000\158\000\158\000\158\000\158\000\
|
|
\158\000\158\000\255\255\158\000\255\255\158\000\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\149\000\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\158\000\
|
|
\158\000\158\000\158\000\158\000\158\000\158\000\158\000\158\000\
|
|
\158\000\158\000\158\000\158\000\158\000\158\000\158\000\158\000\
|
|
\158\000\158\000\158\000\158\000\158\000\158\000\255\255\158\000\
|
|
\158\000\158\000\158\000\158\000\158\000\158\000\158\000\158\000\
|
|
\158\000\158\000\158\000\158\000\158\000\158\000\158\000\158\000\
|
|
\158\000\158\000\158\000\158\000\158\000\158\000\158\000\158\000\
|
|
\158\000\158\000\158\000\158\000\158\000\158\000\255\255\158\000\
|
|
\158\000\158\000\158\000\158\000\158\000\158\000\158\000\159\000\
|
|
\255\255\255\255\159\000\159\000\159\000\255\255\255\255\255\255\
|
|
\159\000\159\000\255\255\159\000\159\000\159\000\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\159\000\255\255\159\000\159\000\159\000\159\000\159\000\255\255\
|
|
\255\255\255\255\255\255\160\000\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\255\255\255\255\
|
|
\160\000\255\255\159\000\255\255\159\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\255\255\
|
|
\255\255\255\255\159\000\160\000\159\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\255\255\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\255\255\160\000\160\000\160\000\160\000\
|
|
\160\000\160\000\160\000\160\000\161\000\255\255\255\255\161\000\
|
|
\161\000\161\000\255\255\255\255\255\255\161\000\161\000\255\255\
|
|
\161\000\161\000\161\000\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\161\000\255\255\161\000\
|
|
\161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
|
|
\161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
|
|
\161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
|
|
\161\000\161\000\161\000\161\000\161\000\161\000\255\255\161\000\
|
|
\255\255\161\000\161\000\255\255\161\000\161\000\161\000\161\000\
|
|
\161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
|
|
\161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
|
|
\161\000\161\000\161\000\161\000\161\000\161\000\255\255\161\000\
|
|
\255\255\161\000\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\161\000\161\000\161\000\161\000\161\000\
|
|
\161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
|
|
\161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
|
|
\161\000\161\000\255\255\161\000\161\000\161\000\161\000\161\000\
|
|
\161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
|
|
\161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
|
|
\161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
|
|
\161\000\161\000\255\255\161\000\161\000\161\000\161\000\161\000\
|
|
\161\000\161\000\161\000\162\000\255\255\255\255\162\000\162\000\
|
|
\162\000\255\255\255\255\255\255\162\000\162\000\255\255\162\000\
|
|
\162\000\162\000\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\162\000\255\255\162\000\162\000\
|
|
\162\000\162\000\162\000\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\163\000\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\255\255\162\000\163\000\
|
|
\162\000\255\255\255\255\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\162\000\255\255\
|
|
\162\000\255\255\163\000\255\255\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\164\000\164\000\164\000\164\000\
|
|
\164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
|
|
\164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
|
|
\164\000\164\000\164\000\164\000\164\000\164\000\255\255\255\255\
|
|
\255\255\255\255\164\000\255\255\164\000\164\000\164\000\164\000\
|
|
\164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
|
|
\164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
|
|
\164\000\164\000\164\000\164\000\164\000\164\000\255\255\255\255\
|
|
\255\255\255\255\255\255\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\255\255\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\255\255\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\164\000\164\000\164\000\164\000\164\000\
|
|
\164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
|
|
\164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
|
|
\164\000\164\000\255\255\164\000\164\000\164\000\164\000\164\000\
|
|
\164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
|
|
\164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
|
|
\164\000\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
|
|
\164\000\164\000\165\000\164\000\164\000\164\000\164\000\164\000\
|
|
\164\000\164\000\164\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\255\255\255\255\165\000\
|
|
\255\255\255\255\255\255\255\255\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\255\255\255\255\
|
|
\255\255\255\255\165\000\255\255\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\171\000\171\000\171\000\171\000\
|
|
\171\000\171\000\171\000\171\000\171\000\171\000\171\000\171\000\
|
|
\171\000\171\000\171\000\171\000\171\000\171\000\171\000\171\000\
|
|
\171\000\171\000\171\000\171\000\171\000\171\000\255\255\255\255\
|
|
\255\255\255\255\171\000\255\255\171\000\171\000\171\000\171\000\
|
|
\171\000\171\000\171\000\171\000\171\000\171\000\171\000\171\000\
|
|
\171\000\171\000\171\000\171\000\171\000\171\000\171\000\171\000\
|
|
\171\000\171\000\171\000\171\000\171\000\171\000\255\255\255\255\
|
|
\255\255\255\255\255\255\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\255\255\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\255\255\165\000\165\000\165\000\165\000\165\000\
|
|
\165\000\165\000\165\000\171\000\171\000\171\000\171\000\171\000\
|
|
\171\000\171\000\171\000\171\000\171\000\171\000\171\000\171\000\
|
|
\171\000\171\000\171\000\171\000\171\000\171\000\171\000\171\000\
|
|
\171\000\171\000\255\255\171\000\171\000\171\000\171\000\171\000\
|
|
\171\000\171\000\171\000\171\000\171\000\171\000\171\000\171\000\
|
|
\171\000\171\000\171\000\171\000\171\000\171\000\171\000\171\000\
|
|
\171\000\171\000\171\000\171\000\171\000\171\000\171\000\171\000\
|
|
\171\000\171\000\255\255\171\000\171\000\171\000\171\000\171\000\
|
|
\171\000\171\000\171\000\172\000\172\000\172\000\172\000\172\000\
|
|
\172\000\172\000\172\000\172\000\172\000\172\000\172\000\172\000\
|
|
\172\000\172\000\172\000\172\000\172\000\172\000\172\000\172\000\
|
|
\172\000\172\000\172\000\172\000\172\000\255\255\255\255\255\255\
|
|
\255\255\172\000\255\255\172\000\172\000\172\000\172\000\172\000\
|
|
\172\000\172\000\172\000\172\000\172\000\172\000\172\000\172\000\
|
|
\172\000\172\000\172\000\172\000\172\000\172\000\172\000\172\000\
|
|
\172\000\172\000\172\000\172\000\172\000\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\172\000\172\000\172\000\172\000\172\000\172\000\
|
|
\172\000\172\000\172\000\172\000\172\000\172\000\172\000\172\000\
|
|
\172\000\172\000\172\000\172\000\172\000\172\000\172\000\172\000\
|
|
\172\000\255\255\172\000\172\000\172\000\172\000\172\000\172\000\
|
|
\172\000\172\000\172\000\172\000\172\000\172\000\172\000\172\000\
|
|
\172\000\172\000\172\000\172\000\172\000\172\000\172\000\172\000\
|
|
\172\000\172\000\172\000\172\000\172\000\172\000\172\000\172\000\
|
|
\172\000\173\000\172\000\172\000\172\000\172\000\172\000\172\000\
|
|
\172\000\172\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\255\255\255\255\173\000\255\255\
|
|
\255\255\255\255\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\255\255\255\255\255\255\
|
|
\255\255\173\000\255\255\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\255\255\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\174\000\173\000\173\000\173\000\173\000\173\000\173\000\
|
|
\173\000\173\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\255\255\255\255\174\000\255\255\
|
|
\255\255\255\255\255\255\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\255\255\255\255\255\255\
|
|
\255\255\174\000\255\255\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\255\255\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\255\255\174\000\174\000\174\000\174\000\174\000\174\000\
|
|
\174\000\174\000\175\000\255\255\255\255\175\000\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\175\000\255\255\175\000\175\000\
|
|
\175\000\175\000\175\000\175\000\175\000\175\000\175\000\175\000\
|
|
\175\000\255\255\255\255\255\255\255\255\255\255\255\255\175\000\
|
|
\175\000\175\000\175\000\175\000\175\000\175\000\175\000\175\000\
|
|
\175\000\175\000\175\000\175\000\175\000\175\000\175\000\175\000\
|
|
\175\000\175\000\175\000\175\000\175\000\175\000\175\000\175\000\
|
|
\175\000\255\255\255\255\255\255\255\255\175\000\175\000\175\000\
|
|
\175\000\175\000\175\000\175\000\175\000\175\000\175\000\175\000\
|
|
\175\000\175\000\175\000\175\000\175\000\175\000\175\000\175\000\
|
|
\175\000\175\000\175\000\175\000\175\000\175\000\175\000\175\000\
|
|
\175\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\175\000\175\000\
|
|
\175\000\175\000\175\000\175\000\175\000\175\000\175\000\175\000\
|
|
\175\000\175\000\175\000\175\000\175\000\175\000\175\000\175\000\
|
|
\175\000\175\000\175\000\175\000\175\000\255\255\175\000\175\000\
|
|
\175\000\175\000\175\000\175\000\175\000\175\000\175\000\175\000\
|
|
\175\000\175\000\175\000\175\000\175\000\175\000\175\000\175\000\
|
|
\175\000\175\000\175\000\175\000\175\000\175\000\175\000\175\000\
|
|
\175\000\175\000\175\000\175\000\175\000\255\255\175\000\175\000\
|
|
\175\000\175\000\175\000\175\000\175\000\175\000\175\000\177\000\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
|
|
\177\000\177\000\177\000\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
|
|
\177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
|
|
\177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
|
|
\177\000\177\000\177\000\255\255\255\255\255\255\255\255\177\000\
|
|
\255\255\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
|
|
\177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
|
|
\177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
|
|
\177\000\177\000\177\000\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
|
|
\177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
|
|
\177\000\177\000\177\000\177\000\177\000\177\000\177\000\255\255\
|
|
\177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
|
|
\177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
|
|
\177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
|
|
\177\000\177\000\177\000\177\000\177\000\177\000\177\000\255\255\
|
|
\177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
|
|
\178\000\255\255\255\255\255\255\255\255\255\255\255\255\178\000\
|
|
\255\255\178\000\178\000\178\000\178\000\178\000\178\000\178\000\
|
|
\178\000\178\000\178\000\178\000\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\178\000\178\000\178\000\178\000\178\000\178\000\
|
|
\178\000\178\000\178\000\178\000\178\000\178\000\178\000\178\000\
|
|
\178\000\178\000\178\000\178\000\178\000\178\000\178\000\178\000\
|
|
\178\000\178\000\178\000\178\000\255\255\255\255\255\255\255\255\
|
|
\178\000\255\255\178\000\178\000\178\000\178\000\178\000\178\000\
|
|
\178\000\178\000\178\000\178\000\178\000\178\000\178\000\178\000\
|
|
\178\000\178\000\178\000\178\000\178\000\178\000\178\000\178\000\
|
|
\178\000\178\000\178\000\178\000\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\178\000\178\000\178\000\178\000\178\000\178\000\178\000\
|
|
\178\000\178\000\178\000\178\000\178\000\178\000\178\000\178\000\
|
|
\178\000\178\000\178\000\178\000\178\000\178\000\178\000\178\000\
|
|
\255\255\178\000\178\000\178\000\178\000\178\000\178\000\178\000\
|
|
\178\000\178\000\178\000\178\000\178\000\178\000\178\000\178\000\
|
|
\178\000\178\000\178\000\178\000\178\000\178\000\178\000\178\000\
|
|
\178\000\178\000\178\000\178\000\178\000\178\000\178\000\178\000\
|
|
\180\000\178\000\178\000\178\000\178\000\178\000\178\000\178\000\
|
|
\178\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\255\255\255\255\255\255\255\255\
|
|
\180\000\255\255\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\184\000\184\000\184\000\184\000\184\000\184\000\
|
|
\184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
|
|
\184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
|
|
\184\000\184\000\184\000\184\000\255\255\255\255\255\255\255\255\
|
|
\184\000\255\255\184\000\184\000\184\000\184\000\184\000\184\000\
|
|
\184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
|
|
\184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
|
|
\184\000\184\000\184\000\184\000\255\255\255\255\255\255\255\255\
|
|
\255\255\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\255\255\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\255\255\180\000\180\000\180\000\180\000\180\000\180\000\180\000\
|
|
\180\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
|
|
\184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
|
|
\184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
|
|
\255\255\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
|
|
\184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
|
|
\184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
|
|
\184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
|
|
\255\255\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
|
|
\184\000\185\000\185\000\185\000\185\000\185\000\185\000\185\000\
|
|
\185\000\185\000\185\000\185\000\185\000\185\000\185\000\185\000\
|
|
\185\000\185\000\185\000\185\000\185\000\185\000\185\000\185\000\
|
|
\185\000\185\000\185\000\255\255\255\255\255\255\255\255\185\000\
|
|
\255\255\185\000\185\000\185\000\185\000\185\000\185\000\185\000\
|
|
\185\000\185\000\185\000\185\000\185\000\185\000\185\000\185\000\
|
|
\185\000\185\000\185\000\185\000\185\000\185\000\185\000\185\000\
|
|
\185\000\185\000\185\000\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\185\000\185\000\185\000\185\000\185\000\185\000\185\000\185\000\
|
|
\185\000\185\000\185\000\185\000\185\000\185\000\185\000\185\000\
|
|
\185\000\185\000\185\000\185\000\185\000\185\000\185\000\255\255\
|
|
\185\000\185\000\185\000\185\000\185\000\185\000\185\000\185\000\
|
|
\185\000\185\000\185\000\185\000\185\000\185\000\185\000\185\000\
|
|
\185\000\185\000\185\000\185\000\185\000\185\000\185\000\185\000\
|
|
\185\000\185\000\185\000\185\000\185\000\185\000\185\000\186\000\
|
|
\185\000\185\000\185\000\185\000\185\000\185\000\185\000\185\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\255\255\255\255\186\000\255\255\255\255\255\255\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\255\255\255\255\255\255\255\255\186\000\
|
|
\255\255\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\255\255\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\187\000\
|
|
\186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\255\255\255\255\187\000\255\255\255\255\255\255\
|
|
\255\255\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\255\255\255\255\255\255\255\255\187\000\
|
|
\255\255\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\255\255\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\255\255\
|
|
\187\000\187\000\187\000\187\000\187\000\187\000\187\000\187\000\
|
|
\255\255";
|
|
Lexing.lex_base_code =
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\027\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\066\000\101\000\136\000\
|
|
\171\000\206\000\000\000\000\000\000\000\000\000\241\000\020\001\
|
|
\055\001\000\000\000\000\018\000\090\001\125\001\160\001\195\001\
|
|
\230\001\000\000\021\000\026\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\247\001\
|
|
\040\002\000\000\034\000\000\000\000\000\003\000\000\000\000\000\
|
|
\049\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\
|
|
\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\036\002\000\000\244\002\000\000\000\000\061\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000";
|
|
Lexing.lex_backtrk_code =
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\034\000\000\000\000\000\000\000\000\000\000\000\049\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\061\000\061\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000";
|
|
Lexing.lex_default_code =
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\041\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000";
|
|
Lexing.lex_trans_code =
|
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\001\000\000\000\058\000\058\000\000\000\058\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\001\000\000\000\000\000\001\000\007\000\044\000\000\000\007\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
|
|
\004\000\004\000\000\000\007\000\012\000\000\000\000\000\012\000\
|
|
\012\000\012\000\000\000\000\000\000\000\000\000\012\000\000\000\
|
|
\012\000\012\000\012\000\007\000\000\000\000\000\007\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\012\000\000\000\012\000\
|
|
\012\000\012\000\012\000\012\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\007\000\015\000\000\000\000\000\015\000\015\000\
|
|
\015\000\000\000\000\000\000\000\015\000\015\000\000\000\015\000\
|
|
\015\000\015\000\000\000\000\000\000\000\000\000\000\000\012\000\
|
|
\000\000\012\000\000\000\000\000\015\000\000\000\015\000\015\000\
|
|
\015\000\015\000\015\000\000\000\000\000\000\000\012\000\000\000\
|
|
\000\000\012\000\012\000\012\000\000\000\000\000\000\000\012\000\
|
|
\012\000\000\000\012\000\012\000\012\000\000\000\000\000\012\000\
|
|
\000\000\012\000\000\000\000\000\000\000\000\000\015\000\012\000\
|
|
\015\000\012\000\012\000\012\000\012\000\012\000\000\000\000\000\
|
|
\000\000\012\000\000\000\000\000\012\000\012\000\012\000\000\000\
|
|
\000\000\000\000\012\000\012\000\000\000\012\000\012\000\012\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\015\000\000\000\
|
|
\015\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
|
|
\012\000\000\000\000\000\000\000\012\000\000\000\000\000\012\000\
|
|
\012\000\012\000\000\000\000\000\000\000\012\000\012\000\000\000\
|
|
\012\000\012\000\012\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\012\000\000\000\012\000\012\000\012\000\012\000\012\000\
|
|
\012\000\012\000\012\000\012\000\000\000\000\000\000\000\012\000\
|
|
\000\000\000\000\012\000\012\000\012\000\000\000\000\000\000\000\
|
|
\012\000\012\000\000\000\012\000\012\000\012\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\012\000\000\000\012\000\012\000\
|
|
\012\000\012\000\012\000\012\000\012\000\012\000\012\000\000\000\
|
|
\000\000\000\000\012\000\000\000\000\000\012\000\012\000\012\000\
|
|
\000\000\000\000\000\000\012\000\012\000\000\000\012\000\012\000\
|
|
\012\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\
|
|
\000\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
|
|
\012\000\012\000\000\000\000\000\000\000\012\000\000\000\000\000\
|
|
\012\000\012\000\012\000\000\000\000\000\000\000\012\000\012\000\
|
|
\000\000\012\000\012\000\012\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\012\000\000\000\012\000\012\000\012\000\012\000\
|
|
\012\000\012\000\012\000\012\000\012\000\000\000\000\000\000\000\
|
|
\012\000\000\000\000\000\012\000\012\000\012\000\000\000\000\000\
|
|
\000\000\012\000\012\000\000\000\012\000\012\000\012\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\012\000\000\000\012\000\
|
|
\012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
|
|
\000\000\000\000\000\000\012\000\000\000\000\000\012\000\012\000\
|
|
\012\000\000\000\000\000\000\000\012\000\012\000\000\000\012\000\
|
|
\012\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\012\000\000\000\012\000\012\000\012\000\012\000\012\000\012\000\
|
|
\012\000\012\000\012\000\000\000\000\000\000\000\012\000\000\000\
|
|
\000\000\012\000\012\000\012\000\000\000\000\000\000\000\012\000\
|
|
\012\000\000\000\012\000\012\000\012\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\012\000\000\000\012\000\012\000\012\000\
|
|
\012\000\012\000\012\000\012\000\012\000\012\000\000\000\000\000\
|
|
\000\000\012\000\000\000\000\000\012\000\012\000\012\000\000\000\
|
|
\000\000\000\000\012\000\012\000\000\000\012\000\012\000\012\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\
|
|
\012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
|
|
\012\000\000\000\000\000\000\000\015\000\000\000\000\000\015\000\
|
|
\015\000\015\000\000\000\000\000\000\000\015\000\015\000\000\000\
|
|
\015\000\015\000\015\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\012\000\000\000\012\000\012\000\015\000\012\000\015\000\
|
|
\015\000\015\000\015\000\015\000\000\000\000\000\000\000\015\000\
|
|
\000\000\000\000\015\000\015\000\015\000\000\000\000\000\000\000\
|
|
\015\000\015\000\000\000\015\000\015\000\015\000\000\000\000\000\
|
|
\000\000\029\000\000\000\000\000\012\000\000\000\012\000\015\000\
|
|
\015\000\015\000\015\000\015\000\015\000\015\000\015\000\004\000\
|
|
\004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
|
|
\004\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\000\
|
|
\000\000\015\000\015\000\000\000\015\000\000\000\000\000\000\000\
|
|
\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
|
|
\004\000\004\000\015\000\000\000\015\000\058\000\058\000\058\000\
|
|
\058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
|
|
\058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
|
|
\058\000\058\000\058\000\058\000\058\000\058\000\058\000\000\000\
|
|
\000\000\000\000\000\000\058\000\000\000\058\000\058\000\058\000\
|
|
\058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
|
|
\058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
|
|
\058\000\058\000\058\000\058\000\058\000\058\000\058\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\058\000\058\000\058\000\058\000\
|
|
\058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
|
|
\058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
|
|
\058\000\058\000\058\000\000\000\058\000\058\000\058\000\058\000\
|
|
\058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
|
|
\058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
|
|
\058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
|
|
\058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
|
|
\058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
|
|
\058\000\058\000\058\000\058\000\058\000\058\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\058\000\058\000\058\000\
|
|
\058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
|
|
\058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
|
|
\058\000\058\000\058\000\058\000\058\000\058\000\058\000\000\000\
|
|
\000\000\000\000\000\000\058\000\000\000\058\000\058\000\058\000\
|
|
\058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
|
|
\058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
|
|
\058\000\058\000\058\000\058\000\058\000\058\000\058\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
|
|
\000\000\000\000\000\000\000\000\058\000\058\000\058\000\058\000\
|
|
\058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
|
|
\058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
|
|
\058\000\058\000\058\000\000\000\058\000\058\000\058\000\058\000\
|
|
\058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
|
|
\058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
|
|
\058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
|
|
\058\000\058\000\058\000\000\000\058\000\058\000\058\000\058\000\
|
|
\058\000\058\000\058\000\058\000\000\000";
|
|
Lexing.lex_check_code =
|
|
"\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\016\000\100\000\149\000\153\000\100\000\149\000\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\016\000\255\255\100\000\000\000\019\000\101\000\255\255\019\000\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\016\000\016\000\016\000\016\000\016\000\016\000\016\000\016\000\
|
|
\016\000\016\000\255\255\019\000\019\000\255\255\255\255\019\000\
|
|
\019\000\019\000\255\255\255\255\255\255\255\255\019\000\255\255\
|
|
\019\000\019\000\019\000\061\000\255\255\255\255\061\000\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\019\000\255\255\019\000\
|
|
\019\000\019\000\019\000\019\000\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\061\000\061\000\255\255\255\255\061\000\061\000\
|
|
\061\000\255\255\255\255\255\255\061\000\061\000\255\255\061\000\
|
|
\061\000\061\000\255\255\255\255\255\255\255\255\255\255\019\000\
|
|
\255\255\019\000\255\255\255\255\061\000\255\255\061\000\061\000\
|
|
\061\000\061\000\061\000\255\255\255\255\255\255\062\000\255\255\
|
|
\255\255\062\000\062\000\062\000\255\255\255\255\255\255\062\000\
|
|
\062\000\255\255\062\000\062\000\062\000\255\255\255\255\019\000\
|
|
\255\255\019\000\255\255\255\255\255\255\255\255\061\000\062\000\
|
|
\061\000\062\000\062\000\062\000\062\000\062\000\255\255\255\255\
|
|
\255\255\063\000\255\255\255\255\063\000\063\000\063\000\255\255\
|
|
\255\255\255\255\063\000\063\000\255\255\063\000\063\000\063\000\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\061\000\255\255\
|
|
\061\000\062\000\063\000\062\000\063\000\063\000\063\000\063\000\
|
|
\063\000\255\255\255\255\255\255\064\000\255\255\255\255\064\000\
|
|
\064\000\064\000\255\255\255\255\255\255\064\000\064\000\255\255\
|
|
\064\000\064\000\064\000\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\062\000\255\255\062\000\063\000\064\000\063\000\064\000\
|
|
\064\000\064\000\064\000\064\000\255\255\255\255\255\255\065\000\
|
|
\255\255\255\255\065\000\065\000\065\000\255\255\255\255\255\255\
|
|
\065\000\065\000\255\255\065\000\065\000\065\000\255\255\255\255\
|
|
\100\000\255\255\255\255\255\255\063\000\255\255\063\000\064\000\
|
|
\065\000\064\000\065\000\065\000\065\000\065\000\065\000\255\255\
|
|
\255\255\255\255\070\000\255\255\255\255\070\000\070\000\070\000\
|
|
\255\255\255\255\255\255\070\000\070\000\255\255\070\000\070\000\
|
|
\070\000\255\255\255\255\255\255\255\255\255\255\255\255\064\000\
|
|
\255\255\064\000\065\000\070\000\065\000\070\000\070\000\070\000\
|
|
\070\000\070\000\255\255\255\255\255\255\071\000\255\255\255\255\
|
|
\071\000\071\000\071\000\255\255\255\255\255\255\071\000\071\000\
|
|
\255\255\071\000\071\000\071\000\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\065\000\255\255\065\000\070\000\071\000\070\000\
|
|
\071\000\071\000\071\000\071\000\071\000\255\255\255\255\255\255\
|
|
\072\000\255\255\255\255\072\000\072\000\072\000\255\255\255\255\
|
|
\255\255\072\000\072\000\255\255\072\000\072\000\072\000\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\070\000\255\255\070\000\
|
|
\071\000\072\000\071\000\072\000\072\000\072\000\072\000\072\000\
|
|
\255\255\255\255\255\255\076\000\255\255\255\255\076\000\076\000\
|
|
\076\000\255\255\255\255\255\255\076\000\076\000\255\255\076\000\
|
|
\076\000\076\000\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\071\000\255\255\071\000\072\000\076\000\072\000\076\000\076\000\
|
|
\076\000\076\000\076\000\255\255\255\255\255\255\077\000\255\255\
|
|
\255\255\077\000\077\000\077\000\255\255\255\255\255\255\077\000\
|
|
\077\000\255\255\077\000\077\000\077\000\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\072\000\255\255\072\000\076\000\077\000\
|
|
\076\000\077\000\077\000\077\000\077\000\077\000\255\255\255\255\
|
|
\255\255\078\000\255\255\255\255\078\000\078\000\078\000\255\255\
|
|
\255\255\255\255\078\000\078\000\255\255\078\000\078\000\078\000\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\076\000\255\255\
|
|
\076\000\077\000\078\000\077\000\078\000\078\000\078\000\078\000\
|
|
\078\000\255\255\255\255\255\255\079\000\255\255\255\255\079\000\
|
|
\079\000\079\000\255\255\255\255\255\255\079\000\079\000\255\255\
|
|
\079\000\079\000\079\000\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\077\000\255\255\077\000\078\000\079\000\078\000\079\000\
|
|
\079\000\079\000\079\000\079\000\255\255\255\255\255\255\080\000\
|
|
\255\255\255\255\080\000\080\000\080\000\255\255\255\255\255\255\
|
|
\080\000\080\000\255\255\080\000\080\000\080\000\255\255\255\255\
|
|
\255\255\095\000\255\255\255\255\078\000\255\255\078\000\079\000\
|
|
\080\000\079\000\080\000\080\000\080\000\080\000\080\000\095\000\
|
|
\095\000\095\000\095\000\095\000\095\000\095\000\095\000\095\000\
|
|
\095\000\096\000\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\079\000\
|
|
\255\255\079\000\080\000\255\255\080\000\255\255\255\255\255\255\
|
|
\096\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\096\000\096\000\096\000\096\000\096\000\096\000\096\000\096\000\
|
|
\096\000\096\000\080\000\255\255\080\000\161\000\161\000\161\000\
|
|
\161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
|
|
\161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
|
|
\161\000\161\000\161\000\161\000\161\000\161\000\161\000\255\255\
|
|
\255\255\255\255\255\255\161\000\255\255\161\000\161\000\161\000\
|
|
\161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
|
|
\161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
|
|
\161\000\161\000\161\000\161\000\161\000\161\000\161\000\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\161\000\161\000\161\000\161\000\
|
|
\161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
|
|
\161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
|
|
\161\000\161\000\161\000\255\255\161\000\161\000\161\000\161\000\
|
|
\161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
|
|
\161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
|
|
\161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\
|
|
\161\000\161\000\161\000\163\000\161\000\161\000\161\000\161\000\
|
|
\161\000\161\000\161\000\161\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\255\255\
|
|
\255\255\255\255\255\255\163\000\255\255\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
|
|
\255\255\255\255\255\255\255\255\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\255\255\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\255\255\163\000\163\000\163\000\163\000\
|
|
\163\000\163\000\163\000\163\000\255\255";
|
|
Lexing.lex_code =
|
|
"\255\004\255\255\009\255\255\006\255\005\255\255\007\255\255\008\
|
|
\255\255\000\007\255\000\006\001\008\255\000\005\255\011\255\010\
|
|
\255\255\003\255\000\004\001\009\255\011\255\255\010\255\011\255\
|
|
\255\000\004\001\009\003\010\002\011\255\001\255\255\000\001\255\
|
|
";
|
|
}
|
|
let rec token c lexbuf =
|
|
(lexbuf.Lexing.lex_mem <- Array.create 12 (-1);
|
|
__ocaml_lex_token_rec c lexbuf 0)
|
|
and __ocaml_lex_token_rec c lexbuf __ocaml_lex_state =
|
|
match Lexing.new_engine __ocaml_lex_tables __ocaml_lex_state
|
|
lexbuf
|
|
with
|
|
| 0 -> (update_loc c None 1 false 0; NEWLINE)
|
|
| 1 ->
|
|
let x =
|
|
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
|
|
lexbuf.Lexing.lex_curr_pos
|
|
in BLANKS x
|
|
| 2 ->
|
|
let x =
|
|
Lexing.sub_lexeme lexbuf
|
|
(lexbuf.Lexing.lex_start_pos + 1)
|
|
(lexbuf.Lexing.lex_curr_pos + (-1))
|
|
in LABEL x
|
|
| 3 ->
|
|
let x =
|
|
Lexing.sub_lexeme lexbuf
|
|
(lexbuf.Lexing.lex_start_pos + 1)
|
|
(lexbuf.Lexing.lex_curr_pos + (-1))
|
|
in OPTLABEL x
|
|
| 4 ->
|
|
let x =
|
|
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
|
|
lexbuf.Lexing.lex_curr_pos
|
|
in LIDENT x
|
|
| 5 ->
|
|
let x =
|
|
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
|
|
lexbuf.Lexing.lex_curr_pos
|
|
in UIDENT x
|
|
| 6 ->
|
|
let i =
|
|
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
|
|
lexbuf.Lexing.lex_curr_pos
|
|
in
|
|
(try INT (int_of_string i, i)
|
|
with
|
|
| Failure _ ->
|
|
err (Literal_overflow "int") (Loc.of_lexbuf lexbuf))
|
|
| 7 ->
|
|
let f =
|
|
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
|
|
lexbuf.Lexing.lex_curr_pos
|
|
in
|
|
(try FLOAT (float_of_string f, f)
|
|
with
|
|
| Failure _ ->
|
|
err (Literal_overflow "float")
|
|
(Loc.of_lexbuf lexbuf))
|
|
| 8 ->
|
|
let i =
|
|
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
|
|
(lexbuf.Lexing.lex_curr_pos + (-1))
|
|
in
|
|
(try INT32 (Int32.of_string i, i)
|
|
with
|
|
| Failure _ ->
|
|
err (Literal_overflow "int32")
|
|
(Loc.of_lexbuf lexbuf))
|
|
| 9 ->
|
|
let i =
|
|
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
|
|
(lexbuf.Lexing.lex_curr_pos + (-1))
|
|
in
|
|
(try INT64 (Int64.of_string i, i)
|
|
with
|
|
| Failure _ ->
|
|
err (Literal_overflow "int64")
|
|
(Loc.of_lexbuf lexbuf))
|
|
| 10 ->
|
|
let i =
|
|
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
|
|
(lexbuf.Lexing.lex_curr_pos + (-1))
|
|
in
|
|
(try NATIVEINT (Nativeint.of_string i, i)
|
|
with
|
|
| Failure _ ->
|
|
err (Literal_overflow "nativeint")
|
|
(Loc.of_lexbuf lexbuf))
|
|
| 11 ->
|
|
(with_curr_loc string c;
|
|
let s = buff_contents c in STRING (TokenEval.string s, s))
|
|
| 12 ->
|
|
let x =
|
|
Lexing.sub_lexeme lexbuf
|
|
(lexbuf.Lexing.lex_start_pos + 1)
|
|
(lexbuf.Lexing.lex_curr_pos + (-1))
|
|
in
|
|
(update_loc c None 1 false 1; CHAR (TokenEval.char x, x))
|
|
| 13 ->
|
|
let x =
|
|
Lexing.sub_lexeme lexbuf
|
|
(lexbuf.Lexing.lex_start_pos + 1)
|
|
(lexbuf.Lexing.lex_curr_pos + (-1))
|
|
in CHAR (TokenEval.char x, x)
|
|
| 14 ->
|
|
let c =
|
|
Lexing.sub_lexeme_char lexbuf
|
|
(lexbuf.Lexing.lex_start_pos + 2)
|
|
in
|
|
err (Illegal_escape (String.make 1 c))
|
|
(Loc.of_lexbuf lexbuf)
|
|
| 15 ->
|
|
(store c; COMMENT (parse_nested comment (in_comment c)))
|
|
| 16 ->
|
|
(warn Comment_start (Loc.of_lexbuf lexbuf);
|
|
parse comment (in_comment c);
|
|
COMMENT (buff_contents c))
|
|
| 17 ->
|
|
(warn Comment_not_end (Loc.of_lexbuf lexbuf);
|
|
move_start_p (-1) c;
|
|
SYMBOL "*")
|
|
| 18 ->
|
|
if quotations c
|
|
then mk_quotation quotation c "" "" 2
|
|
else parse (symbolchar_star "<<") c
|
|
| 19 ->
|
|
if quotations c
|
|
then
|
|
QUOTATION
|
|
{
|
|
q_name = "";
|
|
q_loc = "";
|
|
q_shift = 2;
|
|
q_contents = "";
|
|
}
|
|
else parse (symbolchar_star "<<>>") c
|
|
| 20 ->
|
|
if quotations c
|
|
then with_curr_loc maybe_quotation_at c
|
|
else parse (symbolchar_star "<@") c
|
|
| 21 ->
|
|
if quotations c
|
|
then with_curr_loc maybe_quotation_colon c
|
|
else parse (symbolchar_star "<:") c
|
|
| 22 ->
|
|
let num =
|
|
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(0)
|
|
lexbuf.Lexing.lex_mem.(1)
|
|
and name =
|
|
Lexing.sub_lexeme_opt lexbuf lexbuf.Lexing.lex_mem.(3)
|
|
lexbuf.Lexing.lex_mem.(2) in
|
|
let inum = int_of_string num
|
|
in
|
|
(update_loc c name inum true 0;
|
|
LINE_DIRECTIVE (inum, name))
|
|
| 23 ->
|
|
let op =
|
|
Lexing.sub_lexeme_char lexbuf
|
|
(lexbuf.Lexing.lex_start_pos + 1)
|
|
in ESCAPED_IDENT (String.make 1 op)
|
|
| 24 ->
|
|
let op =
|
|
Lexing.sub_lexeme lexbuf
|
|
(lexbuf.Lexing.lex_start_pos + 1)
|
|
(lexbuf.Lexing.lex_curr_pos + (-1))
|
|
in ESCAPED_IDENT op
|
|
| 25 ->
|
|
let op =
|
|
Lexing.sub_lexeme lexbuf
|
|
(lexbuf.Lexing.lex_start_pos + 1)
|
|
lexbuf.Lexing.lex_mem.(0)
|
|
in ESCAPED_IDENT op
|
|
| 26 ->
|
|
let op =
|
|
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(0)
|
|
(lexbuf.Lexing.lex_curr_pos + (-1))
|
|
in ESCAPED_IDENT op
|
|
| 27 ->
|
|
let op =
|
|
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(0)
|
|
lexbuf.Lexing.lex_mem.(1)
|
|
in ESCAPED_IDENT op
|
|
| 28 ->
|
|
let x =
|
|
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
|
|
lexbuf.Lexing.lex_curr_pos
|
|
in SYMBOL x
|
|
| 29 ->
|
|
if antiquots c
|
|
then with_curr_loc dollar (shift 1 c)
|
|
else parse (symbolchar_star "$") c
|
|
| 30 ->
|
|
let x =
|
|
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
|
|
lexbuf.Lexing.lex_curr_pos
|
|
in SYMBOL x
|
|
| 31 ->
|
|
let pos = lexbuf.lex_curr_p
|
|
in
|
|
(lexbuf.lex_curr_p <-
|
|
{
|
|
(pos)
|
|
with
|
|
pos_bol = pos.pos_bol + 1;
|
|
pos_cnum = pos.pos_cnum + 1;
|
|
};
|
|
EOI)
|
|
| 32 ->
|
|
let c =
|
|
Lexing.sub_lexeme_char lexbuf lexbuf.Lexing.lex_start_pos
|
|
in err (Illegal_character c) (Loc.of_lexbuf lexbuf)
|
|
| __ocaml_lex_state ->
|
|
(lexbuf.Lexing.refill_buff lexbuf;
|
|
__ocaml_lex_token_rec c lexbuf __ocaml_lex_state)
|
|
and comment c lexbuf = __ocaml_lex_comment_rec c lexbuf 120
|
|
and __ocaml_lex_comment_rec c lexbuf __ocaml_lex_state =
|
|
match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf
|
|
with
|
|
| 0 -> (store c; with_curr_loc comment c; parse comment c)
|
|
| 1 -> store c
|
|
| 2 ->
|
|
(store c;
|
|
if quotations c then with_curr_loc quotation c else ();
|
|
parse comment c)
|
|
| 3 -> store_parse comment c
|
|
| 4 ->
|
|
(store c;
|
|
(try with_curr_loc string c
|
|
with
|
|
| Loc.Exc_located (_, (Error.E Unterminated_string)) ->
|
|
err Unterminated_string_in_comment (loc c));
|
|
Buffer.add_char c.buffer '"';
|
|
parse comment c)
|
|
| 5 -> store_parse comment c
|
|
| 6 -> store_parse comment c
|
|
| 7 -> (update_loc c None 1 false 1; store_parse comment c)
|
|
| 8 -> store_parse comment c
|
|
| 9 -> store_parse comment c
|
|
| 10 -> store_parse comment c
|
|
| 11 -> store_parse comment c
|
|
| 12 -> err Unterminated_comment (loc c)
|
|
| 13 -> (update_loc c None 1 false 0; store_parse comment c)
|
|
| 14 -> store_parse comment c
|
|
| __ocaml_lex_state ->
|
|
(lexbuf.Lexing.refill_buff lexbuf;
|
|
__ocaml_lex_comment_rec c lexbuf __ocaml_lex_state)
|
|
and string c lexbuf =
|
|
(lexbuf.Lexing.lex_mem <- Array.create 2 (-1);
|
|
__ocaml_lex_string_rec c lexbuf 147)
|
|
and __ocaml_lex_string_rec c lexbuf __ocaml_lex_state =
|
|
match Lexing.new_engine __ocaml_lex_tables __ocaml_lex_state
|
|
lexbuf
|
|
with
|
|
| 0 -> set_start_p c
|
|
| 1 ->
|
|
let space =
|
|
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(0)
|
|
lexbuf.Lexing.lex_curr_pos
|
|
in
|
|
(update_loc c None 1 false (String.length space);
|
|
store_parse string c)
|
|
| 2 -> store_parse string c
|
|
| 3 -> store_parse string c
|
|
| 4 -> store_parse string c
|
|
| 5 ->
|
|
let x =
|
|
Lexing.sub_lexeme_char lexbuf
|
|
(lexbuf.Lexing.lex_start_pos + 1)
|
|
in
|
|
if is_in_comment c
|
|
then store_parse string c
|
|
else
|
|
(warn (Illegal_escape (String.make 1 x))
|
|
(Loc.of_lexbuf lexbuf);
|
|
store_parse string c)
|
|
| 6 -> (update_loc c None 1 false 0; store_parse string c)
|
|
| 7 -> err Unterminated_string (loc c)
|
|
| 8 -> store_parse string c
|
|
| __ocaml_lex_state ->
|
|
(lexbuf.Lexing.refill_buff lexbuf;
|
|
__ocaml_lex_string_rec c lexbuf __ocaml_lex_state)
|
|
and symbolchar_star beginning c lexbuf =
|
|
__ocaml_lex_symbolchar_star_rec beginning c lexbuf 157
|
|
and
|
|
__ocaml_lex_symbolchar_star_rec beginning c lexbuf
|
|
__ocaml_lex_state =
|
|
match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf
|
|
with
|
|
| 0 ->
|
|
let tok =
|
|
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
|
|
lexbuf.Lexing.lex_curr_pos
|
|
in
|
|
(move_start_p (-String.length beginning) c;
|
|
SYMBOL (beginning ^ tok))
|
|
| __ocaml_lex_state ->
|
|
(lexbuf.Lexing.refill_buff lexbuf;
|
|
__ocaml_lex_symbolchar_star_rec beginning c lexbuf
|
|
__ocaml_lex_state)
|
|
and maybe_quotation_at c lexbuf =
|
|
__ocaml_lex_maybe_quotation_at_rec c lexbuf 158
|
|
and
|
|
__ocaml_lex_maybe_quotation_at_rec c lexbuf __ocaml_lex_state =
|
|
match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf
|
|
with
|
|
| 0 ->
|
|
let loc =
|
|
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
|
|
(lexbuf.Lexing.lex_curr_pos + (-1))
|
|
in
|
|
mk_quotation quotation c "" loc (3 + (String.length loc))
|
|
| 1 ->
|
|
let tok =
|
|
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
|
|
lexbuf.Lexing.lex_curr_pos
|
|
in SYMBOL ("<@" ^ tok)
|
|
| __ocaml_lex_state ->
|
|
(lexbuf.Lexing.refill_buff lexbuf;
|
|
__ocaml_lex_maybe_quotation_at_rec c lexbuf
|
|
__ocaml_lex_state)
|
|
and maybe_quotation_colon c lexbuf =
|
|
(lexbuf.Lexing.lex_mem <- Array.create 2 (-1);
|
|
__ocaml_lex_maybe_quotation_colon_rec c lexbuf 161)
|
|
and
|
|
__ocaml_lex_maybe_quotation_colon_rec c lexbuf
|
|
__ocaml_lex_state =
|
|
match Lexing.new_engine __ocaml_lex_tables __ocaml_lex_state
|
|
lexbuf
|
|
with
|
|
| 0 ->
|
|
let name =
|
|
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
|
|
(lexbuf.Lexing.lex_curr_pos + (-1))
|
|
in
|
|
mk_quotation quotation c name ""
|
|
(3 + (String.length name))
|
|
| 1 ->
|
|
let name =
|
|
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
|
|
lexbuf.Lexing.lex_mem.(0)
|
|
and loc =
|
|
Lexing.sub_lexeme lexbuf (lexbuf.Lexing.lex_mem.(0) + 1)
|
|
(lexbuf.Lexing.lex_curr_pos + (-1))
|
|
in
|
|
mk_quotation quotation c name loc
|
|
((4 + (String.length loc)) + (String.length name))
|
|
| 2 ->
|
|
let tok =
|
|
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
|
|
lexbuf.Lexing.lex_curr_pos
|
|
in SYMBOL ("<:" ^ tok)
|
|
| __ocaml_lex_state ->
|
|
(lexbuf.Lexing.refill_buff lexbuf;
|
|
__ocaml_lex_maybe_quotation_colon_rec c lexbuf
|
|
__ocaml_lex_state)
|
|
and quotation c lexbuf = __ocaml_lex_quotation_rec c lexbuf 167
|
|
and __ocaml_lex_quotation_rec c lexbuf __ocaml_lex_state =
|
|
match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf
|
|
with
|
|
| 0 -> (store c; with_curr_loc quotation c; parse quotation c)
|
|
| 1 -> store c
|
|
| 2 -> err Unterminated_quotation (loc c)
|
|
| 3 -> (update_loc c None 1 false 0; store_parse quotation c)
|
|
| 4 -> store_parse quotation c
|
|
| __ocaml_lex_state ->
|
|
(lexbuf.Lexing.refill_buff lexbuf;
|
|
__ocaml_lex_quotation_rec c lexbuf __ocaml_lex_state)
|
|
and dollar c lexbuf = __ocaml_lex_dollar_rec c lexbuf 175
|
|
and __ocaml_lex_dollar_rec c lexbuf __ocaml_lex_state =
|
|
match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf
|
|
with
|
|
| 0 -> (set_start_p c; ANTIQUOT ("", ""))
|
|
| 1 ->
|
|
let name =
|
|
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
|
|
(lexbuf.Lexing.lex_curr_pos + (-1))
|
|
in
|
|
with_curr_loc (antiquot name)
|
|
(shift (1 + (String.length name)) c)
|
|
| 2 -> store_parse (antiquot "") c
|
|
| __ocaml_lex_state ->
|
|
(lexbuf.Lexing.refill_buff lexbuf;
|
|
__ocaml_lex_dollar_rec c lexbuf __ocaml_lex_state)
|
|
and antiquot name c lexbuf =
|
|
__ocaml_lex_antiquot_rec name c lexbuf 181
|
|
and __ocaml_lex_antiquot_rec name c lexbuf __ocaml_lex_state =
|
|
match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf
|
|
with
|
|
| 0 -> (set_start_p c; ANTIQUOT (name, buff_contents c))
|
|
| 1 -> err Unterminated_antiquot (loc c)
|
|
| 2 ->
|
|
(update_loc c None 1 false 0;
|
|
store_parse (antiquot name) c)
|
|
| 3 ->
|
|
(store c;
|
|
with_curr_loc quotation c;
|
|
parse (antiquot name) c)
|
|
| 4 -> store_parse (antiquot name) c
|
|
| __ocaml_lex_state ->
|
|
(lexbuf.Lexing.refill_buff lexbuf;
|
|
__ocaml_lex_antiquot_rec name c lexbuf __ocaml_lex_state)
|
|
let lexing_store s buff max =
|
|
let rec self n s =
|
|
if n >= max
|
|
then n
|
|
else
|
|
(match Stream.peek s with
|
|
| Some x -> (Stream.junk s; buff.[n] <- x; succ n)
|
|
| _ -> n)
|
|
in self 0 s
|
|
let from_context c =
|
|
let next _ =
|
|
let tok = with_curr_loc token c in
|
|
let loc = Loc.of_lexbuf c.lexbuf in Some (tok, loc)
|
|
in Stream.from next
|
|
let from_lexbuf ?(quotations = true) lb =
|
|
let c =
|
|
{
|
|
(default_context lb)
|
|
with
|
|
loc = Loc.of_lexbuf lb;
|
|
antiquots = !Camlp4_config.antiquotations;
|
|
quotations = quotations;
|
|
}
|
|
in from_context c
|
|
let setup_loc lb loc =
|
|
let start_pos = Loc.start_pos loc
|
|
in
|
|
(lb.lex_abs_pos <- start_pos.pos_cnum;
|
|
lb.lex_curr_p <- start_pos)
|
|
let from_string ?quotations loc str =
|
|
let lb = Lexing.from_string str
|
|
in (setup_loc lb loc; from_lexbuf ?quotations lb)
|
|
let from_stream ?quotations loc strm =
|
|
let lb = Lexing.from_function (lexing_store strm)
|
|
in (setup_loc lb loc; from_lexbuf ?quotations lb)
|
|
let mk () loc strm =
|
|
from_stream ~quotations: !Camlp4_config.quotations loc strm
|
|
end
|
|
end
|
|
module Camlp4Ast =
|
|
struct
|
|
module Make (Loc : Sig.Loc) : Sig.Camlp4Ast with module Loc = Loc =
|
|
struct
|
|
module Loc = Loc
|
|
module Ast =
|
|
struct
|
|
include Sig.MakeCamlp4Ast(Loc)
|
|
let safe_string_escaped s =
|
|
if
|
|
((String.length s) > 2) &&
|
|
((s.[0] = '\\') && (s.[1] = '$'))
|
|
then s
|
|
else String.escaped s
|
|
end
|
|
include Ast
|
|
external loc_of_ctyp : ctyp -> Loc.t = "%field0"
|
|
external loc_of_patt : patt -> Loc.t = "%field0"
|
|
external loc_of_expr : expr -> Loc.t = "%field0"
|
|
external loc_of_module_type : module_type -> Loc.t = "%field0"
|
|
external loc_of_module_expr : module_expr -> Loc.t = "%field0"
|
|
external loc_of_sig_item : sig_item -> Loc.t = "%field0"
|
|
external loc_of_str_item : str_item -> Loc.t = "%field0"
|
|
external loc_of_class_type : class_type -> Loc.t = "%field0"
|
|
external loc_of_class_sig_item : class_sig_item -> Loc.t =
|
|
"%field0"
|
|
external loc_of_class_expr : class_expr -> Loc.t = "%field0"
|
|
external loc_of_class_str_item : class_str_item -> Loc.t =
|
|
"%field0"
|
|
external loc_of_with_constr : with_constr -> Loc.t = "%field0"
|
|
external loc_of_binding : binding -> Loc.t = "%field0"
|
|
external loc_of_rec_binding : rec_binding -> Loc.t = "%field0"
|
|
external loc_of_module_binding : module_binding -> Loc.t =
|
|
"%field0"
|
|
external loc_of_match_case : match_case -> Loc.t = "%field0"
|
|
external loc_of_ident : ident -> Loc.t = "%field0"
|
|
let ghost = Loc.ghost
|
|
let rec is_module_longident =
|
|
function
|
|
| Ast.IdAcc (_, _, i) -> is_module_longident i
|
|
| Ast.IdApp (_, i1, i2) ->
|
|
(is_module_longident i1) && (is_module_longident i2)
|
|
| Ast.IdUid (_, _) -> true
|
|
| _ -> false
|
|
let ident_of_expr =
|
|
let error () =
|
|
invalid_arg
|
|
"ident_of_expr: this expression is not an identifier" in
|
|
let rec self =
|
|
function
|
|
| Ast.ExApp (_loc, e1, e2) ->
|
|
Ast.IdApp (_loc, self e1, self e2)
|
|
| Ast.ExAcc (_loc, e1, e2) ->
|
|
Ast.IdAcc (_loc, self e1, self e2)
|
|
| Ast.ExId (_, (Ast.IdLid (_, _))) -> error ()
|
|
| Ast.ExId (_, i) ->
|
|
if is_module_longident i then i else error ()
|
|
| _ -> error ()
|
|
in
|
|
function
|
|
| Ast.ExId (_, i) -> i
|
|
| Ast.ExApp (_, _, _) -> error ()
|
|
| t -> self t
|
|
let ident_of_ctyp =
|
|
let error () =
|
|
invalid_arg "ident_of_ctyp: this type is not an identifier" in
|
|
let rec self =
|
|
function
|
|
| Ast.TyApp (_loc, t1, t2) ->
|
|
Ast.IdApp (_loc, self t1, self t2)
|
|
| Ast.TyId (_, (Ast.IdLid (_, _))) -> error ()
|
|
| Ast.TyId (_, i) ->
|
|
if is_module_longident i then i else error ()
|
|
| _ -> error ()
|
|
in function | Ast.TyId (_, i) -> i | t -> self t
|
|
let ident_of_patt =
|
|
let error () =
|
|
invalid_arg
|
|
"ident_of_patt: this pattern is not an identifier" in
|
|
let rec self =
|
|
function
|
|
| Ast.PaApp (_loc, p1, p2) ->
|
|
Ast.IdApp (_loc, self p1, self p2)
|
|
| Ast.PaId (_, (Ast.IdLid (_, _))) -> error ()
|
|
| Ast.PaId (_, i) ->
|
|
if is_module_longident i then i else error ()
|
|
| _ -> error ()
|
|
in function | Ast.PaId (_, i) -> i | p -> self p
|
|
let rec is_irrefut_patt =
|
|
function
|
|
| Ast.PaId (_, (Ast.IdLid (_, _))) -> true
|
|
| Ast.PaId (_, (Ast.IdUid (_, "()"))) -> true
|
|
| Ast.PaAny _ -> true
|
|
| Ast.PaAli (_, x, y) ->
|
|
(is_irrefut_patt x) && (is_irrefut_patt y)
|
|
| Ast.PaRec (_, p) -> is_irrefut_patt p
|
|
| Ast.PaEq (_, (Ast.IdLid (_, _)), p) -> is_irrefut_patt p
|
|
| Ast.PaSem (_, p1, p2) ->
|
|
(is_irrefut_patt p1) && (is_irrefut_patt p2)
|
|
| Ast.PaCom (_, p1, p2) ->
|
|
(is_irrefut_patt p1) && (is_irrefut_patt p2)
|
|
| Ast.PaTyc (_, p, _) -> is_irrefut_patt p
|
|
| Ast.PaTup (_, pl) -> is_irrefut_patt pl
|
|
| Ast.PaOlb (_, _, (Ast.PaNil _)) -> true
|
|
| Ast.PaOlb (_, _, p) -> is_irrefut_patt p
|
|
| Ast.PaOlbi (_, _, p, _) -> is_irrefut_patt p
|
|
| Ast.PaLab (_, _, (Ast.PaNil _)) -> true
|
|
| Ast.PaLab (_, _, p) -> is_irrefut_patt p
|
|
| _ -> false
|
|
let rec is_constructor =
|
|
function
|
|
| Ast.IdAcc (_, _, i) -> is_constructor i
|
|
| Ast.IdUid (_, _) -> true
|
|
| Ast.IdLid (_, _) | Ast.IdApp (_, _, _) -> false
|
|
| Ast.IdAnt (_, _) -> assert false
|
|
let is_patt_constructor =
|
|
function
|
|
| Ast.PaId (_, i) -> is_constructor i
|
|
| Ast.PaVrn (_, _) -> true
|
|
| _ -> false
|
|
let rec is_expr_constructor =
|
|
function
|
|
| Ast.ExId (_, i) -> is_constructor i
|
|
| Ast.ExAcc (_, e1, e2) ->
|
|
(is_expr_constructor e1) && (is_expr_constructor e2)
|
|
| Ast.ExVrn (_, _) -> true
|
|
| _ -> false
|
|
let rec tyOr_of_list =
|
|
function
|
|
| [] -> Ast.TyNil ghost
|
|
| [ t ] -> t
|
|
| t :: ts ->
|
|
let _loc = loc_of_ctyp t
|
|
in Ast.TyOr (_loc, t, tyOr_of_list ts)
|
|
let rec tyAnd_of_list =
|
|
function
|
|
| [] -> Ast.TyNil ghost
|
|
| [ t ] -> t
|
|
| t :: ts ->
|
|
let _loc = loc_of_ctyp t
|
|
in Ast.TyAnd (_loc, t, tyAnd_of_list ts)
|
|
let rec tySem_of_list =
|
|
function
|
|
| [] -> Ast.TyNil ghost
|
|
| [ t ] -> t
|
|
| t :: ts ->
|
|
let _loc = loc_of_ctyp t
|
|
in Ast.TySem (_loc, t, tySem_of_list ts)
|
|
let rec tyCom_of_list =
|
|
function
|
|
| [] -> Ast.TyNil ghost
|
|
| [ t ] -> t
|
|
| t :: ts ->
|
|
let _loc = loc_of_ctyp t
|
|
in Ast.TyCom (_loc, t, tyCom_of_list ts)
|
|
let rec tyAmp_of_list =
|
|
function
|
|
| [] -> Ast.TyNil ghost
|
|
| [ t ] -> t
|
|
| t :: ts ->
|
|
let _loc = loc_of_ctyp t
|
|
in Ast.TyAmp (_loc, t, tyAmp_of_list ts)
|
|
let rec tySta_of_list =
|
|
function
|
|
| [] -> Ast.TyNil ghost
|
|
| [ t ] -> t
|
|
| t :: ts ->
|
|
let _loc = loc_of_ctyp t
|
|
in Ast.TySta (_loc, t, tySta_of_list ts)
|
|
let rec stSem_of_list =
|
|
function
|
|
| [] -> Ast.StNil ghost
|
|
| [ t ] -> t
|
|
| t :: ts ->
|
|
let _loc = loc_of_str_item t
|
|
in Ast.StSem (_loc, t, stSem_of_list ts)
|
|
let rec sgSem_of_list =
|
|
function
|
|
| [] -> Ast.SgNil ghost
|
|
| [ t ] -> t
|
|
| t :: ts ->
|
|
let _loc = loc_of_sig_item t
|
|
in Ast.SgSem (_loc, t, sgSem_of_list ts)
|
|
let rec biAnd_of_list =
|
|
function
|
|
| [] -> Ast.BiNil ghost
|
|
| [ b ] -> b
|
|
| b :: bs ->
|
|
let _loc = loc_of_binding b
|
|
in Ast.BiAnd (_loc, b, biAnd_of_list bs)
|
|
let rec rbSem_of_list =
|
|
function
|
|
| [] -> Ast.RbNil ghost
|
|
| [ b ] -> b
|
|
| b :: bs ->
|
|
let _loc = loc_of_rec_binding b
|
|
in Ast.RbSem (_loc, b, rbSem_of_list bs)
|
|
let rec wcAnd_of_list =
|
|
function
|
|
| [] -> Ast.WcNil ghost
|
|
| [ w ] -> w
|
|
| w :: ws ->
|
|
let _loc = loc_of_with_constr w
|
|
in Ast.WcAnd (_loc, w, wcAnd_of_list ws)
|
|
let rec idAcc_of_list =
|
|
function
|
|
| [] -> assert false
|
|
| [ i ] -> i
|
|
| i :: is ->
|
|
let _loc = loc_of_ident i
|
|
in Ast.IdAcc (_loc, i, idAcc_of_list is)
|
|
let rec idApp_of_list =
|
|
function
|
|
| [] -> assert false
|
|
| [ i ] -> i
|
|
| i :: is ->
|
|
let _loc = loc_of_ident i
|
|
in Ast.IdApp (_loc, i, idApp_of_list is)
|
|
let rec mcOr_of_list =
|
|
function
|
|
| [] -> Ast.McNil ghost
|
|
| [ x ] -> x
|
|
| x :: xs ->
|
|
let _loc = loc_of_match_case x
|
|
in Ast.McOr (_loc, x, mcOr_of_list xs)
|
|
let rec mbAnd_of_list =
|
|
function
|
|
| [] -> Ast.MbNil ghost
|
|
| [ x ] -> x
|
|
| x :: xs ->
|
|
let _loc = loc_of_module_binding x
|
|
in Ast.MbAnd (_loc, x, mbAnd_of_list xs)
|
|
let rec meApp_of_list =
|
|
function
|
|
| [] -> assert false
|
|
| [ x ] -> x
|
|
| x :: xs ->
|
|
let _loc = loc_of_module_expr x
|
|
in Ast.MeApp (_loc, x, meApp_of_list xs)
|
|
let rec ceAnd_of_list =
|
|
function
|
|
| [] -> Ast.CeNil ghost
|
|
| [ x ] -> x
|
|
| x :: xs ->
|
|
let _loc = loc_of_class_expr x
|
|
in Ast.CeAnd (_loc, x, ceAnd_of_list xs)
|
|
let rec ctAnd_of_list =
|
|
function
|
|
| [] -> Ast.CtNil ghost
|
|
| [ x ] -> x
|
|
| x :: xs ->
|
|
let _loc = loc_of_class_type x
|
|
in Ast.CtAnd (_loc, x, ctAnd_of_list xs)
|
|
let rec cgSem_of_list =
|
|
function
|
|
| [] -> Ast.CgNil ghost
|
|
| [ x ] -> x
|
|
| x :: xs ->
|
|
let _loc = loc_of_class_sig_item x
|
|
in Ast.CgSem (_loc, x, cgSem_of_list xs)
|
|
let rec crSem_of_list =
|
|
function
|
|
| [] -> Ast.CrNil ghost
|
|
| [ x ] -> x
|
|
| x :: xs ->
|
|
let _loc = loc_of_class_str_item x
|
|
in Ast.CrSem (_loc, x, crSem_of_list xs)
|
|
let rec paSem_of_list =
|
|
function
|
|
| [] -> Ast.PaNil ghost
|
|
| [ x ] -> x
|
|
| x :: xs ->
|
|
let _loc = loc_of_patt x
|
|
in Ast.PaSem (_loc, x, paSem_of_list xs)
|
|
let rec paCom_of_list =
|
|
function
|
|
| [] -> Ast.PaNil ghost
|
|
| [ x ] -> x
|
|
| x :: xs ->
|
|
let _loc = loc_of_patt x
|
|
in Ast.PaCom (_loc, x, paCom_of_list xs)
|
|
let rec exSem_of_list =
|
|
function
|
|
| [] -> Ast.ExNil ghost
|
|
| [ x ] -> x
|
|
| x :: xs ->
|
|
let _loc = loc_of_expr x
|
|
in Ast.ExSem (_loc, x, exSem_of_list xs)
|
|
let rec exCom_of_list =
|
|
function
|
|
| [] -> Ast.ExNil ghost
|
|
| [ x ] -> x
|
|
| x :: xs ->
|
|
let _loc = loc_of_expr x
|
|
in Ast.ExCom (_loc, x, exCom_of_list xs)
|
|
let ty_of_stl =
|
|
function
|
|
| (_loc, s, []) -> Ast.TyId (_loc, Ast.IdUid (_loc, s))
|
|
| (_loc, s, tl) ->
|
|
Ast.TyOf (_loc, Ast.TyId (_loc, Ast.IdUid (_loc, s)),
|
|
tyAnd_of_list tl)
|
|
let ty_of_sbt =
|
|
function
|
|
| (_loc, s, true, t) ->
|
|
Ast.TyCol (_loc, Ast.TyId (_loc, Ast.IdLid (_loc, s)),
|
|
Ast.TyMut (_loc, t))
|
|
| (_loc, s, false, t) ->
|
|
Ast.TyCol (_loc, Ast.TyId (_loc, Ast.IdLid (_loc, s)), t)
|
|
let bi_of_pe (p, e) =
|
|
let _loc = loc_of_patt p in Ast.BiEq (_loc, p, e)
|
|
let sum_type_of_list l = tyOr_of_list (List.map ty_of_stl l)
|
|
let record_type_of_list l = tySem_of_list (List.map ty_of_sbt l)
|
|
let binding_of_pel l = biAnd_of_list (List.map bi_of_pe l)
|
|
let rec pel_of_binding =
|
|
function
|
|
| Ast.BiAnd (_, b1, b2) ->
|
|
(pel_of_binding b1) @ (pel_of_binding b2)
|
|
| Ast.BiEq (_, p, e) -> [ (p, e) ]
|
|
| _ -> assert false
|
|
let rec list_of_binding x acc =
|
|
match x with
|
|
| Ast.BiAnd (_, b1, b2) ->
|
|
list_of_binding b1 (list_of_binding b2 acc)
|
|
| t -> t :: acc
|
|
let rec list_of_rec_binding x acc =
|
|
match x with
|
|
| Ast.RbSem (_, b1, b2) ->
|
|
list_of_rec_binding b1 (list_of_rec_binding b2 acc)
|
|
| t -> t :: acc
|
|
let rec list_of_with_constr x acc =
|
|
match x with
|
|
| Ast.WcAnd (_, w1, w2) ->
|
|
list_of_with_constr w1 (list_of_with_constr w2 acc)
|
|
| t -> t :: acc
|
|
let rec list_of_ctyp x acc =
|
|
match x with
|
|
| Ast.TyNil _ -> acc
|
|
| Ast.TyAmp (_, x, y) | Ast.TyCom (_, x, y) |
|
|
Ast.TySta (_, x, y) | Ast.TySem (_, x, y) |
|
|
Ast.TyAnd (_, x, y) | Ast.TyOr (_, x, y) ->
|
|
list_of_ctyp x (list_of_ctyp y acc)
|
|
| x -> x :: acc
|
|
let rec list_of_patt x acc =
|
|
match x with
|
|
| Ast.PaNil _ -> acc
|
|
| Ast.PaCom (_, x, y) | Ast.PaSem (_, x, y) ->
|
|
list_of_patt x (list_of_patt y acc)
|
|
| x -> x :: acc
|
|
let rec list_of_expr x acc =
|
|
match x with
|
|
| Ast.ExNil _ -> acc
|
|
| Ast.ExCom (_, x, y) | Ast.ExSem (_, x, y) ->
|
|
list_of_expr x (list_of_expr y acc)
|
|
| x -> x :: acc
|
|
let rec list_of_str_item x acc =
|
|
match x with
|
|
| Ast.StNil _ -> acc
|
|
| Ast.StSem (_, x, y) ->
|
|
list_of_str_item x (list_of_str_item y acc)
|
|
| x -> x :: acc
|
|
let rec list_of_sig_item x acc =
|
|
match x with
|
|
| Ast.SgNil _ -> acc
|
|
| Ast.SgSem (_, x, y) ->
|
|
list_of_sig_item x (list_of_sig_item y acc)
|
|
| x -> x :: acc
|
|
let rec list_of_class_sig_item x acc =
|
|
match x with
|
|
| Ast.CgNil _ -> acc
|
|
| Ast.CgSem (_, x, y) ->
|
|
list_of_class_sig_item x (list_of_class_sig_item y acc)
|
|
| x -> x :: acc
|
|
let rec list_of_class_str_item x acc =
|
|
match x with
|
|
| Ast.CrNil _ -> acc
|
|
| Ast.CrSem (_, x, y) ->
|
|
list_of_class_str_item x (list_of_class_str_item y acc)
|
|
| x -> x :: acc
|
|
let rec list_of_class_type x acc =
|
|
match x with
|
|
| Ast.CtAnd (_, x, y) ->
|
|
list_of_class_type x (list_of_class_type y acc)
|
|
| x -> x :: acc
|
|
let rec list_of_class_expr x acc =
|
|
match x with
|
|
| Ast.CeAnd (_, x, y) ->
|
|
list_of_class_expr x (list_of_class_expr y acc)
|
|
| x -> x :: acc
|
|
let rec list_of_module_expr x acc =
|
|
match x with
|
|
| Ast.MeApp (_, x, y) ->
|
|
list_of_module_expr x (list_of_module_expr y acc)
|
|
| x -> x :: acc
|
|
let rec list_of_match_case x acc =
|
|
match x with
|
|
| Ast.McNil _ -> acc
|
|
| Ast.McOr (_, x, y) ->
|
|
list_of_match_case x (list_of_match_case y acc)
|
|
| x -> x :: acc
|
|
let rec list_of_ident x acc =
|
|
match x with
|
|
| Ast.IdAcc (_, x, y) | Ast.IdApp (_, x, y) ->
|
|
list_of_ident x (list_of_ident y acc)
|
|
| x -> x :: acc
|
|
let rec list_of_module_binding x acc =
|
|
match x with
|
|
| Ast.MbAnd (_, x, y) ->
|
|
list_of_module_binding x (list_of_module_binding y acc)
|
|
| x -> x :: acc
|
|
module Meta =
|
|
struct
|
|
module type META_LOC =
|
|
sig
|
|
val meta_loc_patt : Loc.t -> Loc.t -> Ast.patt
|
|
val meta_loc_expr : Loc.t -> Loc.t -> Ast.expr
|
|
end
|
|
module MetaLoc =
|
|
struct
|
|
let meta_loc_patt _loc location =
|
|
let (a, b, c, d, e, f, g, h) = Loc.to_tuple location
|
|
in
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Loc"),
|
|
Ast.IdLid (_loc, "of_tuple"))),
|
|
Ast.PaTup (_loc,
|
|
Ast.PaCom (_loc,
|
|
Ast.PaStr (_loc, Ast.safe_string_escaped a),
|
|
Ast.PaCom (_loc,
|
|
Ast.PaCom (_loc,
|
|
Ast.PaCom (_loc,
|
|
Ast.PaCom (_loc,
|
|
Ast.PaCom (_loc,
|
|
Ast.PaCom (_loc,
|
|
Ast.PaInt (_loc, string_of_int b),
|
|
Ast.PaInt (_loc, string_of_int c)),
|
|
Ast.PaInt (_loc, string_of_int d)),
|
|
Ast.PaInt (_loc, string_of_int e)),
|
|
Ast.PaInt (_loc, string_of_int f)),
|
|
Ast.PaInt (_loc, string_of_int g)),
|
|
if h
|
|
then
|
|
Ast.PaId (_loc, Ast.IdUid (_loc, "True"))
|
|
else
|
|
Ast.PaId (_loc, Ast.IdUid (_loc, "False"))))))
|
|
let meta_loc_expr _loc location =
|
|
let (a, b, c, d, e, f, g, h) = Loc.to_tuple location
|
|
in
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Loc"),
|
|
Ast.IdLid (_loc, "of_tuple"))),
|
|
Ast.ExTup (_loc,
|
|
Ast.ExCom (_loc,
|
|
Ast.ExStr (_loc, Ast.safe_string_escaped a),
|
|
Ast.ExCom (_loc,
|
|
Ast.ExCom (_loc,
|
|
Ast.ExCom (_loc,
|
|
Ast.ExCom (_loc,
|
|
Ast.ExCom (_loc,
|
|
Ast.ExCom (_loc,
|
|
Ast.ExInt (_loc, string_of_int b),
|
|
Ast.ExInt (_loc, string_of_int c)),
|
|
Ast.ExInt (_loc, string_of_int d)),
|
|
Ast.ExInt (_loc, string_of_int e)),
|
|
Ast.ExInt (_loc, string_of_int f)),
|
|
Ast.ExInt (_loc, string_of_int g)),
|
|
if h
|
|
then
|
|
Ast.ExId (_loc, Ast.IdUid (_loc, "True"))
|
|
else
|
|
Ast.ExId (_loc, Ast.IdUid (_loc, "False"))))))
|
|
end
|
|
module MetaGhostLoc =
|
|
struct
|
|
let meta_loc_patt _loc _ =
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Loc"),
|
|
Ast.IdLid (_loc, "ghost")))
|
|
let meta_loc_expr _loc _ =
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Loc"),
|
|
Ast.IdLid (_loc, "ghost")))
|
|
end
|
|
module MetaLocVar =
|
|
struct
|
|
let meta_loc_patt _loc _ =
|
|
Ast.PaId (_loc, Ast.IdLid (_loc, !Loc.name))
|
|
let meta_loc_expr _loc _ =
|
|
Ast.ExId (_loc, Ast.IdLid (_loc, !Loc.name))
|
|
end
|
|
module Make (MetaLoc : META_LOC) =
|
|
struct
|
|
open MetaLoc
|
|
let meta_acc_Loc_t = meta_loc_expr
|
|
module Expr =
|
|
struct
|
|
let meta_string _loc s = Ast.ExStr (_loc, s)
|
|
let meta_int _loc s = Ast.ExInt (_loc, s)
|
|
let meta_float _loc s = Ast.ExFlo (_loc, s)
|
|
let meta_char _loc s = Ast.ExChr (_loc, s)
|
|
let meta_bool _loc =
|
|
function
|
|
| false ->
|
|
Ast.ExId (_loc, Ast.IdUid (_loc, "False"))
|
|
| true -> Ast.ExId (_loc, Ast.IdUid (_loc, "True"))
|
|
let rec meta_list mf_a _loc =
|
|
function
|
|
| [] -> Ast.ExId (_loc, Ast.IdUid (_loc, "[]"))
|
|
| x :: xs ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc, Ast.IdUid (_loc, "::")),
|
|
mf_a _loc x),
|
|
meta_list mf_a _loc xs)
|
|
let rec meta_binding _loc =
|
|
function
|
|
| Ast.BiAnt (x0, x1) -> Ast.ExAnt (x0, x1)
|
|
| Ast.BiEq (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "BiEq"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_patt _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.BiAnd (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "BiAnd"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_binding _loc x1),
|
|
meta_binding _loc x2)
|
|
| Ast.BiNil x0 ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "BiNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
and meta_class_expr _loc =
|
|
function
|
|
| Ast.CeAnt (x0, x1) -> Ast.ExAnt (x0, x1)
|
|
| Ast.CeEq (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CeEq"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_class_expr _loc x1),
|
|
meta_class_expr _loc x2)
|
|
| Ast.CeAnd (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CeAnd"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_class_expr _loc x1),
|
|
meta_class_expr _loc x2)
|
|
| Ast.CeTyc (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CeTyc"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_class_expr _loc x1),
|
|
meta_class_type _loc x2)
|
|
| Ast.CeStr (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CeStr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_patt _loc x1),
|
|
meta_class_str_item _loc x2)
|
|
| Ast.CeLet (x0, x1, x2, x3) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CeLet"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_meta_bool _loc x1),
|
|
meta_binding _loc x2),
|
|
meta_class_expr _loc x3)
|
|
| Ast.CeFun (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CeFun"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_patt _loc x1),
|
|
meta_class_expr _loc x2)
|
|
| Ast.CeCon (x0, x1, x2, x3) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CeCon"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_meta_bool _loc x1),
|
|
meta_ident _loc x2),
|
|
meta_ctyp _loc x3)
|
|
| Ast.CeApp (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CeApp"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_class_expr _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.CeNil x0 ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CeNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
and meta_class_sig_item _loc =
|
|
function
|
|
| Ast.CgAnt (x0, x1) -> Ast.ExAnt (x0, x1)
|
|
| Ast.CgVir (x0, x1, x2, x3) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CgVir"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_meta_bool _loc x2),
|
|
meta_ctyp _loc x3)
|
|
| Ast.CgVal (x0, x1, x2, x3, x4) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CgVal"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_meta_bool _loc x2),
|
|
meta_meta_bool _loc x3),
|
|
meta_ctyp _loc x4)
|
|
| Ast.CgMth (x0, x1, x2, x3) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CgMth"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_meta_bool _loc x2),
|
|
meta_ctyp _loc x3)
|
|
| Ast.CgInh (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CgInh"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_class_type _loc x1)
|
|
| Ast.CgSem (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CgSem"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_class_sig_item _loc x1),
|
|
meta_class_sig_item _loc x2)
|
|
| Ast.CgCtr (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CgCtr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.CgNil x0 ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CgNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
and meta_class_str_item _loc =
|
|
function
|
|
| Ast.CrAnt (x0, x1) -> Ast.ExAnt (x0, x1)
|
|
| Ast.CrVvr (x0, x1, x2, x3) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CrVvr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_meta_bool _loc x2),
|
|
meta_ctyp _loc x3)
|
|
| Ast.CrVir (x0, x1, x2, x3) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CrVir"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_meta_bool _loc x2),
|
|
meta_ctyp _loc x3)
|
|
| Ast.CrVal (x0, x1, x2, x3) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CrVal"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_meta_bool _loc x2),
|
|
meta_expr _loc x3)
|
|
| Ast.CrMth (x0, x1, x2, x3, x4) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CrMth"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_meta_bool _loc x2),
|
|
meta_expr _loc x3),
|
|
meta_ctyp _loc x4)
|
|
| Ast.CrIni (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CrIni"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1)
|
|
| Ast.CrInh (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CrInh"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_class_expr _loc x1),
|
|
meta_string _loc x2)
|
|
| Ast.CrCtr (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CrCtr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.CrSem (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CrSem"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_class_str_item _loc x1),
|
|
meta_class_str_item _loc x2)
|
|
| Ast.CrNil x0 ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CrNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
and meta_class_type _loc =
|
|
function
|
|
| Ast.CtAnt (x0, x1) -> Ast.ExAnt (x0, x1)
|
|
| Ast.CtEq (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CtEq"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_class_type _loc x1),
|
|
meta_class_type _loc x2)
|
|
| Ast.CtCol (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CtCol"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_class_type _loc x1),
|
|
meta_class_type _loc x2)
|
|
| Ast.CtAnd (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CtAnd"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_class_type _loc x1),
|
|
meta_class_type _loc x2)
|
|
| Ast.CtSig (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CtSig"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_class_sig_item _loc x2)
|
|
| Ast.CtFun (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CtFun"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_class_type _loc x2)
|
|
| Ast.CtCon (x0, x1, x2, x3) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CtCon"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_meta_bool _loc x1),
|
|
meta_ident _loc x2),
|
|
meta_ctyp _loc x3)
|
|
| Ast.CtNil x0 ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CtNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
and meta_ctyp _loc =
|
|
function
|
|
| Ast.TyAnt (x0, x1) -> Ast.ExAnt (x0, x1)
|
|
| Ast.TyOfAmp (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyOfAmp"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TyAmp (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyAmp"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TyVrnInfSup (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyVrnInfSup"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TyVrnInf (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyVrnInf"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1)
|
|
| Ast.TyVrnSup (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyVrnSup"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1)
|
|
| Ast.TyVrnEq (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyVrnEq"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1)
|
|
| Ast.TySta (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TySta"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TyTup (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyTup"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1)
|
|
| Ast.TyMut (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyMut"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1)
|
|
| Ast.TyPrv (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyPrv"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1)
|
|
| Ast.TyOr (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyOr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TyAnd (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyAnd"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TyOf (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyOf"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TySum (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TySum"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1)
|
|
| Ast.TyCom (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyCom"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TySem (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TySem"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TyCol (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyCol"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TyRec (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyRec"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1)
|
|
| Ast.TyVrn (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyVrn"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.TyQuM (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyQuM"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.TyQuP (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyQuP"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.TyQuo (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyQuo"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.TyPol (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyPol"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TyOlb (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyOlb"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TyObj (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyObj"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_meta_bool _loc x2)
|
|
| Ast.TyDcl (x0, x1, x2, x3, x4) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyDcl"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_list meta_ctyp _loc x2),
|
|
meta_ctyp _loc x3),
|
|
meta_list
|
|
(fun _loc (x1, x2) ->
|
|
Ast.ExTup (_loc,
|
|
Ast.ExCom (_loc, meta_ctyp _loc x1,
|
|
meta_ctyp _loc x2)))
|
|
_loc x4)
|
|
| Ast.TyMan (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyMan"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TyId (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyId"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ident _loc x1)
|
|
| Ast.TyLab (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyLab"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TyCls (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyCls"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ident _loc x1)
|
|
| Ast.TyArr (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyArr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TyApp (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyApp"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TyAny x0 ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyAny"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
| Ast.TyAli (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyAli"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TyNil x0 ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
and meta_expr _loc =
|
|
function
|
|
| Ast.ExWhi (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExWhi"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.ExVrn (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExVrn"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.ExTyc (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExTyc"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.ExCom (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExCom"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.ExTup (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExTup"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1)
|
|
| Ast.ExTry (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExTry"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1),
|
|
meta_match_case _loc x2)
|
|
| Ast.ExStr (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExStr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.ExSte (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExSte"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.ExSnd (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExSnd"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1),
|
|
meta_string _loc x2)
|
|
| Ast.ExSeq (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExSeq"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1)
|
|
| Ast.ExRec (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExRec"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_rec_binding _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.ExOvr (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExOvr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_rec_binding _loc x1)
|
|
| Ast.ExOlb (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExOlb"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.ExObj (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExObj"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_patt _loc x1),
|
|
meta_class_str_item _loc x2)
|
|
| Ast.ExNew (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExNew"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ident _loc x1)
|
|
| Ast.ExMat (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExMat"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1),
|
|
meta_match_case _loc x2)
|
|
| Ast.ExLmd (x0, x1, x2, x3) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExLmd"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_module_expr _loc x2),
|
|
meta_expr _loc x3)
|
|
| Ast.ExLet (x0, x1, x2, x3) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExLet"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_meta_bool _loc x1),
|
|
meta_binding _loc x2),
|
|
meta_expr _loc x3)
|
|
| Ast.ExLaz (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExLaz"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1)
|
|
| Ast.ExLab (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExLab"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.ExNativeInt (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExNativeInt"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.ExInt64 (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExInt64"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.ExInt32 (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExInt32"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.ExInt (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExInt"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.ExIfe (x0, x1, x2, x3) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExIfe"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1),
|
|
meta_expr _loc x2),
|
|
meta_expr _loc x3)
|
|
| Ast.ExFun (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExFun"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_match_case _loc x1)
|
|
| Ast.ExFor (x0, x1, x2, x3, x4, x5) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExFor"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_expr _loc x2),
|
|
meta_expr _loc x3),
|
|
meta_meta_bool _loc x4),
|
|
meta_expr _loc x5)
|
|
| Ast.ExFlo (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExFlo"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.ExCoe (x0, x1, x2, x3) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExCoe"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1),
|
|
meta_ctyp _loc x2),
|
|
meta_ctyp _loc x3)
|
|
| Ast.ExChr (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExChr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.ExAss (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExAss"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.ExAsr (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExAsr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1)
|
|
| Ast.ExAsf x0 ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExAsf"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
| Ast.ExSem (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExSem"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.ExArr (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExArr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1)
|
|
| Ast.ExAre (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExAre"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.ExApp (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExApp"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.ExAnt (x0, x1) -> Ast.ExAnt (x0, x1)
|
|
| Ast.ExAcc (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExAcc"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.ExId (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExId"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ident _loc x1)
|
|
| Ast.ExNil x0 ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
and meta_ident _loc =
|
|
function
|
|
| Ast.IdAnt (x0, x1) -> Ast.ExAnt (x0, x1)
|
|
| Ast.IdUid (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "IdUid"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.IdLid (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "IdLid"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.IdApp (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "IdApp"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ident _loc x1),
|
|
meta_ident _loc x2)
|
|
| Ast.IdAcc (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "IdAcc"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ident _loc x1),
|
|
meta_ident _loc x2)
|
|
and meta_match_case _loc =
|
|
function
|
|
| Ast.McAnt (x0, x1) -> Ast.ExAnt (x0, x1)
|
|
| Ast.McArr (x0, x1, x2, x3) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "McArr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_patt _loc x1),
|
|
meta_expr _loc x2),
|
|
meta_expr _loc x3)
|
|
| Ast.McOr (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "McOr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_match_case _loc x1),
|
|
meta_match_case _loc x2)
|
|
| Ast.McNil x0 ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "McNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
and meta_meta_bool _loc =
|
|
function
|
|
| Ast.BAnt x0 -> Ast.ExAnt (_loc, x0)
|
|
| Ast.BFalse ->
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "BFalse")))
|
|
| Ast.BTrue ->
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "BTrue")))
|
|
and meta_meta_list mf_a _loc =
|
|
function
|
|
| Ast.LAnt x0 -> Ast.ExAnt (_loc, x0)
|
|
| Ast.LCons (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "LCons"))),
|
|
mf_a _loc x0),
|
|
meta_meta_list mf_a _loc x1)
|
|
| Ast.LNil ->
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "LNil")))
|
|
and meta_meta_option mf_a _loc =
|
|
function
|
|
| Ast.OAnt x0 -> Ast.ExAnt (_loc, x0)
|
|
| Ast.OSome x0 ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "OSome"))),
|
|
mf_a _loc x0)
|
|
| Ast.ONone ->
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ONone")))
|
|
and meta_module_binding _loc =
|
|
function
|
|
| Ast.MbAnt (x0, x1) -> Ast.ExAnt (x0, x1)
|
|
| Ast.MbCol (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MbCol"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_module_type _loc x2)
|
|
| Ast.MbColEq (x0, x1, x2, x3) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MbColEq"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_module_type _loc x2),
|
|
meta_module_expr _loc x3)
|
|
| Ast.MbAnd (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MbAnd"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_module_binding _loc x1),
|
|
meta_module_binding _loc x2)
|
|
| Ast.MbNil x0 ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MbNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
and meta_module_expr _loc =
|
|
function
|
|
| Ast.MeAnt (x0, x1) -> Ast.ExAnt (x0, x1)
|
|
| Ast.MeTyc (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MeTyc"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_module_expr _loc x1),
|
|
meta_module_type _loc x2)
|
|
| Ast.MeStr (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MeStr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_str_item _loc x1)
|
|
| Ast.MeFun (x0, x1, x2, x3) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MeFun"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_module_type _loc x2),
|
|
meta_module_expr _loc x3)
|
|
| Ast.MeApp (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MeApp"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_module_expr _loc x1),
|
|
meta_module_expr _loc x2)
|
|
| Ast.MeId (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MeId"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ident _loc x1)
|
|
| Ast.MeNil x0 ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MeNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
and meta_module_type _loc =
|
|
function
|
|
| Ast.MtAnt (x0, x1) -> Ast.ExAnt (x0, x1)
|
|
| Ast.MtWit (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MtWit"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_module_type _loc x1),
|
|
meta_with_constr _loc x2)
|
|
| Ast.MtSig (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MtSig"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_sig_item _loc x1)
|
|
| Ast.MtQuo (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MtQuo"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.MtFun (x0, x1, x2, x3) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MtFun"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_module_type _loc x2),
|
|
meta_module_type _loc x3)
|
|
| Ast.MtId (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MtId"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ident _loc x1)
|
|
| Ast.MtNil x0 ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MtNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
and meta_patt _loc =
|
|
function
|
|
| Ast.PaVrn (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaVrn"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.PaTyp (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaTyp"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ident _loc x1)
|
|
| Ast.PaTyc (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaTyc"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_patt _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.PaTup (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaTup"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_patt _loc x1)
|
|
| Ast.PaStr (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaStr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.PaEq (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaEq"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ident _loc x1),
|
|
meta_patt _loc x2)
|
|
| Ast.PaRec (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaRec"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_patt _loc x1)
|
|
| Ast.PaRng (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaRng"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_patt _loc x1),
|
|
meta_patt _loc x2)
|
|
| Ast.PaOrp (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaOrp"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_patt _loc x1),
|
|
meta_patt _loc x2)
|
|
| Ast.PaOlbi (x0, x1, x2, x3) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaOlbi"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_patt _loc x2),
|
|
meta_expr _loc x3)
|
|
| Ast.PaOlb (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaOlb"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_patt _loc x2)
|
|
| Ast.PaLab (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaLab"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_patt _loc x2)
|
|
| Ast.PaFlo (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaFlo"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.PaNativeInt (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaNativeInt"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.PaInt64 (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaInt64"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.PaInt32 (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaInt32"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.PaInt (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaInt"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.PaChr (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaChr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.PaSem (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaSem"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_patt _loc x1),
|
|
meta_patt _loc x2)
|
|
| Ast.PaCom (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaCom"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_patt _loc x1),
|
|
meta_patt _loc x2)
|
|
| Ast.PaArr (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaArr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_patt _loc x1)
|
|
| Ast.PaApp (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaApp"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_patt _loc x1),
|
|
meta_patt _loc x2)
|
|
| Ast.PaAny x0 ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaAny"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
| Ast.PaAnt (x0, x1) -> Ast.ExAnt (x0, x1)
|
|
| Ast.PaAli (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaAli"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_patt _loc x1),
|
|
meta_patt _loc x2)
|
|
| Ast.PaId (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaId"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ident _loc x1)
|
|
| Ast.PaNil x0 ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
and meta_rec_binding _loc =
|
|
function
|
|
| Ast.RbAnt (x0, x1) -> Ast.ExAnt (x0, x1)
|
|
| Ast.RbEq (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "RbEq"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ident _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.RbSem (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "RbSem"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_rec_binding _loc x1),
|
|
meta_rec_binding _loc x2)
|
|
| Ast.RbNil x0 ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "RbNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
and meta_sig_item _loc =
|
|
function
|
|
| Ast.SgAnt (x0, x1) -> Ast.ExAnt (x0, x1)
|
|
| Ast.SgVal (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "SgVal"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.SgTyp (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "SgTyp"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1)
|
|
| Ast.SgOpn (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "SgOpn"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ident _loc x1)
|
|
| Ast.SgMty (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "SgMty"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_module_type _loc x2)
|
|
| Ast.SgRecMod (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "SgRecMod"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_module_binding _loc x1)
|
|
| Ast.SgMod (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "SgMod"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_module_type _loc x2)
|
|
| Ast.SgInc (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "SgInc"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_module_type _loc x1)
|
|
| Ast.SgExt (x0, x1, x2, x3) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "SgExt"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_ctyp _loc x2),
|
|
meta_meta_list meta_string _loc x3)
|
|
| Ast.SgExc (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "SgExc"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1)
|
|
| Ast.SgDir (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "SgDir"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.SgSem (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "SgSem"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_sig_item _loc x1),
|
|
meta_sig_item _loc x2)
|
|
| Ast.SgClt (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "SgClt"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_class_type _loc x1)
|
|
| Ast.SgCls (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "SgCls"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_class_type _loc x1)
|
|
| Ast.SgNil x0 ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "SgNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
and meta_str_item _loc =
|
|
function
|
|
| Ast.StAnt (x0, x1) -> Ast.ExAnt (x0, x1)
|
|
| Ast.StVal (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "StVal"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_meta_bool _loc x1),
|
|
meta_binding _loc x2)
|
|
| Ast.StTyp (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "StTyp"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1)
|
|
| Ast.StOpn (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "StOpn"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ident _loc x1)
|
|
| Ast.StMty (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "StMty"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_module_type _loc x2)
|
|
| Ast.StRecMod (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "StRecMod"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_module_binding _loc x1)
|
|
| Ast.StMod (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "StMod"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_module_expr _loc x2)
|
|
| Ast.StInc (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "StInc"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_module_expr _loc x1)
|
|
| Ast.StExt (x0, x1, x2, x3) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "StExt"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_ctyp _loc x2),
|
|
meta_meta_list meta_string _loc x3)
|
|
| Ast.StExp (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "StExp"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1)
|
|
| Ast.StExc (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "StExc"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_meta_option meta_ident _loc x2)
|
|
| Ast.StDir (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "StDir"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.StSem (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "StSem"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_str_item _loc x1),
|
|
meta_str_item _loc x2)
|
|
| Ast.StClt (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "StClt"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_class_type _loc x1)
|
|
| Ast.StCls (x0, x1) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "StCls"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_class_expr _loc x1)
|
|
| Ast.StNil x0 ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "StNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
and meta_with_constr _loc =
|
|
function
|
|
| Ast.WcAnt (x0, x1) -> Ast.ExAnt (x0, x1)
|
|
| Ast.WcAnd (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "WcAnd"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_with_constr _loc x1),
|
|
meta_with_constr _loc x2)
|
|
| Ast.WcMod (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "WcMod"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ident _loc x1),
|
|
meta_ident _loc x2)
|
|
| Ast.WcTyp (x0, x1, x2) ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "WcTyp"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.WcNil x0 ->
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "WcNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
end
|
|
let meta_acc_Loc_t = meta_loc_patt
|
|
module Patt =
|
|
struct
|
|
let meta_string _loc s = Ast.PaStr (_loc, s)
|
|
let meta_int _loc s = Ast.PaInt (_loc, s)
|
|
let meta_float _loc s = Ast.PaFlo (_loc, s)
|
|
let meta_char _loc s = Ast.PaChr (_loc, s)
|
|
let meta_bool _loc =
|
|
function
|
|
| false ->
|
|
Ast.PaId (_loc, Ast.IdUid (_loc, "False"))
|
|
| true -> Ast.PaId (_loc, Ast.IdUid (_loc, "True"))
|
|
let rec meta_list mf_a _loc =
|
|
function
|
|
| [] -> Ast.PaId (_loc, Ast.IdUid (_loc, "[]"))
|
|
| x :: xs ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc, Ast.IdUid (_loc, "::")),
|
|
mf_a _loc x),
|
|
meta_list mf_a _loc xs)
|
|
let rec meta_binding _loc =
|
|
function
|
|
| Ast.BiAnt (x0, x1) -> Ast.PaAnt (x0, x1)
|
|
| Ast.BiEq (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "BiEq"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_patt _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.BiAnd (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "BiAnd"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_binding _loc x1),
|
|
meta_binding _loc x2)
|
|
| Ast.BiNil x0 ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "BiNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
and meta_class_expr _loc =
|
|
function
|
|
| Ast.CeAnt (x0, x1) -> Ast.PaAnt (x0, x1)
|
|
| Ast.CeEq (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CeEq"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_class_expr _loc x1),
|
|
meta_class_expr _loc x2)
|
|
| Ast.CeAnd (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CeAnd"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_class_expr _loc x1),
|
|
meta_class_expr _loc x2)
|
|
| Ast.CeTyc (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CeTyc"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_class_expr _loc x1),
|
|
meta_class_type _loc x2)
|
|
| Ast.CeStr (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CeStr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_patt _loc x1),
|
|
meta_class_str_item _loc x2)
|
|
| Ast.CeLet (x0, x1, x2, x3) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CeLet"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_meta_bool _loc x1),
|
|
meta_binding _loc x2),
|
|
meta_class_expr _loc x3)
|
|
| Ast.CeFun (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CeFun"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_patt _loc x1),
|
|
meta_class_expr _loc x2)
|
|
| Ast.CeCon (x0, x1, x2, x3) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CeCon"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_meta_bool _loc x1),
|
|
meta_ident _loc x2),
|
|
meta_ctyp _loc x3)
|
|
| Ast.CeApp (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CeApp"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_class_expr _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.CeNil x0 ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CeNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
and meta_class_sig_item _loc =
|
|
function
|
|
| Ast.CgAnt (x0, x1) -> Ast.PaAnt (x0, x1)
|
|
| Ast.CgVir (x0, x1, x2, x3) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CgVir"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_meta_bool _loc x2),
|
|
meta_ctyp _loc x3)
|
|
| Ast.CgVal (x0, x1, x2, x3, x4) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CgVal"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_meta_bool _loc x2),
|
|
meta_meta_bool _loc x3),
|
|
meta_ctyp _loc x4)
|
|
| Ast.CgMth (x0, x1, x2, x3) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CgMth"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_meta_bool _loc x2),
|
|
meta_ctyp _loc x3)
|
|
| Ast.CgInh (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CgInh"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_class_type _loc x1)
|
|
| Ast.CgSem (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CgSem"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_class_sig_item _loc x1),
|
|
meta_class_sig_item _loc x2)
|
|
| Ast.CgCtr (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CgCtr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.CgNil x0 ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CgNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
and meta_class_str_item _loc =
|
|
function
|
|
| Ast.CrAnt (x0, x1) -> Ast.PaAnt (x0, x1)
|
|
| Ast.CrVvr (x0, x1, x2, x3) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CrVvr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_meta_bool _loc x2),
|
|
meta_ctyp _loc x3)
|
|
| Ast.CrVir (x0, x1, x2, x3) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CrVir"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_meta_bool _loc x2),
|
|
meta_ctyp _loc x3)
|
|
| Ast.CrVal (x0, x1, x2, x3) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CrVal"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_meta_bool _loc x2),
|
|
meta_expr _loc x3)
|
|
| Ast.CrMth (x0, x1, x2, x3, x4) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CrMth"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_meta_bool _loc x2),
|
|
meta_expr _loc x3),
|
|
meta_ctyp _loc x4)
|
|
| Ast.CrIni (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CrIni"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1)
|
|
| Ast.CrInh (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CrInh"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_class_expr _loc x1),
|
|
meta_string _loc x2)
|
|
| Ast.CrCtr (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CrCtr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.CrSem (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CrSem"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_class_str_item _loc x1),
|
|
meta_class_str_item _loc x2)
|
|
| Ast.CrNil x0 ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CrNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
and meta_class_type _loc =
|
|
function
|
|
| Ast.CtAnt (x0, x1) -> Ast.PaAnt (x0, x1)
|
|
| Ast.CtEq (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CtEq"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_class_type _loc x1),
|
|
meta_class_type _loc x2)
|
|
| Ast.CtCol (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CtCol"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_class_type _loc x1),
|
|
meta_class_type _loc x2)
|
|
| Ast.CtAnd (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CtAnd"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_class_type _loc x1),
|
|
meta_class_type _loc x2)
|
|
| Ast.CtSig (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CtSig"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_class_sig_item _loc x2)
|
|
| Ast.CtFun (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CtFun"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_class_type _loc x2)
|
|
| Ast.CtCon (x0, x1, x2, x3) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CtCon"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_meta_bool _loc x1),
|
|
meta_ident _loc x2),
|
|
meta_ctyp _loc x3)
|
|
| Ast.CtNil x0 ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "CtNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
and meta_ctyp _loc =
|
|
function
|
|
| Ast.TyAnt (x0, x1) -> Ast.PaAnt (x0, x1)
|
|
| Ast.TyOfAmp (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyOfAmp"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TyAmp (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyAmp"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TyVrnInfSup (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyVrnInfSup"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TyVrnInf (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyVrnInf"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1)
|
|
| Ast.TyVrnSup (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyVrnSup"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1)
|
|
| Ast.TyVrnEq (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyVrnEq"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1)
|
|
| Ast.TySta (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TySta"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TyTup (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyTup"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1)
|
|
| Ast.TyMut (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyMut"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1)
|
|
| Ast.TyPrv (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyPrv"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1)
|
|
| Ast.TyOr (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyOr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TyAnd (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyAnd"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TyOf (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyOf"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TySum (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TySum"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1)
|
|
| Ast.TyCom (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyCom"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TySem (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TySem"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TyCol (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyCol"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TyRec (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyRec"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1)
|
|
| Ast.TyVrn (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyVrn"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.TyQuM (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyQuM"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.TyQuP (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyQuP"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.TyQuo (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyQuo"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.TyPol (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyPol"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TyOlb (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyOlb"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TyObj (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyObj"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_meta_bool _loc x2)
|
|
| Ast.TyDcl (x0, x1, x2, x3, x4) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyDcl"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_list meta_ctyp _loc x2),
|
|
meta_ctyp _loc x3),
|
|
meta_list
|
|
(fun _loc (x1, x2) ->
|
|
Ast.PaTup (_loc,
|
|
Ast.PaCom (_loc, meta_ctyp _loc x1,
|
|
meta_ctyp _loc x2)))
|
|
_loc x4)
|
|
| Ast.TyMan (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyMan"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TyId (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyId"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ident _loc x1)
|
|
| Ast.TyLab (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyLab"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TyCls (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyCls"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ident _loc x1)
|
|
| Ast.TyArr (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyArr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TyApp (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyApp"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TyAny x0 ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyAny"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
| Ast.TyAli (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyAli"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.TyNil x0 ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "TyNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
and meta_expr _loc =
|
|
function
|
|
| Ast.ExWhi (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExWhi"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.ExVrn (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExVrn"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.ExTyc (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExTyc"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.ExCom (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExCom"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.ExTup (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExTup"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1)
|
|
| Ast.ExTry (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExTry"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1),
|
|
meta_match_case _loc x2)
|
|
| Ast.ExStr (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExStr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.ExSte (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExSte"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.ExSnd (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExSnd"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1),
|
|
meta_string _loc x2)
|
|
| Ast.ExSeq (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExSeq"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1)
|
|
| Ast.ExRec (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExRec"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_rec_binding _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.ExOvr (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExOvr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_rec_binding _loc x1)
|
|
| Ast.ExOlb (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExOlb"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.ExObj (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExObj"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_patt _loc x1),
|
|
meta_class_str_item _loc x2)
|
|
| Ast.ExNew (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExNew"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ident _loc x1)
|
|
| Ast.ExMat (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExMat"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1),
|
|
meta_match_case _loc x2)
|
|
| Ast.ExLmd (x0, x1, x2, x3) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExLmd"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_module_expr _loc x2),
|
|
meta_expr _loc x3)
|
|
| Ast.ExLet (x0, x1, x2, x3) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExLet"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_meta_bool _loc x1),
|
|
meta_binding _loc x2),
|
|
meta_expr _loc x3)
|
|
| Ast.ExLaz (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExLaz"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1)
|
|
| Ast.ExLab (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExLab"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.ExNativeInt (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExNativeInt"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.ExInt64 (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExInt64"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.ExInt32 (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExInt32"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.ExInt (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExInt"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.ExIfe (x0, x1, x2, x3) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExIfe"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1),
|
|
meta_expr _loc x2),
|
|
meta_expr _loc x3)
|
|
| Ast.ExFun (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExFun"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_match_case _loc x1)
|
|
| Ast.ExFor (x0, x1, x2, x3, x4, x5) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExFor"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_expr _loc x2),
|
|
meta_expr _loc x3),
|
|
meta_meta_bool _loc x4),
|
|
meta_expr _loc x5)
|
|
| Ast.ExFlo (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExFlo"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.ExCoe (x0, x1, x2, x3) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExCoe"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1),
|
|
meta_ctyp _loc x2),
|
|
meta_ctyp _loc x3)
|
|
| Ast.ExChr (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExChr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.ExAss (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExAss"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.ExAsr (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExAsr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1)
|
|
| Ast.ExAsf x0 ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExAsf"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
| Ast.ExSem (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExSem"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.ExArr (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExArr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1)
|
|
| Ast.ExAre (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExAre"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.ExApp (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExApp"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.ExAnt (x0, x1) -> Ast.PaAnt (x0, x1)
|
|
| Ast.ExAcc (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExAcc"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.ExId (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExId"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ident _loc x1)
|
|
| Ast.ExNil x0 ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ExNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
and meta_ident _loc =
|
|
function
|
|
| Ast.IdAnt (x0, x1) -> Ast.PaAnt (x0, x1)
|
|
| Ast.IdUid (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "IdUid"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.IdLid (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "IdLid"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.IdApp (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "IdApp"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ident _loc x1),
|
|
meta_ident _loc x2)
|
|
| Ast.IdAcc (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "IdAcc"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ident _loc x1),
|
|
meta_ident _loc x2)
|
|
and meta_match_case _loc =
|
|
function
|
|
| Ast.McAnt (x0, x1) -> Ast.PaAnt (x0, x1)
|
|
| Ast.McArr (x0, x1, x2, x3) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "McArr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_patt _loc x1),
|
|
meta_expr _loc x2),
|
|
meta_expr _loc x3)
|
|
| Ast.McOr (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "McOr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_match_case _loc x1),
|
|
meta_match_case _loc x2)
|
|
| Ast.McNil x0 ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "McNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
and meta_meta_bool _loc =
|
|
function
|
|
| Ast.BAnt x0 -> Ast.PaAnt (_loc, x0)
|
|
| Ast.BFalse ->
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "BFalse")))
|
|
| Ast.BTrue ->
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "BTrue")))
|
|
and meta_meta_list mf_a _loc =
|
|
function
|
|
| Ast.LAnt x0 -> Ast.PaAnt (_loc, x0)
|
|
| Ast.LCons (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "LCons"))),
|
|
mf_a _loc x0),
|
|
meta_meta_list mf_a _loc x1)
|
|
| Ast.LNil ->
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "LNil")))
|
|
and meta_meta_option mf_a _loc =
|
|
function
|
|
| Ast.OAnt x0 -> Ast.PaAnt (_loc, x0)
|
|
| Ast.OSome x0 ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "OSome"))),
|
|
mf_a _loc x0)
|
|
| Ast.ONone ->
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "ONone")))
|
|
and meta_module_binding _loc =
|
|
function
|
|
| Ast.MbAnt (x0, x1) -> Ast.PaAnt (x0, x1)
|
|
| Ast.MbCol (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MbCol"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_module_type _loc x2)
|
|
| Ast.MbColEq (x0, x1, x2, x3) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MbColEq"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_module_type _loc x2),
|
|
meta_module_expr _loc x3)
|
|
| Ast.MbAnd (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MbAnd"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_module_binding _loc x1),
|
|
meta_module_binding _loc x2)
|
|
| Ast.MbNil x0 ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MbNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
and meta_module_expr _loc =
|
|
function
|
|
| Ast.MeAnt (x0, x1) -> Ast.PaAnt (x0, x1)
|
|
| Ast.MeTyc (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MeTyc"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_module_expr _loc x1),
|
|
meta_module_type _loc x2)
|
|
| Ast.MeStr (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MeStr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_str_item _loc x1)
|
|
| Ast.MeFun (x0, x1, x2, x3) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MeFun"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_module_type _loc x2),
|
|
meta_module_expr _loc x3)
|
|
| Ast.MeApp (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MeApp"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_module_expr _loc x1),
|
|
meta_module_expr _loc x2)
|
|
| Ast.MeId (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MeId"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ident _loc x1)
|
|
| Ast.MeNil x0 ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MeNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
and meta_module_type _loc =
|
|
function
|
|
| Ast.MtAnt (x0, x1) -> Ast.PaAnt (x0, x1)
|
|
| Ast.MtWit (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MtWit"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_module_type _loc x1),
|
|
meta_with_constr _loc x2)
|
|
| Ast.MtSig (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MtSig"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_sig_item _loc x1)
|
|
| Ast.MtQuo (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MtQuo"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.MtFun (x0, x1, x2, x3) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MtFun"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_module_type _loc x2),
|
|
meta_module_type _loc x3)
|
|
| Ast.MtId (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MtId"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ident _loc x1)
|
|
| Ast.MtNil x0 ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "MtNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
and meta_patt _loc =
|
|
function
|
|
| Ast.PaVrn (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaVrn"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.PaTyp (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaTyp"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ident _loc x1)
|
|
| Ast.PaTyc (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaTyc"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_patt _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.PaTup (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaTup"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_patt _loc x1)
|
|
| Ast.PaStr (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaStr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.PaEq (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaEq"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ident _loc x1),
|
|
meta_patt _loc x2)
|
|
| Ast.PaRec (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaRec"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_patt _loc x1)
|
|
| Ast.PaRng (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaRng"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_patt _loc x1),
|
|
meta_patt _loc x2)
|
|
| Ast.PaOrp (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaOrp"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_patt _loc x1),
|
|
meta_patt _loc x2)
|
|
| Ast.PaOlbi (x0, x1, x2, x3) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaOlbi"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_patt _loc x2),
|
|
meta_expr _loc x3)
|
|
| Ast.PaOlb (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaOlb"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_patt _loc x2)
|
|
| Ast.PaLab (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaLab"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_patt _loc x2)
|
|
| Ast.PaFlo (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaFlo"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.PaNativeInt (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaNativeInt"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.PaInt64 (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaInt64"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.PaInt32 (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaInt32"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.PaInt (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaInt"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.PaChr (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaChr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1)
|
|
| Ast.PaSem (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaSem"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_patt _loc x1),
|
|
meta_patt _loc x2)
|
|
| Ast.PaCom (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaCom"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_patt _loc x1),
|
|
meta_patt _loc x2)
|
|
| Ast.PaArr (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaArr"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_patt _loc x1)
|
|
| Ast.PaApp (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaApp"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_patt _loc x1),
|
|
meta_patt _loc x2)
|
|
| Ast.PaAny x0 ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaAny"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
| Ast.PaAnt (x0, x1) -> Ast.PaAnt (x0, x1)
|
|
| Ast.PaAli (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaAli"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_patt _loc x1),
|
|
meta_patt _loc x2)
|
|
| Ast.PaId (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaId"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ident _loc x1)
|
|
| Ast.PaNil x0 ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "PaNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
and meta_rec_binding _loc =
|
|
function
|
|
| Ast.RbAnt (x0, x1) -> Ast.PaAnt (x0, x1)
|
|
| Ast.RbEq (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "RbEq"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ident _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.RbSem (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "RbSem"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_rec_binding _loc x1),
|
|
meta_rec_binding _loc x2)
|
|
| Ast.RbNil x0 ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "RbNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
and meta_sig_item _loc =
|
|
function
|
|
| Ast.SgAnt (x0, x1) -> Ast.PaAnt (x0, x1)
|
|
| Ast.SgVal (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "SgVal"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.SgTyp (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "SgTyp"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1)
|
|
| Ast.SgOpn (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "SgOpn"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ident _loc x1)
|
|
| Ast.SgMty (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "SgMty"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_module_type _loc x2)
|
|
| Ast.SgRecMod (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "SgRecMod"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_module_binding _loc x1)
|
|
| Ast.SgMod (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "SgMod"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_module_type _loc x2)
|
|
| Ast.SgInc (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "SgInc"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_module_type _loc x1)
|
|
| Ast.SgExt (x0, x1, x2, x3) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "SgExt"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_ctyp _loc x2),
|
|
meta_meta_list meta_string _loc x3)
|
|
| Ast.SgExc (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "SgExc"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1)
|
|
| Ast.SgDir (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "SgDir"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.SgSem (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "SgSem"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_sig_item _loc x1),
|
|
meta_sig_item _loc x2)
|
|
| Ast.SgClt (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "SgClt"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_class_type _loc x1)
|
|
| Ast.SgCls (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "SgCls"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_class_type _loc x1)
|
|
| Ast.SgNil x0 ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "SgNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
and meta_str_item _loc =
|
|
function
|
|
| Ast.StAnt (x0, x1) -> Ast.PaAnt (x0, x1)
|
|
| Ast.StVal (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "StVal"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_meta_bool _loc x1),
|
|
meta_binding _loc x2)
|
|
| Ast.StTyp (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "StTyp"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1)
|
|
| Ast.StOpn (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "StOpn"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ident _loc x1)
|
|
| Ast.StMty (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "StMty"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_module_type _loc x2)
|
|
| Ast.StRecMod (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "StRecMod"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_module_binding _loc x1)
|
|
| Ast.StMod (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "StMod"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_module_expr _loc x2)
|
|
| Ast.StInc (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "StInc"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_module_expr _loc x1)
|
|
| Ast.StExt (x0, x1, x2, x3) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "StExt"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_ctyp _loc x2),
|
|
meta_meta_list meta_string _loc x3)
|
|
| Ast.StExp (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "StExp"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_expr _loc x1)
|
|
| Ast.StExc (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "StExc"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_meta_option meta_ident _loc x2)
|
|
| Ast.StDir (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "StDir"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_string _loc x1),
|
|
meta_expr _loc x2)
|
|
| Ast.StSem (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "StSem"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_str_item _loc x1),
|
|
meta_str_item _loc x2)
|
|
| Ast.StClt (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "StClt"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_class_type _loc x1)
|
|
| Ast.StCls (x0, x1) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "StCls"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_class_expr _loc x1)
|
|
| Ast.StNil x0 ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "StNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
and meta_with_constr _loc =
|
|
function
|
|
| Ast.WcAnt (x0, x1) -> Ast.PaAnt (x0, x1)
|
|
| Ast.WcAnd (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "WcAnd"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_with_constr _loc x1),
|
|
meta_with_constr _loc x2)
|
|
| Ast.WcMod (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "WcMod"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ident _loc x1),
|
|
meta_ident _loc x2)
|
|
| Ast.WcTyp (x0, x1, x2) ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc,
|
|
Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "WcTyp"))),
|
|
meta_acc_Loc_t _loc x0),
|
|
meta_ctyp _loc x1),
|
|
meta_ctyp _loc x2)
|
|
| Ast.WcNil x0 ->
|
|
Ast.PaApp (_loc,
|
|
Ast.PaId (_loc,
|
|
Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
|
|
Ast.IdUid (_loc, "WcNil"))),
|
|
meta_acc_Loc_t _loc x0)
|
|
end
|
|
end
|
|
end
|
|
class map =
|
|
object (o)
|
|
method string = fun x -> (x : string)
|
|
method int = fun x -> (x : int)
|
|
method float = fun x -> (x : float)
|
|
method bool = fun x -> (x : bool)
|
|
method list : 'a 'b. ('a -> 'b) -> 'a list -> 'b list = List.
|
|
map
|
|
method option : 'a 'b. ('a -> 'b) -> 'a option -> 'b option =
|
|
fun f -> function | None -> None | Some x -> Some (f x)
|
|
method array : 'a 'b. ('a -> 'b) -> 'a array -> 'b array =
|
|
Array.map
|
|
method ref : 'a 'b. ('a -> 'b) -> 'a ref -> 'b ref =
|
|
fun f { contents = x } -> { contents = f x; }
|
|
method _Loc_t : Loc.t -> Loc.t = fun x -> x
|
|
method with_constr : with_constr -> with_constr =
|
|
function
|
|
| WcNil _x0 -> WcNil (o#_Loc_t _x0)
|
|
| WcTyp (_x0, _x1, _x2) ->
|
|
WcTyp (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
|
|
| WcMod (_x0, _x1, _x2) ->
|
|
WcMod (o#_Loc_t _x0, o#ident _x1, o#ident _x2)
|
|
| WcAnd (_x0, _x1, _x2) ->
|
|
WcAnd (o#_Loc_t _x0, o#with_constr _x1,
|
|
o#with_constr _x2)
|
|
| WcAnt (_x0, _x1) -> WcAnt (o#_Loc_t _x0, o#string _x1)
|
|
method str_item : str_item -> str_item =
|
|
function
|
|
| StNil _x0 -> StNil (o#_Loc_t _x0)
|
|
| StCls (_x0, _x1) ->
|
|
StCls (o#_Loc_t _x0, o#class_expr _x1)
|
|
| StClt (_x0, _x1) ->
|
|
StClt (o#_Loc_t _x0, o#class_type _x1)
|
|
| StSem (_x0, _x1, _x2) ->
|
|
StSem (o#_Loc_t _x0, o#str_item _x1, o#str_item _x2)
|
|
| StDir (_x0, _x1, _x2) ->
|
|
StDir (o#_Loc_t _x0, o#string _x1, o#expr _x2)
|
|
| StExc (_x0, _x1, _x2) ->
|
|
StExc (o#_Loc_t _x0, o#ctyp _x1,
|
|
o#meta_option o#ident _x2)
|
|
| StExp (_x0, _x1) -> StExp (o#_Loc_t _x0, o#expr _x1)
|
|
| StExt (_x0, _x1, _x2, _x3) ->
|
|
StExt (o#_Loc_t _x0, o#string _x1, o#ctyp _x2,
|
|
o#meta_list o#string _x3)
|
|
| StInc (_x0, _x1) ->
|
|
StInc (o#_Loc_t _x0, o#module_expr _x1)
|
|
| StMod (_x0, _x1, _x2) ->
|
|
StMod (o#_Loc_t _x0, o#string _x1, o#module_expr _x2)
|
|
| StRecMod (_x0, _x1) ->
|
|
StRecMod (o#_Loc_t _x0, o#module_binding _x1)
|
|
| StMty (_x0, _x1, _x2) ->
|
|
StMty (o#_Loc_t _x0, o#string _x1, o#module_type _x2)
|
|
| StOpn (_x0, _x1) -> StOpn (o#_Loc_t _x0, o#ident _x1)
|
|
| StTyp (_x0, _x1) -> StTyp (o#_Loc_t _x0, o#ctyp _x1)
|
|
| StVal (_x0, _x1, _x2) ->
|
|
StVal (o#_Loc_t _x0, o#meta_bool _x1, o#binding _x2)
|
|
| StAnt (_x0, _x1) -> StAnt (o#_Loc_t _x0, o#string _x1)
|
|
method sig_item : sig_item -> sig_item =
|
|
function
|
|
| SgNil _x0 -> SgNil (o#_Loc_t _x0)
|
|
| SgCls (_x0, _x1) ->
|
|
SgCls (o#_Loc_t _x0, o#class_type _x1)
|
|
| SgClt (_x0, _x1) ->
|
|
SgClt (o#_Loc_t _x0, o#class_type _x1)
|
|
| SgSem (_x0, _x1, _x2) ->
|
|
SgSem (o#_Loc_t _x0, o#sig_item _x1, o#sig_item _x2)
|
|
| SgDir (_x0, _x1, _x2) ->
|
|
SgDir (o#_Loc_t _x0, o#string _x1, o#expr _x2)
|
|
| SgExc (_x0, _x1) -> SgExc (o#_Loc_t _x0, o#ctyp _x1)
|
|
| SgExt (_x0, _x1, _x2, _x3) ->
|
|
SgExt (o#_Loc_t _x0, o#string _x1, o#ctyp _x2,
|
|
o#meta_list o#string _x3)
|
|
| SgInc (_x0, _x1) ->
|
|
SgInc (o#_Loc_t _x0, o#module_type _x1)
|
|
| SgMod (_x0, _x1, _x2) ->
|
|
SgMod (o#_Loc_t _x0, o#string _x1, o#module_type _x2)
|
|
| SgRecMod (_x0, _x1) ->
|
|
SgRecMod (o#_Loc_t _x0, o#module_binding _x1)
|
|
| SgMty (_x0, _x1, _x2) ->
|
|
SgMty (o#_Loc_t _x0, o#string _x1, o#module_type _x2)
|
|
| SgOpn (_x0, _x1) -> SgOpn (o#_Loc_t _x0, o#ident _x1)
|
|
| SgTyp (_x0, _x1) -> SgTyp (o#_Loc_t _x0, o#ctyp _x1)
|
|
| SgVal (_x0, _x1, _x2) ->
|
|
SgVal (o#_Loc_t _x0, o#string _x1, o#ctyp _x2)
|
|
| SgAnt (_x0, _x1) -> SgAnt (o#_Loc_t _x0, o#string _x1)
|
|
method rec_binding : rec_binding -> rec_binding =
|
|
function
|
|
| RbNil _x0 -> RbNil (o#_Loc_t _x0)
|
|
| RbSem (_x0, _x1, _x2) ->
|
|
RbSem (o#_Loc_t _x0, o#rec_binding _x1,
|
|
o#rec_binding _x2)
|
|
| RbEq (_x0, _x1, _x2) ->
|
|
RbEq (o#_Loc_t _x0, o#ident _x1, o#expr _x2)
|
|
| RbAnt (_x0, _x1) -> RbAnt (o#_Loc_t _x0, o#string _x1)
|
|
method patt : patt -> patt =
|
|
function
|
|
| PaNil _x0 -> PaNil (o#_Loc_t _x0)
|
|
| PaId (_x0, _x1) -> PaId (o#_Loc_t _x0, o#ident _x1)
|
|
| PaAli (_x0, _x1, _x2) ->
|
|
PaAli (o#_Loc_t _x0, o#patt _x1, o#patt _x2)
|
|
| PaAnt (_x0, _x1) -> PaAnt (o#_Loc_t _x0, o#string _x1)
|
|
| PaAny _x0 -> PaAny (o#_Loc_t _x0)
|
|
| PaApp (_x0, _x1, _x2) ->
|
|
PaApp (o#_Loc_t _x0, o#patt _x1, o#patt _x2)
|
|
| PaArr (_x0, _x1) -> PaArr (o#_Loc_t _x0, o#patt _x1)
|
|
| PaCom (_x0, _x1, _x2) ->
|
|
PaCom (o#_Loc_t _x0, o#patt _x1, o#patt _x2)
|
|
| PaSem (_x0, _x1, _x2) ->
|
|
PaSem (o#_Loc_t _x0, o#patt _x1, o#patt _x2)
|
|
| PaChr (_x0, _x1) -> PaChr (o#_Loc_t _x0, o#string _x1)
|
|
| PaInt (_x0, _x1) -> PaInt (o#_Loc_t _x0, o#string _x1)
|
|
| PaInt32 (_x0, _x1) ->
|
|
PaInt32 (o#_Loc_t _x0, o#string _x1)
|
|
| PaInt64 (_x0, _x1) ->
|
|
PaInt64 (o#_Loc_t _x0, o#string _x1)
|
|
| PaNativeInt (_x0, _x1) ->
|
|
PaNativeInt (o#_Loc_t _x0, o#string _x1)
|
|
| PaFlo (_x0, _x1) -> PaFlo (o#_Loc_t _x0, o#string _x1)
|
|
| PaLab (_x0, _x1, _x2) ->
|
|
PaLab (o#_Loc_t _x0, o#string _x1, o#patt _x2)
|
|
| PaOlb (_x0, _x1, _x2) ->
|
|
PaOlb (o#_Loc_t _x0, o#string _x1, o#patt _x2)
|
|
| PaOlbi (_x0, _x1, _x2, _x3) ->
|
|
PaOlbi (o#_Loc_t _x0, o#string _x1, o#patt _x2,
|
|
o#expr _x3)
|
|
| PaOrp (_x0, _x1, _x2) ->
|
|
PaOrp (o#_Loc_t _x0, o#patt _x1, o#patt _x2)
|
|
| PaRng (_x0, _x1, _x2) ->
|
|
PaRng (o#_Loc_t _x0, o#patt _x1, o#patt _x2)
|
|
| PaRec (_x0, _x1) -> PaRec (o#_Loc_t _x0, o#patt _x1)
|
|
| PaEq (_x0, _x1, _x2) ->
|
|
PaEq (o#_Loc_t _x0, o#ident _x1, o#patt _x2)
|
|
| PaStr (_x0, _x1) -> PaStr (o#_Loc_t _x0, o#string _x1)
|
|
| PaTup (_x0, _x1) -> PaTup (o#_Loc_t _x0, o#patt _x1)
|
|
| PaTyc (_x0, _x1, _x2) ->
|
|
PaTyc (o#_Loc_t _x0, o#patt _x1, o#ctyp _x2)
|
|
| PaTyp (_x0, _x1) -> PaTyp (o#_Loc_t _x0, o#ident _x1)
|
|
| PaVrn (_x0, _x1) -> PaVrn (o#_Loc_t _x0, o#string _x1)
|
|
method module_type : module_type -> module_type =
|
|
function
|
|
| MtNil _x0 -> MtNil (o#_Loc_t _x0)
|
|
| MtId (_x0, _x1) -> MtId (o#_Loc_t _x0, o#ident _x1)
|
|
| MtFun (_x0, _x1, _x2, _x3) ->
|
|
MtFun (o#_Loc_t _x0, o#string _x1, o#module_type _x2,
|
|
o#module_type _x3)
|
|
| MtQuo (_x0, _x1) -> MtQuo (o#_Loc_t _x0, o#string _x1)
|
|
| MtSig (_x0, _x1) -> MtSig (o#_Loc_t _x0, o#sig_item _x1)
|
|
| MtWit (_x0, _x1, _x2) ->
|
|
MtWit (o#_Loc_t _x0, o#module_type _x1,
|
|
o#with_constr _x2)
|
|
| MtAnt (_x0, _x1) -> MtAnt (o#_Loc_t _x0, o#string _x1)
|
|
method module_expr : module_expr -> module_expr =
|
|
function
|
|
| MeNil _x0 -> MeNil (o#_Loc_t _x0)
|
|
| MeId (_x0, _x1) -> MeId (o#_Loc_t _x0, o#ident _x1)
|
|
| MeApp (_x0, _x1, _x2) ->
|
|
MeApp (o#_Loc_t _x0, o#module_expr _x1,
|
|
o#module_expr _x2)
|
|
| MeFun (_x0, _x1, _x2, _x3) ->
|
|
MeFun (o#_Loc_t _x0, o#string _x1, o#module_type _x2,
|
|
o#module_expr _x3)
|
|
| MeStr (_x0, _x1) -> MeStr (o#_Loc_t _x0, o#str_item _x1)
|
|
| MeTyc (_x0, _x1, _x2) ->
|
|
MeTyc (o#_Loc_t _x0, o#module_expr _x1,
|
|
o#module_type _x2)
|
|
| MeAnt (_x0, _x1) -> MeAnt (o#_Loc_t _x0, o#string _x1)
|
|
method module_binding : module_binding -> module_binding =
|
|
function
|
|
| MbNil _x0 -> MbNil (o#_Loc_t _x0)
|
|
| MbAnd (_x0, _x1, _x2) ->
|
|
MbAnd (o#_Loc_t _x0, o#module_binding _x1,
|
|
o#module_binding _x2)
|
|
| MbColEq (_x0, _x1, _x2, _x3) ->
|
|
MbColEq (o#_Loc_t _x0, o#string _x1, o#module_type _x2,
|
|
o#module_expr _x3)
|
|
| MbCol (_x0, _x1, _x2) ->
|
|
MbCol (o#_Loc_t _x0, o#string _x1, o#module_type _x2)
|
|
| MbAnt (_x0, _x1) -> MbAnt (o#_Loc_t _x0, o#string _x1)
|
|
method meta_option :
|
|
'a 'b. ('a -> 'b) -> 'a meta_option -> 'b meta_option =
|
|
fun _f_a ->
|
|
function
|
|
| ONone -> ONone
|
|
| OSome _x0 -> OSome (_f_a _x0)
|
|
| OAnt _x0 -> OAnt (o#string _x0)
|
|
method meta_list :
|
|
'a 'b. ('a -> 'b) -> 'a meta_list -> 'b meta_list =
|
|
fun _f_a ->
|
|
function
|
|
| LNil -> LNil
|
|
| LCons (_x0, _x1) ->
|
|
LCons (_f_a _x0, o#meta_list _f_a _x1)
|
|
| LAnt _x0 -> LAnt (o#string _x0)
|
|
method meta_bool : meta_bool -> meta_bool =
|
|
function
|
|
| BTrue -> BTrue
|
|
| BFalse -> BFalse
|
|
| BAnt _x0 -> BAnt (o#string _x0)
|
|
method match_case : match_case -> match_case =
|
|
function
|
|
| McNil _x0 -> McNil (o#_Loc_t _x0)
|
|
| McOr (_x0, _x1, _x2) ->
|
|
McOr (o#_Loc_t _x0, o#match_case _x1, o#match_case _x2)
|
|
| McArr (_x0, _x1, _x2, _x3) ->
|
|
McArr (o#_Loc_t _x0, o#patt _x1, o#expr _x2,
|
|
o#expr _x3)
|
|
| McAnt (_x0, _x1) -> McAnt (o#_Loc_t _x0, o#string _x1)
|
|
method ident : ident -> ident =
|
|
function
|
|
| IdAcc (_x0, _x1, _x2) ->
|
|
IdAcc (o#_Loc_t _x0, o#ident _x1, o#ident _x2)
|
|
| IdApp (_x0, _x1, _x2) ->
|
|
IdApp (o#_Loc_t _x0, o#ident _x1, o#ident _x2)
|
|
| IdLid (_x0, _x1) -> IdLid (o#_Loc_t _x0, o#string _x1)
|
|
| IdUid (_x0, _x1) -> IdUid (o#_Loc_t _x0, o#string _x1)
|
|
| IdAnt (_x0, _x1) -> IdAnt (o#_Loc_t _x0, o#string _x1)
|
|
method expr : expr -> expr =
|
|
function
|
|
| ExNil _x0 -> ExNil (o#_Loc_t _x0)
|
|
| ExId (_x0, _x1) -> ExId (o#_Loc_t _x0, o#ident _x1)
|
|
| ExAcc (_x0, _x1, _x2) ->
|
|
ExAcc (o#_Loc_t _x0, o#expr _x1, o#expr _x2)
|
|
| ExAnt (_x0, _x1) -> ExAnt (o#_Loc_t _x0, o#string _x1)
|
|
| ExApp (_x0, _x1, _x2) ->
|
|
ExApp (o#_Loc_t _x0, o#expr _x1, o#expr _x2)
|
|
| ExAre (_x0, _x1, _x2) ->
|
|
ExAre (o#_Loc_t _x0, o#expr _x1, o#expr _x2)
|
|
| ExArr (_x0, _x1) -> ExArr (o#_Loc_t _x0, o#expr _x1)
|
|
| ExSem (_x0, _x1, _x2) ->
|
|
ExSem (o#_Loc_t _x0, o#expr _x1, o#expr _x2)
|
|
| ExAsf _x0 -> ExAsf (o#_Loc_t _x0)
|
|
| ExAsr (_x0, _x1) -> ExAsr (o#_Loc_t _x0, o#expr _x1)
|
|
| ExAss (_x0, _x1, _x2) ->
|
|
ExAss (o#_Loc_t _x0, o#expr _x1, o#expr _x2)
|
|
| ExChr (_x0, _x1) -> ExChr (o#_Loc_t _x0, o#string _x1)
|
|
| ExCoe (_x0, _x1, _x2, _x3) ->
|
|
ExCoe (o#_Loc_t _x0, o#expr _x1, o#ctyp _x2,
|
|
o#ctyp _x3)
|
|
| ExFlo (_x0, _x1) -> ExFlo (o#_Loc_t _x0, o#string _x1)
|
|
| ExFor (_x0, _x1, _x2, _x3, _x4, _x5) ->
|
|
ExFor (o#_Loc_t _x0, o#string _x1, o#expr _x2,
|
|
o#expr _x3, o#meta_bool _x4, o#expr _x5)
|
|
| ExFun (_x0, _x1) ->
|
|
ExFun (o#_Loc_t _x0, o#match_case _x1)
|
|
| ExIfe (_x0, _x1, _x2, _x3) ->
|
|
ExIfe (o#_Loc_t _x0, o#expr _x1, o#expr _x2,
|
|
o#expr _x3)
|
|
| ExInt (_x0, _x1) -> ExInt (o#_Loc_t _x0, o#string _x1)
|
|
| ExInt32 (_x0, _x1) ->
|
|
ExInt32 (o#_Loc_t _x0, o#string _x1)
|
|
| ExInt64 (_x0, _x1) ->
|
|
ExInt64 (o#_Loc_t _x0, o#string _x1)
|
|
| ExNativeInt (_x0, _x1) ->
|
|
ExNativeInt (o#_Loc_t _x0, o#string _x1)
|
|
| ExLab (_x0, _x1, _x2) ->
|
|
ExLab (o#_Loc_t _x0, o#string _x1, o#expr _x2)
|
|
| ExLaz (_x0, _x1) -> ExLaz (o#_Loc_t _x0, o#expr _x1)
|
|
| ExLet (_x0, _x1, _x2, _x3) ->
|
|
ExLet (o#_Loc_t _x0, o#meta_bool _x1, o#binding _x2,
|
|
o#expr _x3)
|
|
| ExLmd (_x0, _x1, _x2, _x3) ->
|
|
ExLmd (o#_Loc_t _x0, o#string _x1, o#module_expr _x2,
|
|
o#expr _x3)
|
|
| ExMat (_x0, _x1, _x2) ->
|
|
ExMat (o#_Loc_t _x0, o#expr _x1, o#match_case _x2)
|
|
| ExNew (_x0, _x1) -> ExNew (o#_Loc_t _x0, o#ident _x1)
|
|
| ExObj (_x0, _x1, _x2) ->
|
|
ExObj (o#_Loc_t _x0, o#patt _x1, o#class_str_item _x2)
|
|
| ExOlb (_x0, _x1, _x2) ->
|
|
ExOlb (o#_Loc_t _x0, o#string _x1, o#expr _x2)
|
|
| ExOvr (_x0, _x1) ->
|
|
ExOvr (o#_Loc_t _x0, o#rec_binding _x1)
|
|
| ExRec (_x0, _x1, _x2) ->
|
|
ExRec (o#_Loc_t _x0, o#rec_binding _x1, o#expr _x2)
|
|
| ExSeq (_x0, _x1) -> ExSeq (o#_Loc_t _x0, o#expr _x1)
|
|
| ExSnd (_x0, _x1, _x2) ->
|
|
ExSnd (o#_Loc_t _x0, o#expr _x1, o#string _x2)
|
|
| ExSte (_x0, _x1, _x2) ->
|
|
ExSte (o#_Loc_t _x0, o#expr _x1, o#expr _x2)
|
|
| ExStr (_x0, _x1) -> ExStr (o#_Loc_t _x0, o#string _x1)
|
|
| ExTry (_x0, _x1, _x2) ->
|
|
ExTry (o#_Loc_t _x0, o#expr _x1, o#match_case _x2)
|
|
| ExTup (_x0, _x1) -> ExTup (o#_Loc_t _x0, o#expr _x1)
|
|
| ExCom (_x0, _x1, _x2) ->
|
|
ExCom (o#_Loc_t _x0, o#expr _x1, o#expr _x2)
|
|
| ExTyc (_x0, _x1, _x2) ->
|
|
ExTyc (o#_Loc_t _x0, o#expr _x1, o#ctyp _x2)
|
|
| ExVrn (_x0, _x1) -> ExVrn (o#_Loc_t _x0, o#string _x1)
|
|
| ExWhi (_x0, _x1, _x2) ->
|
|
ExWhi (o#_Loc_t _x0, o#expr _x1, o#expr _x2)
|
|
method ctyp : ctyp -> ctyp =
|
|
function
|
|
| TyNil _x0 -> TyNil (o#_Loc_t _x0)
|
|
| TyAli (_x0, _x1, _x2) ->
|
|
TyAli (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
|
|
| TyAny _x0 -> TyAny (o#_Loc_t _x0)
|
|
| TyApp (_x0, _x1, _x2) ->
|
|
TyApp (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
|
|
| TyArr (_x0, _x1, _x2) ->
|
|
TyArr (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
|
|
| TyCls (_x0, _x1) -> TyCls (o#_Loc_t _x0, o#ident _x1)
|
|
| TyLab (_x0, _x1, _x2) ->
|
|
TyLab (o#_Loc_t _x0, o#string _x1, o#ctyp _x2)
|
|
| TyId (_x0, _x1) -> TyId (o#_Loc_t _x0, o#ident _x1)
|
|
| TyMan (_x0, _x1, _x2) ->
|
|
TyMan (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
|
|
| TyDcl (_x0, _x1, _x2, _x3, _x4) ->
|
|
TyDcl (o#_Loc_t _x0, o#string _x1, o#list o#ctyp _x2,
|
|
o#ctyp _x3,
|
|
o#list
|
|
(fun (_x0, _x1) -> ((o#ctyp _x0), (o#ctyp _x1)))
|
|
_x4)
|
|
| TyObj (_x0, _x1, _x2) ->
|
|
TyObj (o#_Loc_t _x0, o#ctyp _x1, o#meta_bool _x2)
|
|
| TyOlb (_x0, _x1, _x2) ->
|
|
TyOlb (o#_Loc_t _x0, o#string _x1, o#ctyp _x2)
|
|
| TyPol (_x0, _x1, _x2) ->
|
|
TyPol (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
|
|
| TyQuo (_x0, _x1) -> TyQuo (o#_Loc_t _x0, o#string _x1)
|
|
| TyQuP (_x0, _x1) -> TyQuP (o#_Loc_t _x0, o#string _x1)
|
|
| TyQuM (_x0, _x1) -> TyQuM (o#_Loc_t _x0, o#string _x1)
|
|
| TyVrn (_x0, _x1) -> TyVrn (o#_Loc_t _x0, o#string _x1)
|
|
| TyRec (_x0, _x1) -> TyRec (o#_Loc_t _x0, o#ctyp _x1)
|
|
| TyCol (_x0, _x1, _x2) ->
|
|
TyCol (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
|
|
| TySem (_x0, _x1, _x2) ->
|
|
TySem (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
|
|
| TyCom (_x0, _x1, _x2) ->
|
|
TyCom (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
|
|
| TySum (_x0, _x1) -> TySum (o#_Loc_t _x0, o#ctyp _x1)
|
|
| TyOf (_x0, _x1, _x2) ->
|
|
TyOf (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
|
|
| TyAnd (_x0, _x1, _x2) ->
|
|
TyAnd (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
|
|
| TyOr (_x0, _x1, _x2) ->
|
|
TyOr (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
|
|
| TyPrv (_x0, _x1) -> TyPrv (o#_Loc_t _x0, o#ctyp _x1)
|
|
| TyMut (_x0, _x1) -> TyMut (o#_Loc_t _x0, o#ctyp _x1)
|
|
| TyTup (_x0, _x1) -> TyTup (o#_Loc_t _x0, o#ctyp _x1)
|
|
| TySta (_x0, _x1, _x2) ->
|
|
TySta (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
|
|
| TyVrnEq (_x0, _x1) -> TyVrnEq (o#_Loc_t _x0, o#ctyp _x1)
|
|
| TyVrnSup (_x0, _x1) ->
|
|
TyVrnSup (o#_Loc_t _x0, o#ctyp _x1)
|
|
| TyVrnInf (_x0, _x1) ->
|
|
TyVrnInf (o#_Loc_t _x0, o#ctyp _x1)
|
|
| TyVrnInfSup (_x0, _x1, _x2) ->
|
|
TyVrnInfSup (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
|
|
| TyAmp (_x0, _x1, _x2) ->
|
|
TyAmp (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
|
|
| TyOfAmp (_x0, _x1, _x2) ->
|
|
TyOfAmp (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
|
|
| TyAnt (_x0, _x1) -> TyAnt (o#_Loc_t _x0, o#string _x1)
|
|
method class_type : class_type -> class_type =
|
|
function
|
|
| CtNil _x0 -> CtNil (o#_Loc_t _x0)
|
|
| CtCon (_x0, _x1, _x2, _x3) ->
|
|
CtCon (o#_Loc_t _x0, o#meta_bool _x1, o#ident _x2,
|
|
o#ctyp _x3)
|
|
| CtFun (_x0, _x1, _x2) ->
|
|
CtFun (o#_Loc_t _x0, o#ctyp _x1, o#class_type _x2)
|
|
| CtSig (_x0, _x1, _x2) ->
|
|
CtSig (o#_Loc_t _x0, o#ctyp _x1, o#class_sig_item _x2)
|
|
| CtAnd (_x0, _x1, _x2) ->
|
|
CtAnd (o#_Loc_t _x0, o#class_type _x1,
|
|
o#class_type _x2)
|
|
| CtCol (_x0, _x1, _x2) ->
|
|
CtCol (o#_Loc_t _x0, o#class_type _x1,
|
|
o#class_type _x2)
|
|
| CtEq (_x0, _x1, _x2) ->
|
|
CtEq (o#_Loc_t _x0, o#class_type _x1, o#class_type _x2)
|
|
| CtAnt (_x0, _x1) -> CtAnt (o#_Loc_t _x0, o#string _x1)
|
|
method class_str_item : class_str_item -> class_str_item =
|
|
function
|
|
| CrNil _x0 -> CrNil (o#_Loc_t _x0)
|
|
| CrSem (_x0, _x1, _x2) ->
|
|
CrSem (o#_Loc_t _x0, o#class_str_item _x1,
|
|
o#class_str_item _x2)
|
|
| CrCtr (_x0, _x1, _x2) ->
|
|
CrCtr (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
|
|
| CrInh (_x0, _x1, _x2) ->
|
|
CrInh (o#_Loc_t _x0, o#class_expr _x1, o#string _x2)
|
|
| CrIni (_x0, _x1) -> CrIni (o#_Loc_t _x0, o#expr _x1)
|
|
| CrMth (_x0, _x1, _x2, _x3, _x4) ->
|
|
CrMth (o#_Loc_t _x0, o#string _x1, o#meta_bool _x2,
|
|
o#expr _x3, o#ctyp _x4)
|
|
| CrVal (_x0, _x1, _x2, _x3) ->
|
|
CrVal (o#_Loc_t _x0, o#string _x1, o#meta_bool _x2,
|
|
o#expr _x3)
|
|
| CrVir (_x0, _x1, _x2, _x3) ->
|
|
CrVir (o#_Loc_t _x0, o#string _x1, o#meta_bool _x2,
|
|
o#ctyp _x3)
|
|
| CrVvr (_x0, _x1, _x2, _x3) ->
|
|
CrVvr (o#_Loc_t _x0, o#string _x1, o#meta_bool _x2,
|
|
o#ctyp _x3)
|
|
| CrAnt (_x0, _x1) -> CrAnt (o#_Loc_t _x0, o#string _x1)
|
|
method class_sig_item : class_sig_item -> class_sig_item =
|
|
function
|
|
| CgNil _x0 -> CgNil (o#_Loc_t _x0)
|
|
| CgCtr (_x0, _x1, _x2) ->
|
|
CgCtr (o#_Loc_t _x0, o#ctyp _x1, o#ctyp _x2)
|
|
| CgSem (_x0, _x1, _x2) ->
|
|
CgSem (o#_Loc_t _x0, o#class_sig_item _x1,
|
|
o#class_sig_item _x2)
|
|
| CgInh (_x0, _x1) ->
|
|
CgInh (o#_Loc_t _x0, o#class_type _x1)
|
|
| CgMth (_x0, _x1, _x2, _x3) ->
|
|
CgMth (o#_Loc_t _x0, o#string _x1, o#meta_bool _x2,
|
|
o#ctyp _x3)
|
|
| CgVal (_x0, _x1, _x2, _x3, _x4) ->
|
|
CgVal (o#_Loc_t _x0, o#string _x1, o#meta_bool _x2,
|
|
o#meta_bool _x3, o#ctyp _x4)
|
|
| CgVir (_x0, _x1, _x2, _x3) ->
|
|
CgVir (o#_Loc_t _x0, o#string _x1, o#meta_bool _x2,
|
|
o#ctyp _x3)
|
|
| CgAnt (_x0, _x1) -> CgAnt (o#_Loc_t _x0, o#string _x1)
|
|
method class_expr : class_expr -> class_expr =
|
|
function
|
|
| CeNil _x0 -> CeNil (o#_Loc_t _x0)
|
|
| CeApp (_x0, _x1, _x2) ->
|
|
CeApp (o#_Loc_t _x0, o#class_expr _x1, o#expr _x2)
|
|
| CeCon (_x0, _x1, _x2, _x3) ->
|
|
CeCon (o#_Loc_t _x0, o#meta_bool _x1, o#ident _x2,
|
|
o#ctyp _x3)
|
|
| CeFun (_x0, _x1, _x2) ->
|
|
CeFun (o#_Loc_t _x0, o#patt _x1, o#class_expr _x2)
|
|
| CeLet (_x0, _x1, _x2, _x3) ->
|
|
CeLet (o#_Loc_t _x0, o#meta_bool _x1, o#binding _x2,
|
|
o#class_expr _x3)
|
|
| CeStr (_x0, _x1, _x2) ->
|
|
CeStr (o#_Loc_t _x0, o#patt _x1, o#class_str_item _x2)
|
|
| CeTyc (_x0, _x1, _x2) ->
|
|
CeTyc (o#_Loc_t _x0, o#class_expr _x1,
|
|
o#class_type _x2)
|
|
| CeAnd (_x0, _x1, _x2) ->
|
|
CeAnd (o#_Loc_t _x0, o#class_expr _x1,
|
|
o#class_expr _x2)
|
|
| CeEq (_x0, _x1, _x2) ->
|
|
CeEq (o#_Loc_t _x0, o#class_expr _x1, o#class_expr _x2)
|
|
| CeAnt (_x0, _x1) -> CeAnt (o#_Loc_t _x0, o#string _x1)
|
|
method binding : binding -> binding =
|
|
function
|
|
| BiNil _x0 -> BiNil (o#_Loc_t _x0)
|
|
| BiAnd (_x0, _x1, _x2) ->
|
|
BiAnd (o#_Loc_t _x0, o#binding _x1, o#binding _x2)
|
|
| BiEq (_x0, _x1, _x2) ->
|
|
BiEq (o#_Loc_t _x0, o#patt _x1, o#expr _x2)
|
|
| BiAnt (_x0, _x1) -> BiAnt (o#_Loc_t _x0, o#string _x1)
|
|
end
|
|
class fold =
|
|
object ((o : 'self_type))
|
|
method string = fun (_ : string) -> (o : 'self_type)
|
|
method int = fun (_ : int) -> (o : 'self_type)
|
|
method float = fun (_ : float) -> (o : 'self_type)
|
|
method bool = fun (_ : bool) -> (o : 'self_type)
|
|
method list :
|
|
'a.
|
|
('self_type -> 'a -> 'self_type) -> 'a list -> 'self_type =
|
|
fun f -> List.fold_left f o
|
|
method option :
|
|
'a.
|
|
('self_type -> 'a -> 'self_type) ->
|
|
'a option -> 'self_type =
|
|
fun f -> function | None -> o | Some x -> f o x
|
|
method array :
|
|
'a.
|
|
('self_type -> 'a -> 'self_type) ->
|
|
'a array -> 'self_type =
|
|
fun f -> Array.fold_left f o
|
|
method ref :
|
|
'a.
|
|
('self_type -> 'a -> 'self_type) -> 'a ref -> 'self_type =
|
|
fun f { contents = x } -> f o x
|
|
method _Loc_t : Loc.t -> 'self_type = fun _ -> o
|
|
method with_constr : with_constr -> 'self_type =
|
|
function
|
|
| WcNil _x0 -> o#_Loc_t _x0
|
|
| WcTyp (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
|
|
| WcMod (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#ident _x1)#ident _x2
|
|
| WcAnd (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#with_constr _x1)#with_constr _x2
|
|
| WcAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
method str_item : str_item -> 'self_type =
|
|
function
|
|
| StNil _x0 -> o#_Loc_t _x0
|
|
| StCls (_x0, _x1) -> (o#_Loc_t _x0)#class_expr _x1
|
|
| StClt (_x0, _x1) -> (o#_Loc_t _x0)#class_type _x1
|
|
| StSem (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#str_item _x1)#str_item _x2
|
|
| StDir (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#string _x1)#expr _x2
|
|
| StExc (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#ctyp _x1)#meta_option
|
|
(fun o -> o#ident) _x2
|
|
| StExp (_x0, _x1) -> (o#_Loc_t _x0)#expr _x1
|
|
| StExt (_x0, _x1, _x2, _x3) ->
|
|
(((o#_Loc_t _x0)#string _x1)#ctyp _x2)#meta_list
|
|
(fun o -> o#string) _x3
|
|
| StInc (_x0, _x1) -> (o#_Loc_t _x0)#module_expr _x1
|
|
| StMod (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#string _x1)#module_expr _x2
|
|
| StRecMod (_x0, _x1) -> (o#_Loc_t _x0)#module_binding _x1
|
|
| StMty (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#string _x1)#module_type _x2
|
|
| StOpn (_x0, _x1) -> (o#_Loc_t _x0)#ident _x1
|
|
| StTyp (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
|
|
| StVal (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#meta_bool _x1)#binding _x2
|
|
| StAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
method sig_item : sig_item -> 'self_type =
|
|
function
|
|
| SgNil _x0 -> o#_Loc_t _x0
|
|
| SgCls (_x0, _x1) -> (o#_Loc_t _x0)#class_type _x1
|
|
| SgClt (_x0, _x1) -> (o#_Loc_t _x0)#class_type _x1
|
|
| SgSem (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#sig_item _x1)#sig_item _x2
|
|
| SgDir (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#string _x1)#expr _x2
|
|
| SgExc (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
|
|
| SgExt (_x0, _x1, _x2, _x3) ->
|
|
(((o#_Loc_t _x0)#string _x1)#ctyp _x2)#meta_list
|
|
(fun o -> o#string) _x3
|
|
| SgInc (_x0, _x1) -> (o#_Loc_t _x0)#module_type _x1
|
|
| SgMod (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#string _x1)#module_type _x2
|
|
| SgRecMod (_x0, _x1) -> (o#_Loc_t _x0)#module_binding _x1
|
|
| SgMty (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#string _x1)#module_type _x2
|
|
| SgOpn (_x0, _x1) -> (o#_Loc_t _x0)#ident _x1
|
|
| SgTyp (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
|
|
| SgVal (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#string _x1)#ctyp _x2
|
|
| SgAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
method rec_binding : rec_binding -> 'self_type =
|
|
function
|
|
| RbNil _x0 -> o#_Loc_t _x0
|
|
| RbSem (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#rec_binding _x1)#rec_binding _x2
|
|
| RbEq (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#ident _x1)#expr _x2
|
|
| RbAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
method patt : patt -> 'self_type =
|
|
function
|
|
| PaNil _x0 -> o#_Loc_t _x0
|
|
| PaId (_x0, _x1) -> (o#_Loc_t _x0)#ident _x1
|
|
| PaAli (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#patt _x1)#patt _x2
|
|
| PaAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
| PaAny _x0 -> o#_Loc_t _x0
|
|
| PaApp (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#patt _x1)#patt _x2
|
|
| PaArr (_x0, _x1) -> (o#_Loc_t _x0)#patt _x1
|
|
| PaCom (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#patt _x1)#patt _x2
|
|
| PaSem (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#patt _x1)#patt _x2
|
|
| PaChr (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
| PaInt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
| PaInt32 (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
| PaInt64 (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
| PaNativeInt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
| PaFlo (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
| PaLab (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#string _x1)#patt _x2
|
|
| PaOlb (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#string _x1)#patt _x2
|
|
| PaOlbi (_x0, _x1, _x2, _x3) ->
|
|
(((o#_Loc_t _x0)#string _x1)#patt _x2)#expr _x3
|
|
| PaOrp (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#patt _x1)#patt _x2
|
|
| PaRng (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#patt _x1)#patt _x2
|
|
| PaRec (_x0, _x1) -> (o#_Loc_t _x0)#patt _x1
|
|
| PaEq (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#ident _x1)#patt _x2
|
|
| PaStr (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
| PaTup (_x0, _x1) -> (o#_Loc_t _x0)#patt _x1
|
|
| PaTyc (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#patt _x1)#ctyp _x2
|
|
| PaTyp (_x0, _x1) -> (o#_Loc_t _x0)#ident _x1
|
|
| PaVrn (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
method module_type : module_type -> 'self_type =
|
|
function
|
|
| MtNil _x0 -> o#_Loc_t _x0
|
|
| MtId (_x0, _x1) -> (o#_Loc_t _x0)#ident _x1
|
|
| MtFun (_x0, _x1, _x2, _x3) ->
|
|
(((o#_Loc_t _x0)#string _x1)#module_type _x2)#
|
|
module_type _x3
|
|
| MtQuo (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
| MtSig (_x0, _x1) -> (o#_Loc_t _x0)#sig_item _x1
|
|
| MtWit (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#module_type _x1)#with_constr _x2
|
|
| MtAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
method module_expr : module_expr -> 'self_type =
|
|
function
|
|
| MeNil _x0 -> o#_Loc_t _x0
|
|
| MeId (_x0, _x1) -> (o#_Loc_t _x0)#ident _x1
|
|
| MeApp (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#module_expr _x1)#module_expr _x2
|
|
| MeFun (_x0, _x1, _x2, _x3) ->
|
|
(((o#_Loc_t _x0)#string _x1)#module_type _x2)#
|
|
module_expr _x3
|
|
| MeStr (_x0, _x1) -> (o#_Loc_t _x0)#str_item _x1
|
|
| MeTyc (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#module_expr _x1)#module_type _x2
|
|
| MeAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
method module_binding : module_binding -> 'self_type =
|
|
function
|
|
| MbNil _x0 -> o#_Loc_t _x0
|
|
| MbAnd (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#module_binding _x1)#module_binding _x2
|
|
| MbColEq (_x0, _x1, _x2, _x3) ->
|
|
(((o#_Loc_t _x0)#string _x1)#module_type _x2)#
|
|
module_expr _x3
|
|
| MbCol (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#string _x1)#module_type _x2
|
|
| MbAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
method meta_option :
|
|
'a.
|
|
('self_type -> 'a -> 'self_type) ->
|
|
'a meta_option -> 'self_type =
|
|
fun _f_a ->
|
|
function
|
|
| ONone -> o
|
|
| OSome _x0 -> _f_a o _x0
|
|
| OAnt _x0 -> o#string _x0
|
|
method meta_list :
|
|
'a.
|
|
('self_type -> 'a -> 'self_type) ->
|
|
'a meta_list -> 'self_type =
|
|
fun _f_a ->
|
|
function
|
|
| LNil -> o
|
|
| LCons (_x0, _x1) ->
|
|
(_f_a o _x0)#meta_list (fun o -> _f_a o) _x1
|
|
| LAnt _x0 -> o#string _x0
|
|
method meta_bool : meta_bool -> 'self_type =
|
|
function
|
|
| BTrue -> o
|
|
| BFalse -> o
|
|
| BAnt _x0 -> o#string _x0
|
|
method match_case : match_case -> 'self_type =
|
|
function
|
|
| McNil _x0 -> o#_Loc_t _x0
|
|
| McOr (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#match_case _x1)#match_case _x2
|
|
| McArr (_x0, _x1, _x2, _x3) ->
|
|
(((o#_Loc_t _x0)#patt _x1)#expr _x2)#expr _x3
|
|
| McAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
method ident : ident -> 'self_type =
|
|
function
|
|
| IdAcc (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#ident _x1)#ident _x2
|
|
| IdApp (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#ident _x1)#ident _x2
|
|
| IdLid (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
| IdUid (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
| IdAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
method expr : expr -> 'self_type =
|
|
function
|
|
| ExNil _x0 -> o#_Loc_t _x0
|
|
| ExId (_x0, _x1) -> (o#_Loc_t _x0)#ident _x1
|
|
| ExAcc (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#expr _x1)#expr _x2
|
|
| ExAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
| ExApp (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#expr _x1)#expr _x2
|
|
| ExAre (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#expr _x1)#expr _x2
|
|
| ExArr (_x0, _x1) -> (o#_Loc_t _x0)#expr _x1
|
|
| ExSem (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#expr _x1)#expr _x2
|
|
| ExAsf _x0 -> o#_Loc_t _x0
|
|
| ExAsr (_x0, _x1) -> (o#_Loc_t _x0)#expr _x1
|
|
| ExAss (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#expr _x1)#expr _x2
|
|
| ExChr (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
| ExCoe (_x0, _x1, _x2, _x3) ->
|
|
(((o#_Loc_t _x0)#expr _x1)#ctyp _x2)#ctyp _x3
|
|
| ExFlo (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
| ExFor (_x0, _x1, _x2, _x3, _x4, _x5) ->
|
|
(((((o#_Loc_t _x0)#string _x1)#expr _x2)#expr _x3)#
|
|
meta_bool _x4)#
|
|
expr _x5
|
|
| ExFun (_x0, _x1) -> (o#_Loc_t _x0)#match_case _x1
|
|
| ExIfe (_x0, _x1, _x2, _x3) ->
|
|
(((o#_Loc_t _x0)#expr _x1)#expr _x2)#expr _x3
|
|
| ExInt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
| ExInt32 (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
| ExInt64 (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
| ExNativeInt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
| ExLab (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#string _x1)#expr _x2
|
|
| ExLaz (_x0, _x1) -> (o#_Loc_t _x0)#expr _x1
|
|
| ExLet (_x0, _x1, _x2, _x3) ->
|
|
(((o#_Loc_t _x0)#meta_bool _x1)#binding _x2)#expr _x3
|
|
| ExLmd (_x0, _x1, _x2, _x3) ->
|
|
(((o#_Loc_t _x0)#string _x1)#module_expr _x2)#expr _x3
|
|
| ExMat (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#expr _x1)#match_case _x2
|
|
| ExNew (_x0, _x1) -> (o#_Loc_t _x0)#ident _x1
|
|
| ExObj (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#patt _x1)#class_str_item _x2
|
|
| ExOlb (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#string _x1)#expr _x2
|
|
| ExOvr (_x0, _x1) -> (o#_Loc_t _x0)#rec_binding _x1
|
|
| ExRec (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#rec_binding _x1)#expr _x2
|
|
| ExSeq (_x0, _x1) -> (o#_Loc_t _x0)#expr _x1
|
|
| ExSnd (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#expr _x1)#string _x2
|
|
| ExSte (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#expr _x1)#expr _x2
|
|
| ExStr (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
| ExTry (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#expr _x1)#match_case _x2
|
|
| ExTup (_x0, _x1) -> (o#_Loc_t _x0)#expr _x1
|
|
| ExCom (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#expr _x1)#expr _x2
|
|
| ExTyc (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#expr _x1)#ctyp _x2
|
|
| ExVrn (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
| ExWhi (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#expr _x1)#expr _x2
|
|
method ctyp : ctyp -> 'self_type =
|
|
function
|
|
| TyNil _x0 -> o#_Loc_t _x0
|
|
| TyAli (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
|
|
| TyAny _x0 -> o#_Loc_t _x0
|
|
| TyApp (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
|
|
| TyArr (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
|
|
| TyCls (_x0, _x1) -> (o#_Loc_t _x0)#ident _x1
|
|
| TyLab (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#string _x1)#ctyp _x2
|
|
| TyId (_x0, _x1) -> (o#_Loc_t _x0)#ident _x1
|
|
| TyMan (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
|
|
| TyDcl (_x0, _x1, _x2, _x3, _x4) ->
|
|
((((o#_Loc_t _x0)#string _x1)#list (fun o -> o#ctyp)
|
|
_x2)#
|
|
ctyp _x3)#
|
|
list (fun o (_x0, _x1) -> (o#ctyp _x0)#ctyp _x1) _x4
|
|
| TyObj (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#ctyp _x1)#meta_bool _x2
|
|
| TyOlb (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#string _x1)#ctyp _x2
|
|
| TyPol (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
|
|
| TyQuo (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
| TyQuP (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
| TyQuM (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
| TyVrn (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
| TyRec (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
|
|
| TyCol (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
|
|
| TySem (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
|
|
| TyCom (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
|
|
| TySum (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
|
|
| TyOf (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
|
|
| TyAnd (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
|
|
| TyOr (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
|
|
| TyPrv (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
|
|
| TyMut (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
|
|
| TyTup (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
|
|
| TySta (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
|
|
| TyVrnEq (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
|
|
| TyVrnSup (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
|
|
| TyVrnInf (_x0, _x1) -> (o#_Loc_t _x0)#ctyp _x1
|
|
| TyVrnInfSup (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
|
|
| TyAmp (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
|
|
| TyOfAmp (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
|
|
| TyAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
method class_type : class_type -> 'self_type =
|
|
function
|
|
| CtNil _x0 -> o#_Loc_t _x0
|
|
| CtCon (_x0, _x1, _x2, _x3) ->
|
|
(((o#_Loc_t _x0)#meta_bool _x1)#ident _x2)#ctyp _x3
|
|
| CtFun (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#ctyp _x1)#class_type _x2
|
|
| CtSig (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#ctyp _x1)#class_sig_item _x2
|
|
| CtAnd (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#class_type _x1)#class_type _x2
|
|
| CtCol (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#class_type _x1)#class_type _x2
|
|
| CtEq (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#class_type _x1)#class_type _x2
|
|
| CtAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
method class_str_item : class_str_item -> 'self_type =
|
|
function
|
|
| CrNil _x0 -> o#_Loc_t _x0
|
|
| CrSem (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#class_str_item _x1)#class_str_item _x2
|
|
| CrCtr (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
|
|
| CrInh (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#class_expr _x1)#string _x2
|
|
| CrIni (_x0, _x1) -> (o#_Loc_t _x0)#expr _x1
|
|
| CrMth (_x0, _x1, _x2, _x3, _x4) ->
|
|
((((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#expr _x3)#
|
|
ctyp _x4
|
|
| CrVal (_x0, _x1, _x2, _x3) ->
|
|
(((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#expr _x3
|
|
| CrVir (_x0, _x1, _x2, _x3) ->
|
|
(((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#ctyp _x3
|
|
| CrVvr (_x0, _x1, _x2, _x3) ->
|
|
(((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#ctyp _x3
|
|
| CrAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
method class_sig_item : class_sig_item -> 'self_type =
|
|
function
|
|
| CgNil _x0 -> o#_Loc_t _x0
|
|
| CgCtr (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#ctyp _x1)#ctyp _x2
|
|
| CgSem (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#class_sig_item _x1)#class_sig_item _x2
|
|
| CgInh (_x0, _x1) -> (o#_Loc_t _x0)#class_type _x1
|
|
| CgMth (_x0, _x1, _x2, _x3) ->
|
|
(((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#ctyp _x3
|
|
| CgVal (_x0, _x1, _x2, _x3, _x4) ->
|
|
((((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#meta_bool
|
|
_x3)#
|
|
ctyp _x4
|
|
| CgVir (_x0, _x1, _x2, _x3) ->
|
|
(((o#_Loc_t _x0)#string _x1)#meta_bool _x2)#ctyp _x3
|
|
| CgAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
method class_expr : class_expr -> 'self_type =
|
|
function
|
|
| CeNil _x0 -> o#_Loc_t _x0
|
|
| CeApp (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#class_expr _x1)#expr _x2
|
|
| CeCon (_x0, _x1, _x2, _x3) ->
|
|
(((o#_Loc_t _x0)#meta_bool _x1)#ident _x2)#ctyp _x3
|
|
| CeFun (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#patt _x1)#class_expr _x2
|
|
| CeLet (_x0, _x1, _x2, _x3) ->
|
|
(((o#_Loc_t _x0)#meta_bool _x1)#binding _x2)#class_expr
|
|
_x3
|
|
| CeStr (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#patt _x1)#class_str_item _x2
|
|
| CeTyc (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#class_expr _x1)#class_type _x2
|
|
| CeAnd (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#class_expr _x1)#class_expr _x2
|
|
| CeEq (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#class_expr _x1)#class_expr _x2
|
|
| CeAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
method binding : binding -> 'self_type =
|
|
function
|
|
| BiNil _x0 -> o#_Loc_t _x0
|
|
| BiAnd (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#binding _x1)#binding _x2
|
|
| BiEq (_x0, _x1, _x2) ->
|
|
((o#_Loc_t _x0)#patt _x1)#expr _x2
|
|
| BiAnt (_x0, _x1) -> (o#_Loc_t _x0)#string _x1
|
|
end
|
|
let map_expr f =
|
|
object
|
|
inherit map as super
|
|
method expr = fun x -> f (super#expr x)
|
|
end
|
|
let map_patt f =
|
|
object
|
|
inherit map as super
|
|
method patt = fun x -> f (super#patt x)
|
|
end
|
|
let map_ctyp f =
|
|
object
|
|
inherit map as super
|
|
method ctyp = fun x -> f (super#ctyp x)
|
|
end
|
|
let map_str_item f =
|
|
object
|
|
inherit map as super
|
|
method str_item = fun x -> f (super#str_item x)
|
|
end
|
|
let map_sig_item f =
|
|
object
|
|
inherit map as super
|
|
method sig_item = fun x -> f (super#sig_item x)
|
|
end
|
|
let map_loc f =
|
|
object
|
|
inherit map as super
|
|
method _Loc_t = fun x -> f (super#_Loc_t x)
|
|
end
|
|
end
|
|
end
|
|
module DynAst =
|
|
struct
|
|
module Make (Ast : Sig.Ast) : Sig.DynAst with module Ast = Ast =
|
|
struct
|
|
module Ast = Ast
|
|
type 'a tag =
|
|
| Tag_ctyp | Tag_patt | Tag_expr | Tag_module_type
|
|
| Tag_sig_item | Tag_with_constr | Tag_module_expr
|
|
| Tag_str_item | Tag_class_type | Tag_class_sig_item
|
|
| Tag_class_expr | Tag_class_str_item | Tag_match_case
|
|
| Tag_ident | Tag_binding | Tag_rec_binding
|
|
| Tag_module_binding
|
|
let string_of_tag =
|
|
function
|
|
| Tag_ctyp -> "ctyp"
|
|
| Tag_patt -> "patt"
|
|
| Tag_expr -> "expr"
|
|
| Tag_module_type -> "module_type"
|
|
| Tag_sig_item -> "sig_item"
|
|
| Tag_with_constr -> "with_constr"
|
|
| Tag_module_expr -> "module_expr"
|
|
| Tag_str_item -> "str_item"
|
|
| Tag_class_type -> "class_type"
|
|
| Tag_class_sig_item -> "class_sig_item"
|
|
| Tag_class_expr -> "class_expr"
|
|
| Tag_class_str_item -> "class_str_item"
|
|
| Tag_match_case -> "match_case"
|
|
| Tag_ident -> "ident"
|
|
| Tag_binding -> "binding"
|
|
| Tag_rec_binding -> "rec_binding"
|
|
| Tag_module_binding -> "module_binding"
|
|
let ctyp_tag = Tag_ctyp
|
|
let patt_tag = Tag_patt
|
|
let expr_tag = Tag_expr
|
|
let module_type_tag = Tag_module_type
|
|
let sig_item_tag = Tag_sig_item
|
|
let with_constr_tag = Tag_with_constr
|
|
let module_expr_tag = Tag_module_expr
|
|
let str_item_tag = Tag_str_item
|
|
let class_type_tag = Tag_class_type
|
|
let class_sig_item_tag = Tag_class_sig_item
|
|
let class_expr_tag = Tag_class_expr
|
|
let class_str_item_tag = Tag_class_str_item
|
|
let match_case_tag = Tag_match_case
|
|
let ident_tag = Tag_ident
|
|
let binding_tag = Tag_binding
|
|
let rec_binding_tag = Tag_rec_binding
|
|
let module_binding_tag = Tag_module_binding
|
|
type dyn
|
|
external dyn_tag : 'a tag -> dyn tag = "%identity"
|
|
module Pack (X : sig type 'a t end) =
|
|
struct
|
|
type pack = ((dyn tag) * Obj.t)
|
|
exception Pack_error
|
|
let pack tag v = ((dyn_tag tag), (Obj.repr v))
|
|
let unpack (tag : 'a tag) (tag', obj) =
|
|
if (dyn_tag tag) = tag'
|
|
then (Obj.obj obj : 'a X.t)
|
|
else raise Pack_error
|
|
let print_tag f (tag, _) =
|
|
Format.pp_print_string f (string_of_tag tag)
|
|
end
|
|
end
|
|
end
|
|
module Quotation =
|
|
struct
|
|
module Make (Ast : Sig.Ast) : Sig.Quotation with module Ast = Ast =
|
|
struct
|
|
module Ast = Ast
|
|
module DynAst = DynAst.Make(Ast)
|
|
module Loc = Ast.Loc
|
|
open Format
|
|
open Sig
|
|
type 'a expand_fun = Loc.t -> string option -> string -> 'a
|
|
module Exp_key = DynAst.Pack(struct type 'a t = unit end)
|
|
module Exp_fun =
|
|
DynAst.Pack(struct type 'a t = 'a expand_fun end)
|
|
let expanders_table :
|
|
(((string * Exp_key.pack) * Exp_fun.pack) list) ref = ref []
|
|
let default = ref ""
|
|
let translate = ref (fun x -> x)
|
|
let expander_name name =
|
|
match !translate name with | "" -> !default | name -> name
|
|
let find name tag =
|
|
let key = ((expander_name name), (Exp_key.pack tag ()))
|
|
in Exp_fun.unpack tag (List.assoc key !expanders_table)
|
|
let add name tag f =
|
|
let elt = ((name, (Exp_key.pack tag ())), (Exp_fun.pack tag f))
|
|
in expanders_table := elt :: !expanders_table
|
|
let dump_file = ref None
|
|
module Error =
|
|
struct
|
|
type error =
|
|
| Finding | Expanding | ParsingResult of Loc.t * string
|
|
| Locating
|
|
type t = (string * string * error * exn)
|
|
exception E of t
|
|
let print ppf (name, position, ctx, exn) =
|
|
let name = if name = "" then !default else name in
|
|
let pp x =
|
|
fprintf ppf "@?@[<2>While %s %S in a position of %S:" x
|
|
name position in
|
|
let () =
|
|
match ctx with
|
|
| Finding ->
|
|
(pp "finding quotation";
|
|
fprintf ppf "@ @[<hv2>Available quotations are:@\n";
|
|
List.iter
|
|
(fun ((s, t), _) ->
|
|
fprintf ppf
|
|
"@[<2>%s@ (in@ a@ position@ of %a)@]@ " s
|
|
Exp_key.print_tag t)
|
|
!expanders_table;
|
|
fprintf ppf "@]")
|
|
| Expanding -> pp "expanding quotation"
|
|
| Locating -> pp "parsing"
|
|
| ParsingResult (loc, str) ->
|
|
let () = pp "parsing result of quotation"
|
|
in
|
|
(match !dump_file with
|
|
| Some dump_file ->
|
|
let () = fprintf ppf " dumping result...\n"
|
|
in
|
|
(try
|
|
let oc = open_out_bin dump_file
|
|
in
|
|
(output_string oc str;
|
|
output_string oc "\n";
|
|
flush oc;
|
|
close_out oc;
|
|
fprintf ppf "%a:" Loc.print
|
|
(Loc.set_file_name dump_file loc))
|
|
with
|
|
| _ ->
|
|
fprintf ppf
|
|
"Error while dumping result in file %S; dump aborted"
|
|
dump_file)
|
|
| None ->
|
|
fprintf ppf
|
|
"\n(consider setting variable Quotation.dump_file, or using the -QD option)")
|
|
in fprintf ppf "@\n%a@]@." ErrorHandler.print exn
|
|
let to_string x =
|
|
let b = Buffer.create 50 in
|
|
let () = bprintf b "%a" print x in Buffer.contents b
|
|
end
|
|
let _ = let module M = ErrorHandler.Register(Error) in ()
|
|
open Error
|
|
let expand_quotation loc expander pos_tag quot =
|
|
let loc_name_opt =
|
|
if quot.q_loc = "" then None else Some quot.q_loc
|
|
in
|
|
try expander loc loc_name_opt quot.q_contents
|
|
with | (Loc.Exc_located (_, (Error.E _)) as exc) -> raise exc
|
|
| Loc.Exc_located (iloc, exc) ->
|
|
let exc1 =
|
|
Error.E (((quot.q_name), pos_tag, Expanding, exc))
|
|
in raise (Loc.Exc_located (iloc, exc1))
|
|
| exc ->
|
|
let exc1 =
|
|
Error.E (((quot.q_name), pos_tag, Expanding, exc))
|
|
in raise (Loc.Exc_located (loc, exc1))
|
|
let parse_quotation_result parse loc quot pos_tag str =
|
|
try parse loc str
|
|
with
|
|
| Loc.Exc_located (iloc,
|
|
(Error.E ((n, pos_tag, Expanding, exc)))) ->
|
|
let ctx = ParsingResult (iloc, quot.q_contents) in
|
|
let exc1 = Error.E ((n, pos_tag, ctx, exc))
|
|
in raise (Loc.Exc_located (iloc, exc1))
|
|
| Loc.Exc_located (iloc, ((Error.E _ as exc))) ->
|
|
raise (Loc.Exc_located (iloc, exc))
|
|
| Loc.Exc_located (iloc, exc) ->
|
|
let ctx = ParsingResult (iloc, quot.q_contents) in
|
|
let exc1 = Error.E (((quot.q_name), pos_tag, ctx, exc))
|
|
in raise (Loc.Exc_located (iloc, exc1))
|
|
let expand loc quotation tag =
|
|
let pos_tag = DynAst.string_of_tag tag in
|
|
let name = quotation.q_name in
|
|
let expander =
|
|
try find name tag
|
|
with | (Loc.Exc_located (_, (Error.E _)) as exc) -> raise exc
|
|
| Loc.Exc_located (qloc, exc) ->
|
|
raise
|
|
(Loc.Exc_located (qloc,
|
|
Error.E ((name, pos_tag, Finding, exc))))
|
|
| exc ->
|
|
raise
|
|
(Loc.Exc_located (loc,
|
|
Error.E ((name, pos_tag, Finding, exc)))) in
|
|
let loc = Loc.join (Loc.move `start quotation.q_shift loc)
|
|
in expand_quotation loc expander pos_tag quotation
|
|
end
|
|
end
|
|
module AstFilters =
|
|
struct
|
|
module Make (Ast : Sig.Camlp4Ast) :
|
|
Sig.AstFilters with module Ast = Ast =
|
|
struct
|
|
module Ast = Ast
|
|
type 'a filter = 'a -> 'a
|
|
let interf_filters = Queue.create ()
|
|
let fold_interf_filters f i = Queue.fold f i interf_filters
|
|
let implem_filters = Queue.create ()
|
|
let fold_implem_filters f i = Queue.fold f i implem_filters
|
|
let register_sig_item_filter f = Queue.add f interf_filters
|
|
let register_str_item_filter f = Queue.add f implem_filters
|
|
end
|
|
end
|
|
module Camlp4Ast2OCamlAst :
|
|
sig
|
|
module Make (Camlp4Ast : Sig.Camlp4Ast) :
|
|
sig
|
|
open Camlp4Ast
|
|
val sig_item : sig_item -> Parsetree.signature
|
|
val str_item : str_item -> Parsetree.structure
|
|
val phrase : str_item -> Parsetree.toplevel_phrase
|
|
end
|
|
end =
|
|
struct
|
|
module Make (Ast : Sig.Camlp4Ast) =
|
|
struct
|
|
open Format
|
|
open Parsetree
|
|
open Longident
|
|
open Asttypes
|
|
open Ast
|
|
let constructors_arity () = !Camlp4_config.constructors_arity
|
|
let error loc str = Loc.raise loc (Failure str)
|
|
let char_of_char_token loc s =
|
|
try Token.Eval.char s
|
|
with | (Failure _ as exn) -> Loc.raise loc exn
|
|
let string_of_string_token loc s =
|
|
try Token.Eval.string s
|
|
with | (Failure _ as exn) -> Loc.raise loc exn
|
|
let remove_underscores s =
|
|
let l = String.length s in
|
|
let rec remove src dst =
|
|
if src >= l
|
|
then if dst >= l then s else String.sub s 0 dst
|
|
else
|
|
(match s.[src] with
|
|
| '_' -> remove (src + 1) dst
|
|
| c -> (s.[dst] <- c; remove (src + 1) (dst + 1)))
|
|
in remove 0 0
|
|
let mkloc = Loc.to_ocaml_location
|
|
let mkghloc loc = Loc.to_ocaml_location (Loc.ghostify loc)
|
|
let mktyp loc d = { ptyp_desc = d; ptyp_loc = mkloc loc; }
|
|
let mkpat loc d = { ppat_desc = d; ppat_loc = mkloc loc; }
|
|
let mkghpat loc d = { ppat_desc = d; ppat_loc = mkghloc loc; }
|
|
let mkexp loc d = { pexp_desc = d; pexp_loc = mkloc loc; }
|
|
let mkmty loc d = { pmty_desc = d; pmty_loc = mkloc loc; }
|
|
let mksig loc d = { psig_desc = d; psig_loc = mkloc loc; }
|
|
let mkmod loc d = { pmod_desc = d; pmod_loc = mkloc loc; }
|
|
let mkstr loc d = { pstr_desc = d; pstr_loc = mkloc loc; }
|
|
let mkfield loc d = { pfield_desc = d; pfield_loc = mkloc loc; }
|
|
let mkcty loc d = { pcty_desc = d; pcty_loc = mkloc loc; }
|
|
let mkpcl loc d = { pcl_desc = d; pcl_loc = mkloc loc; }
|
|
let mkpolytype t =
|
|
match t.ptyp_desc with
|
|
| Ptyp_poly (_, _) -> t
|
|
| _ -> { (t) with ptyp_desc = Ptyp_poly ([], t); }
|
|
let mb2b =
|
|
function
|
|
| Ast.BTrue -> true
|
|
| Ast.BFalse -> false
|
|
| Ast.BAnt _ -> assert false
|
|
let mkvirtual m = if mb2b m then Virtual else Concrete
|
|
let lident s = Lident s
|
|
let ldot l s = Ldot (l, s)
|
|
let lapply l s = Lapply (l, s)
|
|
let conv_con =
|
|
let t = Hashtbl.create 73
|
|
in
|
|
(List.iter (fun (s, s') -> Hashtbl.add t s s')
|
|
[ ("True", "true"); ("False", "false"); (" True", "True");
|
|
(" False", "False") ];
|
|
fun s -> try Hashtbl.find t s with | Not_found -> s)
|
|
let conv_lab =
|
|
let t = Hashtbl.create 73
|
|
in
|
|
(List.iter (fun (s, s') -> Hashtbl.add t s s')
|
|
[ ("val", "contents") ];
|
|
fun s -> try Hashtbl.find t s with | Not_found -> s)
|
|
let array_function str name =
|
|
ldot (lident str)
|
|
(if !Camlp4_config.unsafe then "unsafe_" ^ name else name)
|
|
let mkrf =
|
|
function
|
|
| Ast.BTrue -> Recursive
|
|
| Ast.BFalse -> Nonrecursive
|
|
| Ast.BAnt _ -> assert false
|
|
let mkli s =
|
|
let rec loop f =
|
|
function
|
|
| i :: il -> loop (fun s -> ldot (f i) s) il
|
|
| [] -> f s
|
|
in loop (fun s -> lident s)
|
|
let rec ctyp_fa al =
|
|
function
|
|
| TyApp (_, f, a) -> ctyp_fa (a :: al) f
|
|
| f -> (f, al)
|
|
let ident_tag ?(conv_lid = fun x -> x) i =
|
|
let rec self i acc =
|
|
match i with
|
|
| Ast.IdAcc (_, i1, i2) -> self i2 (Some (self i1 acc))
|
|
| Ast.IdApp (_, i1, i2) ->
|
|
let i' =
|
|
Lapply (fst (self i1 None), fst (self i2 None)) in
|
|
let x =
|
|
(match acc with
|
|
| None -> i'
|
|
| _ ->
|
|
error (loc_of_ident i) "invalid long identifier")
|
|
in (x, `app)
|
|
| Ast.IdUid (_, s) ->
|
|
let x =
|
|
(match acc with
|
|
| None -> lident s
|
|
| Some ((acc, (`uident | `app))) -> ldot acc s
|
|
| _ ->
|
|
error (loc_of_ident i) "invalid long identifier")
|
|
in (x, `uident)
|
|
| Ast.IdLid (_, s) ->
|
|
let x =
|
|
(match acc with
|
|
| None -> lident (conv_lid s)
|
|
| Some ((acc, (`uident | `app))) ->
|
|
ldot acc (conv_lid s)
|
|
| _ ->
|
|
error (loc_of_ident i) "invalid long identifier")
|
|
in (x, `lident)
|
|
| _ -> error (loc_of_ident i) "invalid long identifier"
|
|
in self i None
|
|
let ident ?conv_lid i = fst (ident_tag ?conv_lid i)
|
|
let long_lident msg i =
|
|
match ident_tag i with
|
|
| (i, `lident) -> i
|
|
| _ -> error (loc_of_ident i) msg
|
|
let long_type_ident = long_lident "invalid long identifier type"
|
|
let long_class_ident = long_lident "invalid class name"
|
|
let long_uident ?(conv_con = fun x -> x) i =
|
|
match ident_tag i with
|
|
| (Ldot (i, s), `uident) -> ldot i (conv_con s)
|
|
| (Lident s, `uident) -> lident (conv_con s)
|
|
| (i, `app) -> i
|
|
| _ -> error (loc_of_ident i) "uppercase identifier expected"
|
|
let rec ctyp_long_id_prefix t =
|
|
match t with
|
|
| Ast.TyId (_, i) -> ident i
|
|
| Ast.TyApp (_, m1, m2) ->
|
|
let li1 = ctyp_long_id_prefix m1 in
|
|
let li2 = ctyp_long_id_prefix m2 in Lapply (li1, li2)
|
|
| t -> error (loc_of_ctyp t) "invalid module expression"
|
|
let ctyp_long_id t =
|
|
match t with
|
|
| Ast.TyId (_, i) -> (false, (long_type_ident i))
|
|
| TyApp (loc, _, _) -> error loc "invalid type name"
|
|
| TyCls (_, i) -> (true, (ident i))
|
|
| t -> error (loc_of_ctyp t) "invalid type"
|
|
let rec ty_var_list_of_ctyp =
|
|
function
|
|
| Ast.TyApp (_, t1, t2) ->
|
|
(ty_var_list_of_ctyp t1) @ (ty_var_list_of_ctyp t2)
|
|
| Ast.TyQuo (_, s) -> [ s ]
|
|
| _ -> assert false
|
|
let rec ctyp =
|
|
function
|
|
| TyId (loc, i) ->
|
|
let li = long_type_ident i
|
|
in mktyp loc (Ptyp_constr (li, []))
|
|
| TyAli (loc, t1, t2) ->
|
|
let (t, i) =
|
|
(match (t1, t2) with
|
|
| (t, TyQuo (_, s)) -> (t, s)
|
|
| (TyQuo (_, s), t) -> (t, s)
|
|
| _ -> error loc "invalid alias type")
|
|
in mktyp loc (Ptyp_alias (ctyp t, i))
|
|
| TyAny loc -> mktyp loc Ptyp_any
|
|
| (TyApp (loc, _, _) as f) ->
|
|
let (f, al) = ctyp_fa [] f in
|
|
let (is_cls, li) = ctyp_long_id f
|
|
in
|
|
if is_cls
|
|
then mktyp loc (Ptyp_class (li, List.map ctyp al, []))
|
|
else mktyp loc (Ptyp_constr (li, List.map ctyp al))
|
|
| TyArr (loc, (TyLab (_, lab, t1)), t2) ->
|
|
mktyp loc (Ptyp_arrow (lab, ctyp t1, ctyp t2))
|
|
| TyArr (loc, (TyOlb (loc1, lab, t1)), t2) ->
|
|
let t1 =
|
|
TyApp (loc1, Ast.TyId (loc1, Ast.IdLid (loc1, "option")),
|
|
t1)
|
|
in mktyp loc (Ptyp_arrow ("?" ^ lab, ctyp t1, ctyp t2))
|
|
| TyArr (loc, t1, t2) ->
|
|
mktyp loc (Ptyp_arrow ("", ctyp t1, ctyp t2))
|
|
| Ast.TyObj (loc, (Ast.TyNil _), Ast.BFalse) ->
|
|
mktyp loc (Ptyp_object [])
|
|
| Ast.TyObj (loc, (Ast.TyNil _), Ast.BTrue) ->
|
|
mktyp loc (Ptyp_object [ mkfield loc Pfield_var ])
|
|
| Ast.TyObj (loc, fl, Ast.BFalse) ->
|
|
mktyp loc (Ptyp_object (meth_list fl []))
|
|
| Ast.TyObj (loc, fl, Ast.BTrue) ->
|
|
mktyp loc
|
|
(Ptyp_object (meth_list fl [ mkfield loc Pfield_var ]))
|
|
| TyCls (loc, id) -> mktyp loc (Ptyp_class (ident id, [], []))
|
|
| TyLab (loc, _, _) ->
|
|
error loc "labelled type not allowed here"
|
|
| TyMan (loc, _, _) ->
|
|
error loc "manifest type not allowed here"
|
|
| TyOlb (loc, _, _) ->
|
|
error loc "labelled type not allowed here"
|
|
| TyPol (loc, t1, t2) ->
|
|
mktyp loc (Ptyp_poly (ty_var_list_of_ctyp t1, ctyp t2))
|
|
| TyQuo (loc, s) -> mktyp loc (Ptyp_var s)
|
|
| TyRec (loc, _) -> error loc "record type not allowed here"
|
|
| TySum (loc, _) -> error loc "sum type not allowed here"
|
|
| TyPrv (loc, _) -> error loc "private type not allowed here"
|
|
| TyMut (loc, _) -> error loc "mutable type not allowed here"
|
|
| TyOr (loc, _, _) ->
|
|
error loc "type1 | type2 not allowed here"
|
|
| TyAnd (loc, _, _) ->
|
|
error loc "type1 and type2 not allowed here"
|
|
| TyOf (loc, _, _) ->
|
|
error loc "type1 of type2 not allowed here"
|
|
| TyCol (loc, _, _) ->
|
|
error loc "type1 : type2 not allowed here"
|
|
| TySem (loc, _, _) ->
|
|
error loc "type1 ; type2 not allowed here"
|
|
| Ast.TyTup (loc, (Ast.TySta (_, t1, t2))) ->
|
|
mktyp loc
|
|
(Ptyp_tuple
|
|
(List.map ctyp (list_of_ctyp t1 (list_of_ctyp t2 []))))
|
|
| Ast.TyVrnEq (loc, t) ->
|
|
mktyp loc (Ptyp_variant (row_field t, true, None))
|
|
| Ast.TyVrnSup (loc, t) ->
|
|
mktyp loc (Ptyp_variant (row_field t, false, None))
|
|
| Ast.TyVrnInf (loc, t) ->
|
|
mktyp loc (Ptyp_variant (row_field t, true, Some []))
|
|
| Ast.TyVrnInfSup (loc, t, t') ->
|
|
mktyp loc
|
|
(Ptyp_variant (row_field t, true, Some (name_tags t')))
|
|
| TyAnt (loc, _) -> error loc "antiquotation not allowed here"
|
|
| TyOfAmp (_, _, _) | TyAmp (_, _, _) | TySta (_, _, _) |
|
|
TyCom (_, _, _) | TyVrn (_, _) | TyQuM (_, _) |
|
|
TyQuP (_, _) | TyDcl (_, _, _, _, _) |
|
|
TyObj (_, _, (BAnt _)) | TyNil _ | TyTup (_, _) ->
|
|
assert false
|
|
and row_field =
|
|
function
|
|
| Ast.TyVrn (_, i) -> [ Rtag (i, true, []) ]
|
|
| Ast.TyOfAmp (_, (Ast.TyVrn (_, i)), t) ->
|
|
[ Rtag (i, true, List.map ctyp (list_of_ctyp t [])) ]
|
|
| Ast.TyOf (_, (Ast.TyVrn (_, i)), t) ->
|
|
[ Rtag (i, false, List.map ctyp (list_of_ctyp t [])) ]
|
|
| Ast.TyOr (_, t1, t2) -> (row_field t1) @ (row_field t2)
|
|
| t -> [ Rinherit (ctyp t) ]
|
|
and name_tags =
|
|
function
|
|
| Ast.TyApp (_, t1, t2) -> (name_tags t1) @ (name_tags t2)
|
|
| Ast.TyVrn (_, s) -> [ s ]
|
|
| _ -> assert false
|
|
and meth_list fl acc =
|
|
match fl with
|
|
| Ast.TySem (_, t1, t2) -> meth_list t1 (meth_list t2 acc)
|
|
| Ast.TyCol (loc, (Ast.TyId (_, (Ast.IdLid (_, lab)))), t) ->
|
|
(mkfield loc (Pfield (lab, mkpolytype (ctyp t)))) :: acc
|
|
| _ -> assert false
|
|
let mktype loc tl cl tk tp tm =
|
|
let (params, variance) = List.split tl
|
|
in
|
|
{
|
|
ptype_params = params;
|
|
ptype_cstrs = cl;
|
|
ptype_kind = tk;
|
|
ptype_private = tp;
|
|
ptype_manifest = tm;
|
|
ptype_loc = mkloc loc;
|
|
ptype_variance = variance;
|
|
}
|
|
let mkprivate' m = if m then Private else Public
|
|
let mkprivate m = mkprivate' (mb2b m)
|
|
let mktrecord =
|
|
function
|
|
| Ast.TyCol (loc, (Ast.TyId (_, (Ast.IdLid (_, s)))),
|
|
(Ast.TyMut (_, t))) ->
|
|
(s, Mutable, (mkpolytype (ctyp t)), (mkloc loc))
|
|
| Ast.TyCol (loc, (Ast.TyId (_, (Ast.IdLid (_, s)))), t) ->
|
|
(s, Immutable, (mkpolytype (ctyp t)), (mkloc loc))
|
|
| _ -> assert false
|
|
let mkvariant =
|
|
function
|
|
| Ast.TyId (loc, (Ast.IdUid (_, s))) ->
|
|
((conv_con s), [], (mkloc loc))
|
|
| Ast.TyOf (loc, (Ast.TyId (_, (Ast.IdUid (_, s)))), t) ->
|
|
((conv_con s), (List.map ctyp (list_of_ctyp t [])),
|
|
(mkloc loc))
|
|
| _ -> assert false
|
|
let rec type_decl tl cl loc m pflag =
|
|
function
|
|
| Ast.TyMan (_, t1, t2) ->
|
|
type_decl tl cl loc (Some (ctyp t1)) pflag t2
|
|
| Ast.TyPrv (_, t) -> type_decl tl cl loc m true t
|
|
| Ast.TyRec (_, t) ->
|
|
mktype loc tl cl
|
|
(Ptype_record (List.map mktrecord (list_of_ctyp t [])))
|
|
(mkprivate' pflag)
|
|
m
|
|
| Ast.TySum (_, t) ->
|
|
mktype loc tl cl
|
|
(Ptype_variant (List.map mkvariant (list_of_ctyp t [])))
|
|
(mkprivate' pflag)
|
|
m
|
|
| t ->
|
|
if m <> None
|
|
then
|
|
error loc "only one manifest type allowed by definition"
|
|
else
|
|
(let m =
|
|
match t with
|
|
| Ast.TyNil _ -> None
|
|
| _ -> Some (ctyp t) in
|
|
let p = if pflag then Private else Public
|
|
in mktype loc tl cl Ptype_abstract p m)
|
|
let type_decl tl cl t =
|
|
type_decl tl cl (loc_of_ctyp t) None false t
|
|
let mkvalue_desc t p = { pval_type = ctyp t; pval_prim = p; }
|
|
let rec list_of_meta_list =
|
|
function
|
|
| Ast.LNil -> []
|
|
| Ast.LCons (x, xs) -> x :: (list_of_meta_list xs)
|
|
| Ast.LAnt _ -> assert false
|
|
let mkmutable m = if mb2b m then Mutable else Immutable
|
|
let paolab lab p =
|
|
match (lab, p) with
|
|
| ("",
|
|
(Ast.PaId (_, (Ast.IdLid (_, i))) |
|
|
Ast.PaTyc (_, (Ast.PaId (_, (Ast.IdLid (_, i)))), _)))
|
|
-> i
|
|
| ("", p) -> error (loc_of_patt p) "bad ast in label"
|
|
| _ -> lab
|
|
let opt_private_ctyp =
|
|
function
|
|
| Ast.TyPrv (_, t) -> (Ptype_abstract, Private, (ctyp t))
|
|
| t -> (Ptype_abstract, Public, (ctyp t))
|
|
let rec type_parameters t acc =
|
|
match t with
|
|
| Ast.TyApp (_, t1, t2) ->
|
|
type_parameters t1 (type_parameters t2 acc)
|
|
| Ast.TyQuP (_, s) -> (s, (true, false)) :: acc
|
|
| Ast.TyQuM (_, s) -> (s, (false, true)) :: acc
|
|
| Ast.TyQuo (_, s) -> (s, (false, false)) :: acc
|
|
| _ -> assert false
|
|
let rec class_parameters t acc =
|
|
match t with
|
|
| Ast.TyCom (_, t1, t2) ->
|
|
class_parameters t1 (class_parameters t2 acc)
|
|
| Ast.TyQuP (_, s) -> (s, (true, false)) :: acc
|
|
| Ast.TyQuM (_, s) -> (s, (false, true)) :: acc
|
|
| Ast.TyQuo (_, s) -> (s, (false, false)) :: acc
|
|
| _ -> assert false
|
|
let rec type_parameters_and_type_name t acc =
|
|
match t with
|
|
| Ast.TyApp (_, t1, t2) ->
|
|
type_parameters_and_type_name t1 (type_parameters t2 acc)
|
|
| Ast.TyId (_, i) -> ((ident i), acc)
|
|
| _ -> assert false
|
|
let rec mkwithc wc acc =
|
|
match wc with
|
|
| WcNil _ -> acc
|
|
| WcTyp (loc, id_tpl, ct) ->
|
|
let (id, tpl) = type_parameters_and_type_name id_tpl [] in
|
|
let (params, variance) = List.split tpl in
|
|
let (kind, priv, ct) = opt_private_ctyp ct
|
|
in
|
|
(id,
|
|
(Pwith_type
|
|
{
|
|
ptype_params = params;
|
|
ptype_cstrs = [];
|
|
ptype_kind = kind;
|
|
ptype_private = priv;
|
|
ptype_manifest = Some ct;
|
|
ptype_loc = mkloc loc;
|
|
ptype_variance = variance;
|
|
})) ::
|
|
acc
|
|
| WcMod (_, i1, i2) ->
|
|
((long_uident i1), (Pwith_module (long_uident i2))) :: acc
|
|
| Ast.WcAnd (_, wc1, wc2) -> mkwithc wc1 (mkwithc wc2 acc)
|
|
| Ast.WcAnt (loc, _) ->
|
|
error loc "bad with constraint (antiquotation)"
|
|
let rec patt_fa al =
|
|
function
|
|
| PaApp (_, f, a) -> patt_fa (a :: al) f
|
|
| f -> (f, al)
|
|
let rec deep_mkrangepat loc c1 c2 =
|
|
if c1 = c2
|
|
then mkghpat loc (Ppat_constant (Const_char c1))
|
|
else
|
|
mkghpat loc
|
|
(Ppat_or (mkghpat loc (Ppat_constant (Const_char c1)),
|
|
deep_mkrangepat loc (Char.chr ((Char.code c1) + 1)) c2))
|
|
let rec mkrangepat loc c1 c2 =
|
|
if c1 > c2
|
|
then mkrangepat loc c2 c1
|
|
else
|
|
if c1 = c2
|
|
then mkpat loc (Ppat_constant (Const_char c1))
|
|
else
|
|
mkpat loc
|
|
(Ppat_or (mkghpat loc (Ppat_constant (Const_char c1)),
|
|
deep_mkrangepat loc (Char.chr ((Char.code c1) + 1)) c2))
|
|
let rec patt =
|
|
function
|
|
| Ast.PaId (loc, (Ast.IdLid (_, s))) -> mkpat loc (Ppat_var s)
|
|
| Ast.PaId (loc, i) ->
|
|
let p =
|
|
Ppat_construct (long_uident ~conv_con i, None,
|
|
constructors_arity ())
|
|
in mkpat loc p
|
|
| PaAli (loc, p1, p2) ->
|
|
let (p, i) =
|
|
(match (p1, p2) with
|
|
| (p, Ast.PaId (_, (Ast.IdLid (_, s)))) -> (p, s)
|
|
| (Ast.PaId (_, (Ast.IdLid (_, s))), p) -> (p, s)
|
|
| _ -> error loc "invalid alias pattern")
|
|
in mkpat loc (Ppat_alias (patt p, i))
|
|
| PaAnt (loc, _) -> error loc "antiquotation not allowed here"
|
|
| PaAny loc -> mkpat loc Ppat_any
|
|
| Ast.PaApp (loc, (Ast.PaId (_, (Ast.IdUid (_, s)))),
|
|
(Ast.PaTup (_, (Ast.PaAny loc_any)))) ->
|
|
mkpat loc
|
|
(Ppat_construct (lident (conv_con s),
|
|
Some (mkpat loc_any Ppat_any), false))
|
|
| (PaApp (loc, _, _) as f) ->
|
|
let (f, al) = patt_fa [] f in
|
|
let al = List.map patt al
|
|
in
|
|
(match (patt f).ppat_desc with
|
|
| Ppat_construct (li, None, _) ->
|
|
if constructors_arity ()
|
|
then
|
|
mkpat loc
|
|
(Ppat_construct (li,
|
|
Some (mkpat loc (Ppat_tuple al)), true))
|
|
else
|
|
(let a =
|
|
match al with
|
|
| [ a ] -> a
|
|
| _ -> mkpat loc (Ppat_tuple al)
|
|
in mkpat loc (Ppat_construct (li, Some a, false)))
|
|
| Ppat_variant (s, None) ->
|
|
let a =
|
|
if constructors_arity ()
|
|
then mkpat loc (Ppat_tuple al)
|
|
else
|
|
(match al with
|
|
| [ a ] -> a
|
|
| _ -> mkpat loc (Ppat_tuple al))
|
|
in mkpat loc (Ppat_variant (s, Some a))
|
|
| _ ->
|
|
error (loc_of_patt f)
|
|
"this is not a constructor, it cannot be applied in a pattern")
|
|
| PaArr (loc, p) ->
|
|
mkpat loc (Ppat_array (List.map patt (list_of_patt p [])))
|
|
| PaChr (loc, s) ->
|
|
mkpat loc
|
|
(Ppat_constant (Const_char (char_of_char_token loc s)))
|
|
| PaInt (loc, s) ->
|
|
let i =
|
|
(try int_of_string s
|
|
with
|
|
| Failure _ ->
|
|
error loc
|
|
"Integer literal exceeds the range of representable integers of type int")
|
|
in mkpat loc (Ppat_constant (Const_int i))
|
|
| PaInt32 (loc, s) ->
|
|
let i32 =
|
|
(try Int32.of_string s
|
|
with
|
|
| Failure _ ->
|
|
error loc
|
|
"Integer literal exceeds the range of representable integers of type int32")
|
|
in mkpat loc (Ppat_constant (Const_int32 i32))
|
|
| PaInt64 (loc, s) ->
|
|
let i64 =
|
|
(try Int64.of_string s
|
|
with
|
|
| Failure _ ->
|
|
error loc
|
|
"Integer literal exceeds the range of representable integers of type int64")
|
|
in mkpat loc (Ppat_constant (Const_int64 i64))
|
|
| PaNativeInt (loc, s) ->
|
|
let nati =
|
|
(try Nativeint.of_string s
|
|
with
|
|
| Failure _ ->
|
|
error loc
|
|
"Integer literal exceeds the range of representable integers of type nativeint")
|
|
in mkpat loc (Ppat_constant (Const_nativeint nati))
|
|
| PaFlo (loc, s) ->
|
|
mkpat loc
|
|
(Ppat_constant (Const_float (remove_underscores s)))
|
|
| PaLab (loc, _, _) ->
|
|
error loc "labeled pattern not allowed here"
|
|
| PaOlb (loc, _, _) | PaOlbi (loc, _, _, _) ->
|
|
error loc "labeled pattern not allowed here"
|
|
| PaOrp (loc, p1, p2) -> mkpat loc (Ppat_or (patt p1, patt p2))
|
|
| PaRng (loc, p1, p2) ->
|
|
(match (p1, p2) with
|
|
| (PaChr (loc1, c1), PaChr (loc2, c2)) ->
|
|
let c1 = char_of_char_token loc1 c1 in
|
|
let c2 = char_of_char_token loc2 c2
|
|
in mkrangepat loc c1 c2
|
|
| _ ->
|
|
error loc "range pattern allowed only for characters")
|
|
| PaRec (loc, p) ->
|
|
mkpat loc
|
|
(Ppat_record (List.map mklabpat (list_of_patt p [])))
|
|
| PaStr (loc, s) ->
|
|
mkpat loc
|
|
(Ppat_constant
|
|
(Const_string (string_of_string_token loc s)))
|
|
| Ast.PaTup (loc, (Ast.PaCom (_, p1, p2))) ->
|
|
mkpat loc
|
|
(Ppat_tuple
|
|
(List.map patt (list_of_patt p1 (list_of_patt p2 []))))
|
|
| Ast.PaTup (loc, _) -> error loc "singleton tuple pattern"
|
|
| PaTyc (loc, p, t) ->
|
|
mkpat loc (Ppat_constraint (patt p, ctyp t))
|
|
| PaTyp (loc, i) -> mkpat loc (Ppat_type (long_type_ident i))
|
|
| PaVrn (loc, s) -> mkpat loc (Ppat_variant (s, None))
|
|
| (PaEq (_, _, _) | PaSem (_, _, _) | PaCom (_, _, _) | PaNil _
|
|
as p) -> error (loc_of_patt p) "invalid pattern"
|
|
and mklabpat =
|
|
function
|
|
| Ast.PaEq (_, i, p) ->
|
|
((ident ~conv_lid: conv_lab i), (patt p))
|
|
| p -> error (loc_of_patt p) "invalid pattern"
|
|
let rec expr_fa al =
|
|
function
|
|
| ExApp (_, f, a) -> expr_fa (a :: al) f
|
|
| f -> (f, al)
|
|
let rec class_expr_fa al =
|
|
function
|
|
| CeApp (_, ce, a) -> class_expr_fa (a :: al) ce
|
|
| ce -> (ce, al)
|
|
let rec sep_expr_acc l =
|
|
function
|
|
| ExAcc (_, e1, e2) -> sep_expr_acc (sep_expr_acc l e2) e1
|
|
| (Ast.ExId (loc, (Ast.IdUid (_, s))) as e) ->
|
|
(match l with
|
|
| [] -> [ (loc, [], e) ]
|
|
| (loc', sl, e) :: l ->
|
|
((Loc.merge loc loc'), (s :: sl), e) :: l)
|
|
| Ast.ExId (_, ((Ast.IdAcc (_, _, _) as i))) ->
|
|
let rec normalize_acc =
|
|
(function
|
|
| Ast.IdAcc (_loc, i1, i2) ->
|
|
Ast.ExAcc (_loc, normalize_acc i1, normalize_acc i2)
|
|
| Ast.IdApp (_loc, i1, i2) ->
|
|
Ast.ExApp (_loc, normalize_acc i1, normalize_acc i2)
|
|
| (Ast.IdAnt (_loc, _) | Ast.IdUid (_loc, _) |
|
|
Ast.IdLid (_loc, _)
|
|
as i) -> Ast.ExId (_loc, i))
|
|
in sep_expr_acc l (normalize_acc i)
|
|
| e -> ((loc_of_expr e), [], e) :: l
|
|
let list_of_opt_ctyp ot acc =
|
|
match ot with | Ast.TyNil _ -> acc | t -> list_of_ctyp t acc
|
|
let rec expr =
|
|
function
|
|
| Ast.ExAcc (loc, x, (Ast.ExId (_, (Ast.IdLid (_, "val"))))) ->
|
|
mkexp loc
|
|
(Pexp_apply (mkexp loc (Pexp_ident (Lident "!")),
|
|
[ ("", (expr x)) ]))
|
|
| (ExAcc (loc, _, _) | Ast.ExId (loc, (Ast.IdAcc (_, _, _))) as
|
|
e) ->
|
|
let (e, l) =
|
|
(match sep_expr_acc [] e with
|
|
| (loc, ml, Ast.ExId (_, (Ast.IdUid (_, s)))) :: l ->
|
|
let ca = constructors_arity ()
|
|
in
|
|
((mkexp loc (Pexp_construct (mkli s ml, None, ca))),
|
|
l)
|
|
| (loc, ml, Ast.ExId (_, (Ast.IdLid (_, s)))) :: l ->
|
|
((mkexp loc (Pexp_ident (mkli s ml))), l)
|
|
| (_, [], e) :: l -> ((expr e), l)
|
|
| _ -> error loc "bad ast in expression") in
|
|
let (_, e) =
|
|
List.fold_left
|
|
(fun (loc_bp, e1) (loc_ep, ml, e2) ->
|
|
match e2 with
|
|
| Ast.ExId (_, (Ast.IdLid (_, s))) ->
|
|
let loc = Loc.merge loc_bp loc_ep
|
|
in
|
|
(loc,
|
|
(mkexp loc
|
|
(Pexp_field (e1, mkli (conv_lab s) ml))))
|
|
| _ ->
|
|
error (loc_of_expr e2)
|
|
"lowercase identifier expected")
|
|
(loc, e) l
|
|
in e
|
|
| ExAnt (loc, _) -> error loc "antiquotation not allowed here"
|
|
| (ExApp (loc, _, _) as f) ->
|
|
let (f, al) = expr_fa [] f in
|
|
let al = List.map label_expr al
|
|
in
|
|
(match (expr f).pexp_desc with
|
|
| Pexp_construct (li, None, _) ->
|
|
let al = List.map snd al
|
|
in
|
|
if constructors_arity ()
|
|
then
|
|
mkexp loc
|
|
(Pexp_construct (li,
|
|
Some (mkexp loc (Pexp_tuple al)), true))
|
|
else
|
|
(let a =
|
|
match al with
|
|
| [ a ] -> a
|
|
| _ -> mkexp loc (Pexp_tuple al)
|
|
in
|
|
mkexp loc
|
|
(Pexp_construct (li, Some a, false)))
|
|
| Pexp_variant (s, None) ->
|
|
let al = List.map snd al in
|
|
let a =
|
|
if constructors_arity ()
|
|
then mkexp loc (Pexp_tuple al)
|
|
else
|
|
(match al with
|
|
| [ a ] -> a
|
|
| _ -> mkexp loc (Pexp_tuple al))
|
|
in mkexp loc (Pexp_variant (s, Some a))
|
|
| _ -> mkexp loc (Pexp_apply (expr f, al)))
|
|
| ExAre (loc, e1, e2) ->
|
|
mkexp loc
|
|
(Pexp_apply
|
|
(mkexp loc (Pexp_ident (array_function "Array" "get")),
|
|
[ ("", (expr e1)); ("", (expr e2)) ]))
|
|
| ExArr (loc, e) ->
|
|
mkexp loc (Pexp_array (List.map expr (list_of_expr e [])))
|
|
| ExAsf loc -> mkexp loc Pexp_assertfalse
|
|
| ExAss (loc, e, v) ->
|
|
let e =
|
|
(match e with
|
|
| Ast.ExAcc (loc, x,
|
|
(Ast.ExId (_, (Ast.IdLid (_, "val"))))) ->
|
|
Pexp_apply (mkexp loc (Pexp_ident (Lident ":=")),
|
|
[ ("", (expr x)); ("", (expr v)) ])
|
|
| ExAcc (loc, _, _) ->
|
|
(match (expr e).pexp_desc with
|
|
| Pexp_field (e, lab) ->
|
|
Pexp_setfield (e, lab, expr v)
|
|
| _ -> error loc "bad record access")
|
|
| ExAre (_, e1, e2) ->
|
|
Pexp_apply
|
|
(mkexp loc
|
|
(Pexp_ident (array_function "Array" "set")),
|
|
[ ("", (expr e1)); ("", (expr e2)); ("", (expr v)) ])
|
|
| Ast.ExId (_, (Ast.IdLid (_, lab))) ->
|
|
Pexp_setinstvar (lab, expr v)
|
|
| ExSte (_, e1, e2) ->
|
|
Pexp_apply
|
|
(mkexp loc
|
|
(Pexp_ident (array_function "String" "set")),
|
|
[ ("", (expr e1)); ("", (expr e2)); ("", (expr v)) ])
|
|
| _ -> error loc "bad left part of assignment")
|
|
in mkexp loc e
|
|
| ExAsr (loc, e) -> mkexp loc (Pexp_assert (expr e))
|
|
| ExChr (loc, s) ->
|
|
mkexp loc
|
|
(Pexp_constant (Const_char (char_of_char_token loc s)))
|
|
| ExCoe (loc, e, t1, t2) ->
|
|
let t1 =
|
|
(match t1 with | Ast.TyNil _ -> None | t -> Some (ctyp t))
|
|
in mkexp loc (Pexp_constraint (expr e, t1, Some (ctyp t2)))
|
|
| ExFlo (loc, s) ->
|
|
mkexp loc
|
|
(Pexp_constant (Const_float (remove_underscores s)))
|
|
| ExFor (loc, i, e1, e2, df, el) ->
|
|
let e3 = ExSeq (loc, el) in
|
|
let df = if mb2b df then Upto else Downto
|
|
in mkexp loc (Pexp_for (i, expr e1, expr e2, df, expr e3))
|
|
| Ast.ExFun (loc, (Ast.McArr (_, (PaLab (_, lab, po)), w, e)))
|
|
->
|
|
mkexp loc
|
|
(Pexp_function (lab, None,
|
|
[ ((patt_of_lab loc lab po), (when_expr e w)) ]))
|
|
| Ast.ExFun (loc,
|
|
(Ast.McArr (_, (PaOlbi (_, lab, p, e1)), w, e2))) ->
|
|
let lab = paolab lab p
|
|
in
|
|
mkexp loc
|
|
(Pexp_function ("?" ^ lab, Some (expr e1),
|
|
[ ((patt p), (when_expr e2 w)) ]))
|
|
| Ast.ExFun (loc, (Ast.McArr (_, (PaOlb (_, lab, p)), w, e)))
|
|
->
|
|
let lab = paolab lab p
|
|
in
|
|
mkexp loc
|
|
(Pexp_function ("?" ^ lab, None,
|
|
[ ((patt_of_lab loc lab p), (when_expr e w)) ]))
|
|
| ExFun (loc, a) ->
|
|
mkexp loc (Pexp_function ("", None, match_case a []))
|
|
| ExIfe (loc, e1, e2, e3) ->
|
|
mkexp loc
|
|
(Pexp_ifthenelse (expr e1, expr e2, Some (expr e3)))
|
|
| ExInt (loc, s) ->
|
|
let i =
|
|
(try int_of_string s
|
|
with
|
|
| Failure _ ->
|
|
error loc
|
|
"Integer literal exceeds the range of representable integers of type int")
|
|
in mkexp loc (Pexp_constant (Const_int i))
|
|
| ExInt32 (loc, s) ->
|
|
let i32 =
|
|
(try Int32.of_string s
|
|
with
|
|
| Failure _ ->
|
|
error loc
|
|
"Integer literal exceeds the range of representable integers of type int32")
|
|
in mkexp loc (Pexp_constant (Const_int32 i32))
|
|
| ExInt64 (loc, s) ->
|
|
let i64 =
|
|
(try Int64.of_string s
|
|
with
|
|
| Failure _ ->
|
|
error loc
|
|
"Integer literal exceeds the range of representable integers of type int64")
|
|
in mkexp loc (Pexp_constant (Const_int64 i64))
|
|
| ExNativeInt (loc, s) ->
|
|
let nati =
|
|
(try Nativeint.of_string s
|
|
with
|
|
| Failure _ ->
|
|
error loc
|
|
"Integer literal exceeds the range of representable integers of type nativeint")
|
|
in mkexp loc (Pexp_constant (Const_nativeint nati))
|
|
| ExLab (loc, _, _) ->
|
|
error loc "labeled expression not allowed here"
|
|
| ExLaz (loc, e) -> mkexp loc (Pexp_lazy (expr e))
|
|
| ExLet (loc, rf, bi, e) ->
|
|
mkexp loc (Pexp_let (mkrf rf, binding bi [], expr e))
|
|
| ExLmd (loc, i, me, e) ->
|
|
mkexp loc (Pexp_letmodule (i, module_expr me, expr e))
|
|
| ExMat (loc, e, a) ->
|
|
mkexp loc (Pexp_match (expr e, match_case a []))
|
|
| ExNew (loc, id) -> mkexp loc (Pexp_new (long_type_ident id))
|
|
| ExObj (loc, po, cfl) ->
|
|
let p =
|
|
(match po with | Ast.PaNil _ -> Ast.PaAny loc | p -> p) in
|
|
let cil = class_str_item cfl []
|
|
in mkexp loc (Pexp_object (((patt p), cil)))
|
|
| ExOlb (loc, _, _) ->
|
|
error loc "labeled expression not allowed here"
|
|
| ExOvr (loc, iel) ->
|
|
mkexp loc (Pexp_override (mkideexp iel []))
|
|
| ExRec (loc, lel, eo) ->
|
|
(match lel with
|
|
| Ast.RbNil _ -> error loc "empty record"
|
|
| _ ->
|
|
let eo =
|
|
(match eo with
|
|
| Ast.ExNil _ -> None
|
|
| e -> Some (expr e))
|
|
in mkexp loc (Pexp_record (mklabexp lel [], eo)))
|
|
| ExSeq (_loc, e) ->
|
|
let rec loop =
|
|
(function
|
|
| [] -> expr (Ast.ExId (_loc, Ast.IdUid (_loc, "()")))
|
|
| [ e ] -> expr e
|
|
| e :: el ->
|
|
let _loc = Loc.merge (loc_of_expr e) _loc
|
|
in mkexp _loc (Pexp_sequence (expr e, loop el)))
|
|
in loop (list_of_expr e [])
|
|
| ExSnd (loc, e, s) -> mkexp loc (Pexp_send (expr e, s))
|
|
| ExSte (loc, e1, e2) ->
|
|
mkexp loc
|
|
(Pexp_apply
|
|
(mkexp loc
|
|
(Pexp_ident (array_function "String" "get")),
|
|
[ ("", (expr e1)); ("", (expr e2)) ]))
|
|
| ExStr (loc, s) ->
|
|
mkexp loc
|
|
(Pexp_constant
|
|
(Const_string (string_of_string_token loc s)))
|
|
| ExTry (loc, e, a) ->
|
|
mkexp loc (Pexp_try (expr e, match_case a []))
|
|
| Ast.ExTup (loc, (Ast.ExCom (_, e1, e2))) ->
|
|
mkexp loc
|
|
(Pexp_tuple
|
|
(List.map expr (list_of_expr e1 (list_of_expr e2 []))))
|
|
| Ast.ExTup (loc, _) -> error loc "singleton tuple"
|
|
| ExTyc (loc, e, t) ->
|
|
mkexp loc (Pexp_constraint (expr e, Some (ctyp t), None))
|
|
| Ast.ExId (loc, (Ast.IdUid (_, "()"))) ->
|
|
mkexp loc (Pexp_construct (lident "()", None, true))
|
|
| Ast.ExId (loc, (Ast.IdLid (_, s))) ->
|
|
mkexp loc (Pexp_ident (lident s))
|
|
| Ast.ExId (loc, (Ast.IdUid (_, s))) ->
|
|
mkexp loc
|
|
(Pexp_construct (lident (conv_con s), None, true))
|
|
| ExVrn (loc, s) -> mkexp loc (Pexp_variant (s, None))
|
|
| ExWhi (loc, e1, el) ->
|
|
let e2 = ExSeq (loc, el)
|
|
in mkexp loc (Pexp_while (expr e1, expr e2))
|
|
| Ast.ExCom (loc, _, _) ->
|
|
error loc "expr, expr: not allowed here"
|
|
| Ast.ExSem (loc, _, _) ->
|
|
error loc
|
|
"expr; expr: not allowed here, use do {...} or [|...|] to surround them"
|
|
| (ExId (_, _) | ExNil _ as e) ->
|
|
error (loc_of_expr e) "invalid expr"
|
|
and patt_of_lab _loc lab =
|
|
function
|
|
| Ast.PaNil _ -> patt (Ast.PaId (_loc, Ast.IdLid (_loc, lab)))
|
|
| p -> patt p
|
|
and expr_of_lab _loc lab =
|
|
function
|
|
| Ast.ExNil _ -> expr (Ast.ExId (_loc, Ast.IdLid (_loc, lab)))
|
|
| e -> expr e
|
|
and label_expr =
|
|
function
|
|
| ExLab (loc, lab, eo) -> (lab, (expr_of_lab loc lab eo))
|
|
| ExOlb (loc, lab, eo) ->
|
|
(("?" ^ lab), (expr_of_lab loc lab eo))
|
|
| e -> ("", (expr e))
|
|
and binding x acc =
|
|
match x with
|
|
| Ast.BiAnd (_, x, y) -> binding x (binding y acc)
|
|
| Ast.BiEq (_, p, e) -> ((patt p), (expr e)) :: acc
|
|
| Ast.BiNil _ -> acc
|
|
| _ -> assert false
|
|
and match_case x acc =
|
|
match x with
|
|
| Ast.McOr (_, x, y) -> match_case x (match_case y acc)
|
|
| Ast.McArr (_, p, w, e) -> ((patt p), (when_expr e w)) :: acc
|
|
| Ast.McNil _ -> acc
|
|
| _ -> assert false
|
|
and when_expr e w =
|
|
match w with
|
|
| Ast.ExNil _ -> expr e
|
|
| w -> mkexp (loc_of_expr w) (Pexp_when (expr w, expr e))
|
|
and mklabexp x acc =
|
|
match x with
|
|
| Ast.RbSem (_, x, y) -> mklabexp x (mklabexp y acc)
|
|
| Ast.RbEq (_, i, e) ->
|
|
((ident ~conv_lid: conv_lab i), (expr e)) :: acc
|
|
| _ -> assert false
|
|
and mkideexp x acc =
|
|
match x with
|
|
| Ast.RbSem (_, x, y) -> mkideexp x (mkideexp y acc)
|
|
| Ast.RbEq (_, (Ast.IdLid (_, s)), e) -> (s, (expr e)) :: acc
|
|
| _ -> assert false
|
|
and mktype_decl x acc =
|
|
match x with
|
|
| Ast.TyAnd (_, x, y) -> mktype_decl x (mktype_decl y acc)
|
|
| Ast.TyDcl (_, c, tl, td, cl) ->
|
|
let cl =
|
|
List.map
|
|
(fun (t1, t2) ->
|
|
let loc =
|
|
Loc.merge (loc_of_ctyp t1) (loc_of_ctyp t2)
|
|
in ((ctyp t1), (ctyp t2), (mkloc loc)))
|
|
cl
|
|
in
|
|
(c,
|
|
(type_decl (List.fold_right type_parameters tl []) cl td)) ::
|
|
acc
|
|
| _ -> assert false
|
|
and module_type =
|
|
function
|
|
| Ast.MtNil loc ->
|
|
error loc "abstract/nil module type not allowed here"
|
|
| Ast.MtId (loc, i) -> mkmty loc (Pmty_ident (long_uident i))
|
|
| Ast.MtFun (loc, n, nt, mt) ->
|
|
mkmty loc
|
|
(Pmty_functor (n, module_type nt, module_type mt))
|
|
| Ast.MtQuo (loc, _) ->
|
|
error loc "module type variable not allowed here"
|
|
| Ast.MtSig (loc, sl) ->
|
|
mkmty loc (Pmty_signature (sig_item sl []))
|
|
| Ast.MtWit (loc, mt, wc) ->
|
|
mkmty loc (Pmty_with (module_type mt, mkwithc wc []))
|
|
| Ast.MtAnt (_, _) -> assert false
|
|
and sig_item s l =
|
|
match s with
|
|
| Ast.SgNil _ -> l
|
|
| SgCls (loc, cd) ->
|
|
(mksig loc
|
|
(Psig_class
|
|
(List.map class_info_class_type
|
|
(list_of_class_type cd [])))) ::
|
|
l
|
|
| SgClt (loc, ctd) ->
|
|
(mksig loc
|
|
(Psig_class_type
|
|
(List.map class_info_class_type
|
|
(list_of_class_type ctd [])))) ::
|
|
l
|
|
| Ast.SgSem (_, sg1, sg2) -> sig_item sg1 (sig_item sg2 l)
|
|
| SgDir (_, _, _) -> l
|
|
| Ast.SgExc (loc, (Ast.TyId (_, (Ast.IdUid (_, s))))) ->
|
|
(mksig loc (Psig_exception (conv_con s, []))) :: l
|
|
| Ast.SgExc (loc,
|
|
(Ast.TyOf (_, (Ast.TyId (_, (Ast.IdUid (_, s)))), t))) ->
|
|
(mksig loc
|
|
(Psig_exception (conv_con s,
|
|
List.map ctyp (list_of_ctyp t [])))) ::
|
|
l
|
|
| SgExc (_, _) -> assert false
|
|
| SgExt (loc, n, t, sl) ->
|
|
(mksig loc
|
|
(Psig_value (n, mkvalue_desc t (list_of_meta_list sl)))) ::
|
|
l
|
|
| SgInc (loc, mt) ->
|
|
(mksig loc (Psig_include (module_type mt))) :: l
|
|
| SgMod (loc, n, mt) ->
|
|
(mksig loc (Psig_module (n, module_type mt))) :: l
|
|
| SgRecMod (loc, mb) ->
|
|
(mksig loc (Psig_recmodule (module_sig_binding mb []))) ::
|
|
l
|
|
| SgMty (loc, n, mt) ->
|
|
let si =
|
|
(match mt with
|
|
| MtQuo (_, _) -> Pmodtype_abstract
|
|
| _ -> Pmodtype_manifest (module_type mt))
|
|
in (mksig loc (Psig_modtype (n, si))) :: l
|
|
| SgOpn (loc, id) ->
|
|
(mksig loc (Psig_open (long_uident id))) :: l
|
|
| SgTyp (loc, tdl) ->
|
|
(mksig loc (Psig_type (mktype_decl tdl []))) :: l
|
|
| SgVal (loc, n, t) ->
|
|
(mksig loc (Psig_value (n, mkvalue_desc t []))) :: l
|
|
| Ast.SgAnt (loc, _) -> error loc "antiquotation in sig_item"
|
|
and module_sig_binding x acc =
|
|
match x with
|
|
| Ast.MbAnd (_, x, y) ->
|
|
module_sig_binding x (module_sig_binding y acc)
|
|
| Ast.MbCol (_, s, mt) -> (s, (module_type mt)) :: acc
|
|
| _ -> assert false
|
|
and module_str_binding x acc =
|
|
match x with
|
|
| Ast.MbAnd (_, x, y) ->
|
|
module_str_binding x (module_str_binding y acc)
|
|
| Ast.MbColEq (_, s, mt, me) ->
|
|
(s, (module_type mt), (module_expr me)) :: acc
|
|
| _ -> assert false
|
|
and module_expr =
|
|
function
|
|
| Ast.MeNil loc -> error loc "nil module expression"
|
|
| Ast.MeId (loc, i) -> mkmod loc (Pmod_ident (long_uident i))
|
|
| Ast.MeApp (loc, me1, me2) ->
|
|
mkmod loc (Pmod_apply (module_expr me1, module_expr me2))
|
|
| Ast.MeFun (loc, n, mt, me) ->
|
|
mkmod loc
|
|
(Pmod_functor (n, module_type mt, module_expr me))
|
|
| Ast.MeStr (loc, sl) ->
|
|
mkmod loc (Pmod_structure (str_item sl []))
|
|
| Ast.MeTyc (loc, me, mt) ->
|
|
mkmod loc
|
|
(Pmod_constraint (module_expr me, module_type mt))
|
|
| Ast.MeAnt (loc, _) ->
|
|
error loc "antiquotation in module_expr"
|
|
and str_item s l =
|
|
match s with
|
|
| Ast.StNil _ -> l
|
|
| StCls (loc, cd) ->
|
|
(mkstr loc
|
|
(Pstr_class
|
|
(List.map class_info_class_expr
|
|
(list_of_class_expr cd [])))) ::
|
|
l
|
|
| StClt (loc, ctd) ->
|
|
(mkstr loc
|
|
(Pstr_class_type
|
|
(List.map class_info_class_type
|
|
(list_of_class_type ctd [])))) ::
|
|
l
|
|
| Ast.StSem (_, st1, st2) -> str_item st1 (str_item st2 l)
|
|
| StDir (_, _, _) -> l
|
|
| Ast.StExc (loc, (Ast.TyId (_, (Ast.IdUid (_, s)))), Ast.
|
|
ONone) ->
|
|
(mkstr loc (Pstr_exception (conv_con s, []))) :: l
|
|
| Ast.StExc (loc,
|
|
(Ast.TyOf (_, (Ast.TyId (_, (Ast.IdUid (_, s)))), t)), Ast.
|
|
ONone) ->
|
|
(mkstr loc
|
|
(Pstr_exception (conv_con s,
|
|
List.map ctyp (list_of_ctyp t [])))) ::
|
|
l
|
|
| Ast.StExc (loc, (Ast.TyId (_, (Ast.IdUid (_, s)))),
|
|
(Ast.OSome i)) ->
|
|
(mkstr loc (Pstr_exn_rebind (conv_con s, ident i))) :: l
|
|
| StExc (_, _, _) -> assert false
|
|
| StExp (loc, e) -> (mkstr loc (Pstr_eval (expr e))) :: l
|
|
| StExt (loc, n, t, sl) ->
|
|
(mkstr loc
|
|
(Pstr_primitive (n,
|
|
mkvalue_desc t (list_of_meta_list sl)))) ::
|
|
l
|
|
| StInc (loc, me) ->
|
|
(mkstr loc (Pstr_include (module_expr me))) :: l
|
|
| StMod (loc, n, me) ->
|
|
(mkstr loc (Pstr_module (n, module_expr me))) :: l
|
|
| StRecMod (loc, mb) ->
|
|
(mkstr loc (Pstr_recmodule (module_str_binding mb []))) ::
|
|
l
|
|
| StMty (loc, n, mt) ->
|
|
(mkstr loc (Pstr_modtype (n, module_type mt))) :: l
|
|
| StOpn (loc, id) ->
|
|
(mkstr loc (Pstr_open (long_uident id))) :: l
|
|
| StTyp (loc, tdl) ->
|
|
(mkstr loc (Pstr_type (mktype_decl tdl []))) :: l
|
|
| StVal (loc, rf, bi) ->
|
|
(mkstr loc (Pstr_value (mkrf rf, binding bi []))) :: l
|
|
| Ast.StAnt (loc, _) -> error loc "antiquotation in str_item"
|
|
and class_type =
|
|
function
|
|
| CtCon (loc, Ast.BFalse, id, tl) ->
|
|
mkcty loc
|
|
(Pcty_constr (long_class_ident id,
|
|
List.map ctyp (list_of_opt_ctyp tl [])))
|
|
| CtFun (loc, (TyLab (_, lab, t)), ct) ->
|
|
mkcty loc (Pcty_fun (lab, ctyp t, class_type ct))
|
|
| CtFun (loc, (TyOlb (loc1, lab, t)), ct) ->
|
|
let t =
|
|
TyApp (loc1, Ast.TyId (loc1, Ast.IdLid (loc1, "option")),
|
|
t)
|
|
in mkcty loc (Pcty_fun ("?" ^ lab, ctyp t, class_type ct))
|
|
| CtFun (loc, t, ct) ->
|
|
mkcty loc (Pcty_fun ("", ctyp t, class_type ct))
|
|
| CtSig (loc, t_o, ctfl) ->
|
|
let t =
|
|
(match t_o with | Ast.TyNil _ -> Ast.TyAny loc | t -> t) in
|
|
let cil = class_sig_item ctfl []
|
|
in mkcty loc (Pcty_signature (((ctyp t), cil)))
|
|
| CtCon (loc, _, _, _) ->
|
|
error loc "invalid virtual class inside a class type"
|
|
| CtAnt (_, _) | CtEq (_, _, _) | CtCol (_, _, _) |
|
|
CtAnd (_, _, _) | CtNil _ -> assert false
|
|
and class_info_class_expr ci =
|
|
match ci with
|
|
| CeEq (_, (CeCon (loc, vir, (IdLid (_, name)), params)), ce)
|
|
->
|
|
let (loc_params, (params, variance)) =
|
|
(match params with
|
|
| Ast.TyNil _ -> (loc, ([], []))
|
|
| t ->
|
|
((loc_of_ctyp t),
|
|
(List.split (class_parameters t []))))
|
|
in
|
|
{
|
|
pci_virt = if mb2b vir then Virtual else Concrete;
|
|
pci_params = (params, (mkloc loc_params));
|
|
pci_name = name;
|
|
pci_expr = class_expr ce;
|
|
pci_loc = mkloc loc;
|
|
pci_variance = variance;
|
|
}
|
|
| ce -> error (loc_of_class_expr ce) "bad class definition"
|
|
and class_info_class_type ci =
|
|
match ci with
|
|
| CtEq (_, (CtCon (loc, vir, (IdLid (_, name)), params)), ct) |
|
|
CtCol (_, (CtCon (loc, vir, (IdLid (_, name)), params)),
|
|
ct)
|
|
->
|
|
let (loc_params, (params, variance)) =
|
|
(match params with
|
|
| Ast.TyNil _ -> (loc, ([], []))
|
|
| t ->
|
|
((loc_of_ctyp t),
|
|
(List.split (class_parameters t []))))
|
|
in
|
|
{
|
|
pci_virt = if mb2b vir then Virtual else Concrete;
|
|
pci_params = (params, (mkloc loc_params));
|
|
pci_name = name;
|
|
pci_expr = class_type ct;
|
|
pci_loc = mkloc loc;
|
|
pci_variance = variance;
|
|
}
|
|
| ct ->
|
|
error (loc_of_class_type ct)
|
|
"bad class/class type declaration/definition"
|
|
and class_sig_item c l =
|
|
match c with
|
|
| Ast.CgNil _ -> l
|
|
| CgCtr (loc, t1, t2) ->
|
|
(Pctf_cstr (((ctyp t1), (ctyp t2), (mkloc loc)))) :: l
|
|
| Ast.CgSem (_, csg1, csg2) ->
|
|
class_sig_item csg1 (class_sig_item csg2 l)
|
|
| CgInh (_, ct) -> (Pctf_inher (class_type ct)) :: l
|
|
| CgMth (loc, s, pf, t) ->
|
|
(Pctf_meth
|
|
((s, (mkprivate pf), (mkpolytype (ctyp t)), (mkloc loc)))) ::
|
|
l
|
|
| CgVal (loc, s, b, v, t) ->
|
|
(Pctf_val
|
|
((s, (mkmutable b), (mkvirtual v), (ctyp t),
|
|
(mkloc loc)))) ::
|
|
l
|
|
| CgVir (loc, s, b, t) ->
|
|
(Pctf_virt
|
|
((s, (mkprivate b), (mkpolytype (ctyp t)), (mkloc loc)))) ::
|
|
l
|
|
| CgAnt (_, _) -> assert false
|
|
and class_expr =
|
|
function
|
|
| (CeApp (loc, _, _) as c) ->
|
|
let (ce, el) = class_expr_fa [] c in
|
|
let el = List.map label_expr el
|
|
in mkpcl loc (Pcl_apply (class_expr ce, el))
|
|
| CeCon (loc, Ast.BFalse, id, tl) ->
|
|
mkpcl loc
|
|
(Pcl_constr (long_class_ident id,
|
|
List.map ctyp (list_of_opt_ctyp tl [])))
|
|
| CeFun (loc, (PaLab (_, lab, po)), ce) ->
|
|
mkpcl loc
|
|
(Pcl_fun (lab, None, patt_of_lab loc lab po,
|
|
class_expr ce))
|
|
| CeFun (loc, (PaOlbi (_, lab, p, e)), ce) ->
|
|
let lab = paolab lab p
|
|
in
|
|
mkpcl loc
|
|
(Pcl_fun ("?" ^ lab, Some (expr e), patt p,
|
|
class_expr ce))
|
|
| CeFun (loc, (PaOlb (_, lab, p)), ce) ->
|
|
let lab = paolab lab p
|
|
in
|
|
mkpcl loc
|
|
(Pcl_fun ("?" ^ lab, None, patt_of_lab loc lab p,
|
|
class_expr ce))
|
|
| CeFun (loc, p, ce) ->
|
|
mkpcl loc (Pcl_fun ("", None, patt p, class_expr ce))
|
|
| CeLet (loc, rf, bi, ce) ->
|
|
mkpcl loc (Pcl_let (mkrf rf, binding bi [], class_expr ce))
|
|
| CeStr (loc, po, cfl) ->
|
|
let p =
|
|
(match po with | Ast.PaNil _ -> Ast.PaAny loc | p -> p) in
|
|
let cil = class_str_item cfl []
|
|
in mkpcl loc (Pcl_structure (((patt p), cil)))
|
|
| CeTyc (loc, ce, ct) ->
|
|
mkpcl loc (Pcl_constraint (class_expr ce, class_type ct))
|
|
| CeCon (loc, _, _, _) ->
|
|
error loc "invalid virtual class inside a class expression"
|
|
| CeAnt (_, _) | CeEq (_, _, _) | CeAnd (_, _, _) | CeNil _ ->
|
|
assert false
|
|
and class_str_item c l =
|
|
match c with
|
|
| CrNil _ -> l
|
|
| CrCtr (loc, t1, t2) ->
|
|
(Pcf_cstr (((ctyp t1), (ctyp t2), (mkloc loc)))) :: l
|
|
| Ast.CrSem (_, cst1, cst2) ->
|
|
class_str_item cst1 (class_str_item cst2 l)
|
|
| CrInh (_, ce, "") -> (Pcf_inher (class_expr ce, None)) :: l
|
|
| CrInh (_, ce, pb) ->
|
|
(Pcf_inher (class_expr ce, Some pb)) :: l
|
|
| CrIni (_, e) -> (Pcf_init (expr e)) :: l
|
|
| CrMth (loc, s, b, e, t) ->
|
|
let t =
|
|
(match t with
|
|
| Ast.TyNil _ -> None
|
|
| t -> Some (mkpolytype (ctyp t))) in
|
|
let e = mkexp loc (Pexp_poly (expr e, t))
|
|
in (Pcf_meth ((s, (mkprivate b), e, (mkloc loc)))) :: l
|
|
| CrVal (loc, s, b, e) ->
|
|
(Pcf_val ((s, (mkmutable b), (expr e), (mkloc loc)))) :: l
|
|
| CrVir (loc, s, b, t) ->
|
|
(Pcf_virt
|
|
((s, (mkprivate b), (mkpolytype (ctyp t)), (mkloc loc)))) ::
|
|
l
|
|
| CrVvr (loc, s, b, t) ->
|
|
(Pcf_valvirt ((s, (mkmutable b), (ctyp t), (mkloc loc)))) ::
|
|
l
|
|
| CrAnt (_, _) -> assert false
|
|
let sig_item ast = sig_item ast []
|
|
let str_item ast = str_item ast []
|
|
let directive =
|
|
function
|
|
| Ast.ExNil _ -> Pdir_none
|
|
| ExStr (_, s) -> Pdir_string s
|
|
| ExInt (_, i) -> Pdir_int (int_of_string i)
|
|
| Ast.ExId (_, (Ast.IdUid (_, "True"))) -> Pdir_bool true
|
|
| Ast.ExId (_, (Ast.IdUid (_, "False"))) -> Pdir_bool false
|
|
| e -> Pdir_ident (ident (ident_of_expr e))
|
|
let phrase =
|
|
function
|
|
| StDir (_, d, dp) -> Ptop_dir (d, directive dp)
|
|
| si -> Ptop_def (str_item si)
|
|
end
|
|
end
|
|
module CleanAst =
|
|
struct
|
|
module Make (Ast : Sig.Camlp4Ast) =
|
|
struct
|
|
class clean_ast =
|
|
object (self)
|
|
inherit Ast.map as super
|
|
method with_constr =
|
|
function
|
|
| Ast.WcAnd (_, (Ast.WcNil _), wc) |
|
|
Ast.WcAnd (_, wc, (Ast.WcNil _)) -> self#with_constr wc
|
|
| wc -> super#with_constr wc
|
|
method expr =
|
|
function
|
|
| Ast.ExLet (_, _, (Ast.BiNil _), e) |
|
|
Ast.ExRec (_, (Ast.RbNil _), e) |
|
|
Ast.ExCom (_, (Ast.ExNil _), e) |
|
|
Ast.ExCom (_, e, (Ast.ExNil _)) |
|
|
Ast.ExSem (_, (Ast.ExNil _), e) |
|
|
Ast.ExSem (_, e, (Ast.ExNil _)) -> self#expr e
|
|
| e -> super#expr e
|
|
method patt =
|
|
function
|
|
| Ast.PaAli (_, p, (Ast.PaNil _)) |
|
|
Ast.PaOrp (_, (Ast.PaNil _), p) |
|
|
Ast.PaOrp (_, p, (Ast.PaNil _)) |
|
|
Ast.PaCom (_, (Ast.PaNil _), p) |
|
|
Ast.PaCom (_, p, (Ast.PaNil _)) |
|
|
Ast.PaSem (_, (Ast.PaNil _), p) |
|
|
Ast.PaSem (_, p, (Ast.PaNil _)) -> self#patt p
|
|
| p -> super#patt p
|
|
method match_case =
|
|
function
|
|
| Ast.McOr (_, (Ast.McNil _), mc) |
|
|
Ast.McOr (_, mc, (Ast.McNil _)) -> self#match_case mc
|
|
| mc -> super#match_case mc
|
|
method binding =
|
|
function
|
|
| Ast.BiAnd (_, (Ast.BiNil _), bi) |
|
|
Ast.BiAnd (_, bi, (Ast.BiNil _)) -> self#binding bi
|
|
| bi -> super#binding bi
|
|
method rec_binding =
|
|
function
|
|
| Ast.RbSem (_, (Ast.RbNil _), bi) |
|
|
Ast.RbSem (_, bi, (Ast.RbNil _)) -> self#rec_binding bi
|
|
| bi -> super#rec_binding bi
|
|
method module_binding =
|
|
function
|
|
| Ast.MbAnd (_, (Ast.MbNil _), mb) |
|
|
Ast.MbAnd (_, mb, (Ast.MbNil _)) ->
|
|
self#module_binding mb
|
|
| mb -> super#module_binding mb
|
|
method ctyp =
|
|
function
|
|
| Ast.TyPol (_, (Ast.TyNil _), t) |
|
|
Ast.TyAli (_, (Ast.TyNil _), t) |
|
|
Ast.TyAli (_, t, (Ast.TyNil _)) |
|
|
Ast.TyArr (_, t, (Ast.TyNil _)) |
|
|
Ast.TyArr (_, (Ast.TyNil _), t) |
|
|
Ast.TyOr (_, (Ast.TyNil _), t) |
|
|
Ast.TyOr (_, t, (Ast.TyNil _)) |
|
|
Ast.TyOf (_, t, (Ast.TyNil _)) |
|
|
Ast.TyAnd (_, (Ast.TyNil _), t) |
|
|
Ast.TyAnd (_, t, (Ast.TyNil _)) |
|
|
Ast.TySem (_, t, (Ast.TyNil _)) |
|
|
Ast.TySem (_, (Ast.TyNil _), t) |
|
|
Ast.TyCom (_, (Ast.TyNil _), t) |
|
|
Ast.TyCom (_, t, (Ast.TyNil _)) |
|
|
Ast.TyAmp (_, t, (Ast.TyNil _)) |
|
|
Ast.TyAmp (_, (Ast.TyNil _), t) |
|
|
Ast.TySta (_, (Ast.TyNil _), t) |
|
|
Ast.TySta (_, t, (Ast.TyNil _)) -> self#ctyp t
|
|
| t -> super#ctyp t
|
|
method sig_item =
|
|
function
|
|
| Ast.SgSem (_, (Ast.SgNil _), sg) |
|
|
Ast.SgSem (_, sg, (Ast.SgNil _)) -> self#sig_item sg
|
|
| sg -> super#sig_item sg
|
|
method str_item =
|
|
function
|
|
| Ast.StSem (_, (Ast.StNil _), st) |
|
|
Ast.StSem (_, st, (Ast.StNil _)) -> self#str_item st
|
|
| st -> super#str_item st
|
|
method module_type =
|
|
function
|
|
| Ast.MtWit (_, mt, (Ast.WcNil _)) -> self#module_type mt
|
|
| mt -> super#module_type mt
|
|
method class_expr =
|
|
function
|
|
| Ast.CeAnd (_, (Ast.CeNil _), ce) |
|
|
Ast.CeAnd (_, ce, (Ast.CeNil _)) -> self#class_expr ce
|
|
| ce -> super#class_expr ce
|
|
method class_type =
|
|
function
|
|
| Ast.CtAnd (_, (Ast.CtNil _), ct) |
|
|
Ast.CtAnd (_, ct, (Ast.CtNil _)) -> self#class_type ct
|
|
| ct -> super#class_type ct
|
|
method class_sig_item =
|
|
function
|
|
| Ast.CgSem (_, (Ast.CgNil _), csg) |
|
|
Ast.CgSem (_, csg, (Ast.CgNil _)) ->
|
|
self#class_sig_item csg
|
|
| csg -> super#class_sig_item csg
|
|
method class_str_item =
|
|
function
|
|
| Ast.CrSem (_, (Ast.CrNil _), cst) |
|
|
Ast.CrSem (_, cst, (Ast.CrNil _)) ->
|
|
self#class_str_item cst
|
|
| cst -> super#class_str_item cst
|
|
end
|
|
end
|
|
end
|
|
module CommentFilter :
|
|
sig
|
|
module Make (Token : Sig.Camlp4Token) :
|
|
sig
|
|
open Token
|
|
type t
|
|
val mk : unit -> t
|
|
val define : Token.Filter.t -> t -> unit
|
|
val filter :
|
|
t -> (Token.t * Loc.t) Stream.t -> (Token.t * Loc.t) Stream.t
|
|
val take_list : t -> (string * Loc.t) list
|
|
val take_stream : t -> (string * Loc.t) Stream.t
|
|
end
|
|
end =
|
|
struct
|
|
module Make (Token : Sig.Camlp4Token) =
|
|
struct
|
|
open Token
|
|
type t =
|
|
(((string * Loc.t) Stream.t) * ((string * Loc.t) Queue.t))
|
|
let mk () =
|
|
let q = Queue.create () in
|
|
let f _ = try Some (Queue.take q) with | Queue.Empty -> None
|
|
in ((Stream.from f), q)
|
|
let filter (_, q) =
|
|
let rec self (__strm : _ Stream.t) =
|
|
match Stream.peek __strm with
|
|
| Some ((Sig.COMMENT x, loc)) ->
|
|
(Stream.junk __strm;
|
|
let xs = __strm in (Queue.add (x, loc) q; self xs))
|
|
| Some x ->
|
|
(Stream.junk __strm;
|
|
let xs = __strm
|
|
in Stream.icons x (Stream.slazy (fun _ -> self xs)))
|
|
| _ -> Stream.sempty
|
|
in self
|
|
let take_list (_, q) =
|
|
let rec self accu =
|
|
if Queue.is_empty q
|
|
then accu
|
|
else self ((Queue.take q) :: accu)
|
|
in self []
|
|
let take_stream = fst
|
|
let define token_fiter comments_strm =
|
|
Token.Filter.define_filter token_fiter
|
|
(fun previous strm -> previous (filter comments_strm strm))
|
|
end
|
|
end
|
|
module DynLoader : sig include Sig.DynLoader end =
|
|
struct
|
|
type t = string Queue.t
|
|
exception Error of string * string
|
|
let include_dir x y = Queue.add y x
|
|
let fold_load_path x f acc = Queue.fold (fun x y -> f y x) acc x
|
|
let mk ?(ocaml_stdlib = true) ?(camlp4_stdlib = true) () =
|
|
let q = Queue.create ()
|
|
in
|
|
(if ocaml_stdlib
|
|
then include_dir q Camlp4_config.ocaml_standard_library
|
|
else ();
|
|
if camlp4_stdlib
|
|
then
|
|
(include_dir q Camlp4_config.camlp4_standard_library;
|
|
include_dir q
|
|
(Filename.concat Camlp4_config.camlp4_standard_library
|
|
"Camlp4Parsers");
|
|
include_dir q
|
|
(Filename.concat Camlp4_config.camlp4_standard_library
|
|
"Camlp4Printers");
|
|
include_dir q
|
|
(Filename.concat Camlp4_config.camlp4_standard_library
|
|
"Camlp4Filters"))
|
|
else ();
|
|
include_dir q ".";
|
|
q)
|
|
let find_in_path x name =
|
|
if not (Filename.is_implicit name)
|
|
then if Sys.file_exists name then name else raise Not_found
|
|
else
|
|
(let res =
|
|
fold_load_path x
|
|
(fun dir ->
|
|
function
|
|
| None ->
|
|
let fullname = Filename.concat dir name
|
|
in
|
|
if Sys.file_exists fullname
|
|
then Some fullname
|
|
else None
|
|
| x -> x)
|
|
None
|
|
in match res with | None -> raise Not_found | Some x -> x)
|
|
let load =
|
|
let _initialized = ref false
|
|
in
|
|
fun _path file ->
|
|
raise
|
|
(Error (file, "native-code program cannot do a dynamic load"))
|
|
end
|
|
module EmptyError : sig include Sig.Error end =
|
|
struct
|
|
type t = unit
|
|
exception E of t
|
|
let print _ = assert false
|
|
let to_string _ = assert false
|
|
end
|
|
module EmptyPrinter :
|
|
sig module Make (Ast : Sig.Ast) : Sig.Printer(Ast).S end =
|
|
struct
|
|
module Make (Ast : Sig.Ast) =
|
|
struct
|
|
let print_interf ?input_file:(_) ?output_file:(_) _ =
|
|
failwith "No interface printer"
|
|
let print_implem ?input_file:(_) ?output_file:(_) _ =
|
|
failwith "No implementation printer"
|
|
end
|
|
end
|
|
module FreeVars :
|
|
sig
|
|
module Make (Ast : Sig.Camlp4Ast) :
|
|
sig
|
|
module S : Set.S with type elt = string
|
|
val fold_binding_vars :
|
|
(string -> 'accu -> 'accu) -> Ast.binding -> 'accu -> 'accu
|
|
class ['accu] c_fold_pattern_vars :
|
|
(string -> 'accu -> 'accu) ->
|
|
'accu ->
|
|
object inherit Ast.fold val acc : 'accu method acc : 'accu
|
|
end
|
|
val fold_pattern_vars :
|
|
(string -> 'accu -> 'accu) -> Ast.patt -> 'accu -> 'accu
|
|
class ['accu] fold_free_vars :
|
|
(string -> 'accu -> 'accu) ->
|
|
?env_init: S.t ->
|
|
'accu ->
|
|
object ('self_type)
|
|
inherit Ast.fold
|
|
val free : 'accu
|
|
val env : S.t
|
|
method free : 'accu
|
|
method set_env : S.t -> 'self_type
|
|
method add_atom : string -> 'self_type
|
|
method add_patt : Ast.patt -> 'self_type
|
|
method add_binding : Ast.binding -> 'self_type
|
|
end
|
|
val free_vars : S.t -> Ast.expr -> S.t
|
|
end
|
|
end =
|
|
struct
|
|
module Make (Ast : Sig.Camlp4Ast) =
|
|
struct
|
|
module S = Set.Make(String)
|
|
let rec fold_binding_vars f bi acc =
|
|
match bi with
|
|
| Ast.BiAnd (_, bi1, bi2) ->
|
|
fold_binding_vars f bi1 (fold_binding_vars f bi2 acc)
|
|
| Ast.BiEq (_, (Ast.PaId (_, (Ast.IdLid (_, i)))), _) ->
|
|
f i acc
|
|
| _ -> assert false
|
|
class ['accu] c_fold_pattern_vars f init =
|
|
object inherit Ast.fold as super
|
|
val acc = init
|
|
method acc : 'accu = acc
|
|
method patt =
|
|
function
|
|
| Ast.PaId (_, (Ast.IdLid (_, s))) |
|
|
Ast.PaLab (_, s, (Ast.PaNil _)) |
|
|
Ast.PaOlb (_, s, (Ast.PaNil _)) -> {< acc = f s acc; >}
|
|
| p -> super#patt p
|
|
end
|
|
let fold_pattern_vars f p init =
|
|
((new c_fold_pattern_vars f init)#patt p)#acc
|
|
class ['accu] fold_free_vars (f : string -> 'accu -> 'accu)
|
|
?(env_init = S.empty) free_init =
|
|
object (o)
|
|
inherit Ast.fold as super
|
|
val free = (free_init : 'accu)
|
|
val env = (env_init : S.t)
|
|
method free = free
|
|
method set_env = fun env -> {< env = env; >}
|
|
method add_atom = fun s -> {< env = S.add s env; >}
|
|
method add_patt =
|
|
fun p -> {< env = fold_pattern_vars S.add p env; >}
|
|
method add_binding =
|
|
fun bi -> {< env = fold_binding_vars S.add bi env; >}
|
|
method expr =
|
|
function
|
|
| Ast.ExId (_, (Ast.IdLid (_, s))) |
|
|
Ast.ExLab (_, s, (Ast.ExNil _)) |
|
|
Ast.ExOlb (_, s, (Ast.ExNil _)) ->
|
|
if S.mem s env then o else {< free = f s free; >}
|
|
| Ast.ExLet (_, Ast.BFalse, bi, e) ->
|
|
(((o#add_binding bi)#expr e)#set_env env)#binding bi
|
|
| Ast.ExLet (_, Ast.BTrue, bi, e) ->
|
|
(((o#add_binding bi)#expr e)#binding bi)#set_env env
|
|
| Ast.ExFor (_, s, e1, e2, _, e3) ->
|
|
((((o#expr e1)#expr e2)#add_atom s)#expr e3)#set_env
|
|
env
|
|
| Ast.ExId (_, _) | Ast.ExNew (_, _) -> o
|
|
| Ast.ExObj (_, p, cst) ->
|
|
((o#add_patt p)#class_str_item cst)#set_env env
|
|
| e -> super#expr e
|
|
method match_case =
|
|
function
|
|
| Ast.McArr (_, p, e1, e2) ->
|
|
(((o#add_patt p)#expr e1)#expr e2)#set_env env
|
|
| m -> super#match_case m
|
|
method str_item =
|
|
function
|
|
| Ast.StExt (_, s, t, _) -> (o#ctyp t)#add_atom s
|
|
| Ast.StVal (_, Ast.BFalse, bi) ->
|
|
(o#binding bi)#add_binding bi
|
|
| Ast.StVal (_, Ast.BTrue, bi) ->
|
|
(o#add_binding bi)#binding bi
|
|
| st -> super#str_item st
|
|
method class_expr =
|
|
function
|
|
| Ast.CeFun (_, p, ce) ->
|
|
((o#add_patt p)#class_expr ce)#set_env env
|
|
| Ast.CeLet (_, Ast.BFalse, bi, ce) ->
|
|
(((o#binding bi)#add_binding bi)#class_expr ce)#set_env
|
|
env
|
|
| Ast.CeLet (_, Ast.BTrue, bi, ce) ->
|
|
(((o#add_binding bi)#binding bi)#class_expr ce)#set_env
|
|
env
|
|
| Ast.CeStr (_, p, cst) ->
|
|
((o#add_patt p)#class_str_item cst)#set_env env
|
|
| ce -> super#class_expr ce
|
|
method class_str_item =
|
|
function
|
|
| (Ast.CrInh (_, _, "") as cst) -> super#class_str_item cst
|
|
| Ast.CrInh (_, ce, s) -> (o#class_expr ce)#add_atom s
|
|
| Ast.CrVal (_, s, _, e) -> (o#expr e)#add_atom s
|
|
| Ast.CrVvr (_, s, _, t) -> (o#ctyp t)#add_atom s
|
|
| cst -> super#class_str_item cst
|
|
method module_expr =
|
|
function
|
|
| Ast.MeStr (_, st) -> (o#str_item st)#set_env env
|
|
| me -> super#module_expr me
|
|
end
|
|
let free_vars env_init e =
|
|
let fold = new fold_free_vars S.add ~env_init S.empty
|
|
in (fold#expr e)#free
|
|
end
|
|
end
|
|
module Grammar =
|
|
struct
|
|
module Context =
|
|
struct
|
|
module type S =
|
|
sig
|
|
module Token : Sig.Token
|
|
open Token
|
|
type t
|
|
val call_with_ctx :
|
|
(Token.t * Loc.t) Stream.t -> (t -> 'a) -> 'a
|
|
val loc_bp : t -> Loc.t
|
|
val loc_ep : t -> Loc.t
|
|
val stream : t -> (Token.t * Loc.t) Stream.t
|
|
val peek_nth : t -> int -> (Token.t * Loc.t) option
|
|
val njunk : t -> int -> unit
|
|
val junk : (Token.t * Loc.t) Stream.t -> unit
|
|
val bp : (Token.t * Loc.t) Stream.t -> Loc.t
|
|
end
|
|
module Make (Token : Sig.Token) : S with module Token = Token =
|
|
struct
|
|
module Token = Token
|
|
open Token
|
|
type t =
|
|
{ mutable strm : (Token.t * Loc.t) Stream.t;
|
|
mutable loc : Loc.t
|
|
}
|
|
let loc_bp c =
|
|
match Stream.peek c.strm with
|
|
| None -> Loc.ghost
|
|
| Some ((_, loc)) -> loc
|
|
let loc_ep c = c.loc
|
|
let set_loc c =
|
|
match Stream.peek c.strm with
|
|
| Some ((_, loc)) -> c.loc <- loc
|
|
| None -> ()
|
|
let mk strm =
|
|
match Stream.peek strm with
|
|
| Some ((_, loc)) -> { strm = strm; loc = loc; }
|
|
| None -> { strm = strm; loc = Loc.ghost; }
|
|
let stream c = c.strm
|
|
let peek_nth c n =
|
|
let list = Stream.npeek n c.strm in
|
|
let rec loop list n =
|
|
match (list, n) with
|
|
| ((((_, loc) as x)) :: _, 1) -> (c.loc <- loc; Some x)
|
|
| (_ :: l, n) -> loop l (n - 1)
|
|
| ([], _) -> None
|
|
in loop list n
|
|
let njunk c n =
|
|
(for i = 1 to n do Stream.junk c.strm done; set_loc c)
|
|
let streams = ref []
|
|
let mk strm =
|
|
let c = mk strm in
|
|
let () = streams := (strm, c) :: !streams in c
|
|
let junk strm =
|
|
(set_loc (List.assq strm !streams); Stream.junk strm)
|
|
let bp strm = loc_bp (List.assq strm !streams)
|
|
let call_with_ctx strm f =
|
|
let streams_v = !streams in
|
|
let r =
|
|
try f (mk strm)
|
|
with | exc -> (streams := streams_v; raise exc)
|
|
in (streams := streams_v; r)
|
|
end
|
|
end
|
|
module Structure =
|
|
struct
|
|
open Sig.Grammar
|
|
module type S =
|
|
sig
|
|
module Loc : Sig.Loc
|
|
module Token : Sig.Token with module Loc = Loc
|
|
module Lexer : Sig.Lexer with module Loc = Loc
|
|
and module Token = Token
|
|
module Context : Context.S with module Token = Token
|
|
module Action : Sig.Grammar.Action
|
|
type gram =
|
|
{ gfilter : Token.Filter.t;
|
|
gkeywords : (string, int ref) Hashtbl.t;
|
|
glexer :
|
|
Loc.t -> char Stream.t -> (Token.t * Loc.t) Stream.t;
|
|
warning_verbose : bool ref; error_verbose : bool ref
|
|
}
|
|
type efun =
|
|
Context.t -> (Token.t * Loc.t) Stream.t -> Action.t
|
|
type token_pattern = ((Token.t -> bool) * string)
|
|
type internal_entry =
|
|
{ egram : gram; ename : string;
|
|
mutable estart : int -> efun;
|
|
mutable econtinue : int -> Loc.t -> Action.t -> efun;
|
|
mutable edesc : desc
|
|
}
|
|
and desc =
|
|
| Dlevels of level list
|
|
| Dparser of ((Token.t * Loc.t) Stream.t -> Action.t)
|
|
and level =
|
|
{ assoc : assoc; lname : string option; lsuffix : tree;
|
|
lprefix : tree
|
|
}
|
|
and symbol =
|
|
| Smeta of string * symbol list * Action.t
|
|
| Snterm of internal_entry
|
|
| Snterml of internal_entry * string | Slist0 of symbol
|
|
| Slist0sep of symbol * symbol | Slist1 of symbol
|
|
| Slist1sep of symbol * symbol | Sopt of symbol | Sself
|
|
| Snext | Stoken of token_pattern | Skeyword of string
|
|
| Stree of tree
|
|
and tree =
|
|
| Node of node | LocAct of Action.t * Action.t list
|
|
| DeadEnd
|
|
and node =
|
|
{ node : symbol; son : tree; brother : tree
|
|
}
|
|
type production_rule = ((symbol list) * Action.t)
|
|
type single_extend_statment =
|
|
((string option) * (assoc option) * (production_rule list))
|
|
type extend_statment =
|
|
((position option) * (single_extend_statment list))
|
|
type delete_statment = symbol list
|
|
type ('a, 'b, 'c) fold =
|
|
internal_entry ->
|
|
symbol list -> ('a Stream.t -> 'b) -> 'a Stream.t -> 'c
|
|
type ('a, 'b, 'c) foldsep =
|
|
internal_entry ->
|
|
symbol list ->
|
|
('a Stream.t -> 'b) ->
|
|
('a Stream.t -> unit) -> 'a Stream.t -> 'c
|
|
val get_filter : gram -> Token.Filter.t
|
|
val using : gram -> string -> unit
|
|
val removing : gram -> string -> unit
|
|
end
|
|
module Make (Lexer : Sig.Lexer) =
|
|
struct
|
|
module Loc = Lexer.Loc
|
|
module Token = Lexer.Token
|
|
module Action : Sig.Grammar.Action =
|
|
struct
|
|
type t = Obj.t
|
|
let mk = Obj.repr
|
|
let get = Obj.obj
|
|
let getf = Obj.obj
|
|
let getf2 = Obj.obj
|
|
end
|
|
module Lexer = Lexer
|
|
type gram =
|
|
{ gfilter : Token.Filter.t;
|
|
gkeywords : (string, int ref) Hashtbl.t;
|
|
glexer :
|
|
Loc.t -> char Stream.t -> (Token.t * Loc.t) Stream.t;
|
|
warning_verbose : bool ref; error_verbose : bool ref
|
|
}
|
|
module Context = Context.Make(Token)
|
|
type efun =
|
|
Context.t -> (Token.t * Loc.t) Stream.t -> Action.t
|
|
type token_pattern = ((Token.t -> bool) * string)
|
|
type internal_entry =
|
|
{ egram : gram; ename : string;
|
|
mutable estart : int -> efun;
|
|
mutable econtinue : int -> Loc.t -> Action.t -> efun;
|
|
mutable edesc : desc
|
|
}
|
|
and desc =
|
|
| Dlevels of level list
|
|
| Dparser of ((Token.t * Loc.t) Stream.t -> Action.t)
|
|
and level =
|
|
{ assoc : assoc; lname : string option; lsuffix : tree;
|
|
lprefix : tree
|
|
}
|
|
and symbol =
|
|
| Smeta of string * symbol list * Action.t
|
|
| Snterm of internal_entry
|
|
| Snterml of internal_entry * string | Slist0 of symbol
|
|
| Slist0sep of symbol * symbol | Slist1 of symbol
|
|
| Slist1sep of symbol * symbol | Sopt of symbol | Sself
|
|
| Snext | Stoken of token_pattern | Skeyword of string
|
|
| Stree of tree
|
|
and tree =
|
|
| Node of node | LocAct of Action.t * Action.t list
|
|
| DeadEnd
|
|
and node =
|
|
{ node : symbol; son : tree; brother : tree
|
|
}
|
|
type production_rule = ((symbol list) * Action.t)
|
|
type single_extend_statment =
|
|
((string option) * (assoc option) * (production_rule list))
|
|
type extend_statment =
|
|
((position option) * (single_extend_statment list))
|
|
type delete_statment = symbol list
|
|
type ('a, 'b, 'c) fold =
|
|
internal_entry ->
|
|
symbol list -> ('a Stream.t -> 'b) -> 'a Stream.t -> 'c
|
|
type ('a, 'b, 'c) foldsep =
|
|
internal_entry ->
|
|
symbol list ->
|
|
('a Stream.t -> 'b) ->
|
|
('a Stream.t -> unit) -> 'a Stream.t -> 'c
|
|
let get_filter g = g.gfilter
|
|
type 'a not_filtered = 'a
|
|
let using { gkeywords = table; gfilter = filter } kwd =
|
|
let r =
|
|
try Hashtbl.find table kwd
|
|
with
|
|
| Not_found ->
|
|
let r = ref 0 in (Hashtbl.add table kwd r; r)
|
|
in (Token.Filter.keyword_added filter kwd (!r = 0); incr r)
|
|
let removing { gkeywords = table; gfilter = filter } kwd =
|
|
let r = Hashtbl.find table kwd in
|
|
let () = decr r
|
|
in
|
|
if !r = 0
|
|
then
|
|
(Token.Filter.keyword_removed filter kwd;
|
|
Hashtbl.remove table kwd)
|
|
else ()
|
|
end
|
|
end
|
|
module Search =
|
|
struct
|
|
module Make (Structure : Structure.S) =
|
|
struct
|
|
open Structure
|
|
let tree_in_entry prev_symb tree =
|
|
function
|
|
| Dlevels levels ->
|
|
let rec search_levels =
|
|
(function
|
|
| [] -> tree
|
|
| level :: levels ->
|
|
(match search_level level with
|
|
| Some tree -> tree
|
|
| None -> search_levels levels))
|
|
and search_level level =
|
|
(match search_tree level.lsuffix with
|
|
| Some t ->
|
|
Some
|
|
(Node
|
|
{ node = Sself; son = t; brother = DeadEnd;
|
|
})
|
|
| None -> search_tree level.lprefix)
|
|
and search_tree t =
|
|
if (tree <> DeadEnd) && (t == tree)
|
|
then Some t
|
|
else
|
|
(match t with
|
|
| Node n ->
|
|
(match search_symbol n.node with
|
|
| Some symb ->
|
|
Some
|
|
(Node
|
|
{
|
|
node = symb;
|
|
son = n.son;
|
|
brother = DeadEnd;
|
|
})
|
|
| None ->
|
|
(match search_tree n.son with
|
|
| Some t ->
|
|
Some
|
|
(Node
|
|
{
|
|
node = n.node;
|
|
son = t;
|
|
brother = DeadEnd;
|
|
})
|
|
| None -> search_tree n.brother))
|
|
| LocAct (_, _) | DeadEnd -> None)
|
|
and search_symbol symb =
|
|
(match symb with
|
|
| Snterm _ | Snterml (_, _) | Slist0 _ |
|
|
Slist0sep (_, _) | Slist1 _ | Slist1sep (_, _) |
|
|
Sopt _ | Stoken _ | Stree _ | Skeyword _ when
|
|
symb == prev_symb -> Some symb
|
|
| Slist0 symb ->
|
|
(match search_symbol symb with
|
|
| Some symb -> Some (Slist0 symb)
|
|
| None -> None)
|
|
| Slist0sep (symb, sep) ->
|
|
(match search_symbol symb with
|
|
| Some symb -> Some (Slist0sep (symb, sep))
|
|
| None ->
|
|
(match search_symbol sep with
|
|
| Some sep -> Some (Slist0sep (symb, sep))
|
|
| None -> None))
|
|
| Slist1 symb ->
|
|
(match search_symbol symb with
|
|
| Some symb -> Some (Slist1 symb)
|
|
| None -> None)
|
|
| Slist1sep (symb, sep) ->
|
|
(match search_symbol symb with
|
|
| Some symb -> Some (Slist1sep (symb, sep))
|
|
| None ->
|
|
(match search_symbol sep with
|
|
| Some sep -> Some (Slist1sep (symb, sep))
|
|
| None -> None))
|
|
| Sopt symb ->
|
|
(match search_symbol symb with
|
|
| Some symb -> Some (Sopt symb)
|
|
| None -> None)
|
|
| Stree t ->
|
|
(match search_tree t with
|
|
| Some t -> Some (Stree t)
|
|
| None -> None)
|
|
| _ -> None)
|
|
in search_levels levels
|
|
| Dparser _ -> tree
|
|
end
|
|
end
|
|
module Tools =
|
|
struct
|
|
module Make (Structure : Structure.S) =
|
|
struct
|
|
open Structure
|
|
let empty_entry ename _ _ _ =
|
|
raise (Stream.Error ("entry [" ^ (ename ^ "] is empty")))
|
|
let is_level_labelled n lev =
|
|
match lev.lname with | Some n1 -> n = n1 | None -> false
|
|
let warning_verbose = ref true
|
|
let rec get_token_list entry tokl last_tok tree =
|
|
match tree with
|
|
| Node
|
|
{
|
|
node = (Stoken _ | Skeyword _ as tok);
|
|
son = son;
|
|
brother = DeadEnd
|
|
} -> get_token_list entry (last_tok :: tokl) tok son
|
|
| _ ->
|
|
if tokl = []
|
|
then None
|
|
else
|
|
Some
|
|
(((List.rev (last_tok :: tokl)), last_tok, tree))
|
|
let is_antiquot s =
|
|
let len = String.length s in (len > 1) && (s.[0] = '$')
|
|
let eq_Stoken_ids s1 s2 =
|
|
(not (is_antiquot s1)) &&
|
|
((not (is_antiquot s2)) && (s1 = s2))
|
|
let logically_eq_symbols entry =
|
|
let rec eq_symbols s1 s2 =
|
|
match (s1, s2) with
|
|
| (Snterm e1, Snterm e2) -> e1.ename = e2.ename
|
|
| (Snterm e1, Sself) -> e1.ename = entry.ename
|
|
| (Sself, Snterm e2) -> entry.ename = e2.ename
|
|
| (Snterml (e1, l1), Snterml (e2, l2)) ->
|
|
(e1.ename = e2.ename) && (l1 = l2)
|
|
| (Slist0 s1, Slist0 s2) -> eq_symbols s1 s2
|
|
| (Slist0sep (s1, sep1), Slist0sep (s2, sep2)) ->
|
|
(eq_symbols s1 s2) && (eq_symbols sep1 sep2)
|
|
| (Slist1 s1, Slist1 s2) -> eq_symbols s1 s2
|
|
| (Slist1sep (s1, sep1), Slist1sep (s2, sep2)) ->
|
|
(eq_symbols s1 s2) && (eq_symbols sep1 sep2)
|
|
| (Sopt s1, Sopt s2) -> eq_symbols s1 s2
|
|
| (Stree t1, Stree t2) -> eq_trees t1 t2
|
|
| (Stoken ((_, s1)), Stoken ((_, s2))) ->
|
|
eq_Stoken_ids s1 s2
|
|
| _ -> s1 = s2
|
|
and eq_trees t1 t2 =
|
|
match (t1, t2) with
|
|
| (Node n1, Node n2) ->
|
|
(eq_symbols n1.node n2.node) &&
|
|
((eq_trees n1.son n2.son) &&
|
|
(eq_trees n1.brother n2.brother))
|
|
| ((LocAct (_, _) | DeadEnd), (LocAct (_, _) | DeadEnd))
|
|
-> true
|
|
| _ -> false
|
|
in eq_symbols
|
|
let rec eq_symbol s1 s2 =
|
|
match (s1, s2) with
|
|
| (Snterm e1, Snterm e2) -> e1 == e2
|
|
| (Snterml (e1, l1), Snterml (e2, l2)) ->
|
|
(e1 == e2) && (l1 = l2)
|
|
| (Slist0 s1, Slist0 s2) -> eq_symbol s1 s2
|
|
| (Slist0sep (s1, sep1), Slist0sep (s2, sep2)) ->
|
|
(eq_symbol s1 s2) && (eq_symbol sep1 sep2)
|
|
| (Slist1 s1, Slist1 s2) -> eq_symbol s1 s2
|
|
| (Slist1sep (s1, sep1), Slist1sep (s2, sep2)) ->
|
|
(eq_symbol s1 s2) && (eq_symbol sep1 sep2)
|
|
| (Sopt s1, Sopt s2) -> eq_symbol s1 s2
|
|
| (Stree _, Stree _) -> false
|
|
| (Stoken ((_, s1)), Stoken ((_, s2))) ->
|
|
eq_Stoken_ids s1 s2
|
|
| _ -> s1 = s2
|
|
end
|
|
end
|
|
module Print :
|
|
sig
|
|
module Make (Structure : Structure.S) :
|
|
sig
|
|
val flatten_tree :
|
|
Structure.tree -> (Structure.symbol list) list
|
|
val print_symbol :
|
|
Format.formatter -> Structure.symbol -> unit
|
|
val print_meta :
|
|
Format.formatter -> string -> Structure.symbol list -> unit
|
|
val print_symbol1 :
|
|
Format.formatter -> Structure.symbol -> unit
|
|
val print_rule :
|
|
Format.formatter -> Structure.symbol list -> unit
|
|
val print_level :
|
|
Format.formatter ->
|
|
(Format.formatter -> unit -> unit) ->
|
|
(Structure.symbol list) list -> unit
|
|
val levels : Format.formatter -> Structure.level list -> unit
|
|
val entry :
|
|
Format.formatter -> Structure.internal_entry -> unit
|
|
end
|
|
module MakeDump (Structure : Structure.S) :
|
|
sig
|
|
val print_symbol :
|
|
Format.formatter -> Structure.symbol -> unit
|
|
val print_meta :
|
|
Format.formatter -> string -> Structure.symbol list -> unit
|
|
val print_symbol1 :
|
|
Format.formatter -> Structure.symbol -> unit
|
|
val print_rule :
|
|
Format.formatter -> Structure.symbol list -> unit
|
|
val print_level :
|
|
Format.formatter ->
|
|
(Format.formatter -> unit -> unit) ->
|
|
(Structure.symbol list) list -> unit
|
|
val levels : Format.formatter -> Structure.level list -> unit
|
|
val entry :
|
|
Format.formatter -> Structure.internal_entry -> unit
|
|
end
|
|
end =
|
|
struct
|
|
module Make (Structure : Structure.S) =
|
|
struct
|
|
open Structure
|
|
open Format
|
|
open Sig.Grammar
|
|
let rec flatten_tree =
|
|
function
|
|
| DeadEnd -> []
|
|
| LocAct (_, _) -> [ [] ]
|
|
| Node { node = n; brother = b; son = s } ->
|
|
(List.map (fun l -> n :: l) (flatten_tree s)) @
|
|
(flatten_tree b)
|
|
let rec print_symbol ppf =
|
|
function
|
|
| Smeta (n, sl, _) -> print_meta ppf n sl
|
|
| Slist0 s -> fprintf ppf "LIST0 %a" print_symbol1 s
|
|
| Slist0sep (s, t) ->
|
|
fprintf ppf "LIST0 %a SEP %a" print_symbol1 s
|
|
print_symbol1 t
|
|
| Slist1 s -> fprintf ppf "LIST1 %a" print_symbol1 s
|
|
| Slist1sep (s, t) ->
|
|
fprintf ppf "LIST1 %a SEP %a" print_symbol1 s
|
|
print_symbol1 t
|
|
| Sopt s -> fprintf ppf "OPT %a" print_symbol1 s
|
|
| Snterml (e, l) -> fprintf ppf "%s@ LEVEL@ %S" e.ename l
|
|
| (Snterm _ | Snext | Sself | Stree _ | Stoken _ |
|
|
Skeyword _
|
|
as s) -> print_symbol1 ppf s
|
|
and print_meta ppf n sl =
|
|
let rec loop i =
|
|
function
|
|
| [] -> ()
|
|
| s :: sl ->
|
|
let j =
|
|
(try String.index_from n i ' '
|
|
with | Not_found -> String.length n)
|
|
in
|
|
(fprintf ppf "%s %a" (String.sub n i (j - i))
|
|
print_symbol1 s;
|
|
if sl = []
|
|
then ()
|
|
else
|
|
(fprintf ppf " ";
|
|
loop (min (j + 1) (String.length n)) sl))
|
|
in loop 0 sl
|
|
and print_symbol1 ppf =
|
|
function
|
|
| Snterm e -> pp_print_string ppf e.ename
|
|
| Sself -> pp_print_string ppf "SELF"
|
|
| Snext -> pp_print_string ppf "NEXT"
|
|
| Stoken ((_, descr)) -> pp_print_string ppf descr
|
|
| Skeyword s -> fprintf ppf "%S" s
|
|
| Stree t ->
|
|
print_level ppf pp_print_space (flatten_tree t)
|
|
| (Smeta (_, _, _) | Snterml (_, _) | Slist0 _ |
|
|
Slist0sep (_, _) | Slist1 _ | Slist1sep (_, _) |
|
|
Sopt _
|
|
as s) -> fprintf ppf "(%a)" print_symbol s
|
|
and print_rule ppf symbols =
|
|
(fprintf ppf "@[<hov 0>";
|
|
let _ =
|
|
List.fold_left
|
|
(fun sep symbol ->
|
|
(fprintf ppf "%t%a" sep print_symbol symbol;
|
|
fun ppf -> fprintf ppf ";@ "))
|
|
(fun _ -> ()) symbols
|
|
in fprintf ppf "@]")
|
|
and print_level ppf pp_print_space rules =
|
|
(fprintf ppf "@[<hov 0>[ ";
|
|
let _ =
|
|
List.fold_left
|
|
(fun sep rule ->
|
|
(fprintf ppf "%t%a" sep print_rule rule;
|
|
fun ppf -> fprintf ppf "%a| " pp_print_space ()))
|
|
(fun _ -> ()) rules
|
|
in fprintf ppf " ]@]")
|
|
let levels ppf elev =
|
|
let _ =
|
|
List.fold_left
|
|
(fun sep lev ->
|
|
let rules =
|
|
(List.map (fun t -> Sself :: t)
|
|
(flatten_tree lev.lsuffix))
|
|
@ (flatten_tree lev.lprefix)
|
|
in
|
|
(fprintf ppf "%t@[<hov 2>" sep;
|
|
(match lev.lname with
|
|
| Some n -> fprintf ppf "%S@;<1 2>" n
|
|
| None -> ());
|
|
(match lev.assoc with
|
|
| LeftA -> fprintf ppf "LEFTA"
|
|
| RightA -> fprintf ppf "RIGHTA"
|
|
| NonA -> fprintf ppf "NONA");
|
|
fprintf ppf "@]@;<1 2>";
|
|
print_level ppf pp_force_newline rules;
|
|
fun ppf -> fprintf ppf "@,| "))
|
|
(fun _ -> ()) elev
|
|
in ()
|
|
let entry ppf e =
|
|
(fprintf ppf "@[<v 0>%s: [ " e.ename;
|
|
(match e.edesc with
|
|
| Dlevels elev -> levels ppf elev
|
|
| Dparser _ -> fprintf ppf "<parser>");
|
|
fprintf ppf " ]@]")
|
|
end
|
|
module MakeDump (Structure : Structure.S) =
|
|
struct
|
|
open Structure
|
|
open Format
|
|
open Sig.Grammar
|
|
type brothers = | Bro of symbol * brothers list
|
|
let rec print_tree ppf tree =
|
|
let rec get_brothers acc =
|
|
function
|
|
| DeadEnd -> List.rev acc
|
|
| LocAct (_, _) -> List.rev acc
|
|
| Node { node = n; brother = b; son = s } ->
|
|
get_brothers ((Bro (n, get_brothers [] s)) :: acc) b
|
|
and print_brothers ppf brothers =
|
|
if brothers = []
|
|
then fprintf ppf "@ []"
|
|
else
|
|
List.iter
|
|
(function
|
|
| Bro (n, xs) ->
|
|
(fprintf ppf "@ @[<hv2>- %a" print_symbol n;
|
|
(match xs with
|
|
| [] -> ()
|
|
| [ _ ] ->
|
|
(try
|
|
print_children ppf (get_children [] xs)
|
|
with
|
|
| Exit ->
|
|
fprintf ppf ":%a" print_brothers xs)
|
|
| _ -> fprintf ppf ":%a" print_brothers xs);
|
|
fprintf ppf "@]"))
|
|
brothers
|
|
and print_children ppf =
|
|
List.iter (fprintf ppf ";@ %a" print_symbol)
|
|
and get_children acc =
|
|
function
|
|
| [] -> List.rev acc
|
|
| [ Bro (n, x) ] -> get_children (n :: acc) x
|
|
| _ -> raise Exit
|
|
in print_brothers ppf (get_brothers [] tree)
|
|
and print_symbol ppf =
|
|
function
|
|
| Smeta (n, sl, _) -> print_meta ppf n sl
|
|
| Slist0 s -> fprintf ppf "LIST0 %a" print_symbol1 s
|
|
| Slist0sep (s, t) ->
|
|
fprintf ppf "LIST0 %a SEP %a" print_symbol1 s
|
|
print_symbol1 t
|
|
| Slist1 s -> fprintf ppf "LIST1 %a" print_symbol1 s
|
|
| Slist1sep (s, t) ->
|
|
fprintf ppf "LIST1 %a SEP %a" print_symbol1 s
|
|
print_symbol1 t
|
|
| Sopt s -> fprintf ppf "OPT %a" print_symbol1 s
|
|
| Snterml (e, l) -> fprintf ppf "%s@ LEVEL@ %S" e.ename l
|
|
| (Snterm _ | Snext | Sself | Stree _ | Stoken _ |
|
|
Skeyword _
|
|
as s) -> print_symbol1 ppf s
|
|
and print_meta ppf n sl =
|
|
let rec loop i =
|
|
function
|
|
| [] -> ()
|
|
| s :: sl ->
|
|
let j =
|
|
(try String.index_from n i ' '
|
|
with | Not_found -> String.length n)
|
|
in
|
|
(fprintf ppf "%s %a" (String.sub n i (j - i))
|
|
print_symbol1 s;
|
|
if sl = []
|
|
then ()
|
|
else
|
|
(fprintf ppf " ";
|
|
loop (min (j + 1) (String.length n)) sl))
|
|
in loop 0 sl
|
|
and print_symbol1 ppf =
|
|
function
|
|
| Snterm e -> pp_print_string ppf e.ename
|
|
| Sself -> pp_print_string ppf "SELF"
|
|
| Snext -> pp_print_string ppf "NEXT"
|
|
| Stoken ((_, descr)) -> pp_print_string ppf descr
|
|
| Skeyword s -> fprintf ppf "%S" s
|
|
| Stree t -> print_tree ppf t
|
|
| (Smeta (_, _, _) | Snterml (_, _) | Slist0 _ |
|
|
Slist0sep (_, _) | Slist1 _ | Slist1sep (_, _) |
|
|
Sopt _
|
|
as s) -> fprintf ppf "(%a)" print_symbol s
|
|
and print_rule ppf symbols =
|
|
(fprintf ppf "@[<hov 0>";
|
|
let _ =
|
|
List.fold_left
|
|
(fun sep symbol ->
|
|
(fprintf ppf "%t%a" sep print_symbol symbol;
|
|
fun ppf -> fprintf ppf ";@ "))
|
|
(fun _ -> ()) symbols
|
|
in fprintf ppf "@]")
|
|
and print_level ppf pp_print_space rules =
|
|
(fprintf ppf "@[<hov 0>[ ";
|
|
let _ =
|
|
List.fold_left
|
|
(fun sep rule ->
|
|
(fprintf ppf "%t%a" sep print_rule rule;
|
|
fun ppf -> fprintf ppf "%a| " pp_print_space ()))
|
|
(fun _ -> ()) rules
|
|
in fprintf ppf " ]@]")
|
|
let levels ppf elev =
|
|
let _ =
|
|
List.fold_left
|
|
(fun sep lev ->
|
|
(fprintf ppf "%t@[<v2>" sep;
|
|
(match lev.lname with
|
|
| Some n -> fprintf ppf "%S@;<1 2>" n
|
|
| None -> ());
|
|
(match lev.assoc with
|
|
| LeftA -> fprintf ppf "LEFTA"
|
|
| RightA -> fprintf ppf "RIGHTA"
|
|
| NonA -> fprintf ppf "NONA");
|
|
fprintf ppf "@]@;<1 2>";
|
|
fprintf ppf "@[<v2>suffix:@ ";
|
|
print_tree ppf lev.lsuffix;
|
|
fprintf ppf "@]@ @[<v2>prefix:@ ";
|
|
print_tree ppf lev.lprefix;
|
|
fprintf ppf "@]";
|
|
fun ppf -> fprintf ppf "@,| "))
|
|
(fun _ -> ()) elev
|
|
in ()
|
|
let entry ppf e =
|
|
(fprintf ppf "@[<v 0>%s: [ " e.ename;
|
|
(match e.edesc with
|
|
| Dlevels elev -> levels ppf elev
|
|
| Dparser _ -> fprintf ppf "<parser>");
|
|
fprintf ppf " ]@]")
|
|
end
|
|
end
|
|
module Failed =
|
|
struct
|
|
module Make (Structure : Structure.S) =
|
|
struct
|
|
module Tools = Tools.Make(Structure)
|
|
module Search = Search.Make(Structure)
|
|
module Print = Print.Make(Structure)
|
|
open Structure
|
|
open Format
|
|
let rec name_of_symbol entry =
|
|
function
|
|
| Snterm e -> "[" ^ (e.ename ^ "]")
|
|
| Snterml (e, l) ->
|
|
"[" ^ (e.ename ^ (" level " ^ (l ^ "]")))
|
|
| Sself | Snext -> "[" ^ (entry.ename ^ "]")
|
|
| Stoken ((_, descr)) -> descr
|
|
| Skeyword kwd -> "\"" ^ (kwd ^ "\"")
|
|
| _ -> "???"
|
|
let rec name_of_symbol_failed entry =
|
|
function
|
|
| Slist0 s -> name_of_symbol_failed entry s
|
|
| Slist0sep (s, _) -> name_of_symbol_failed entry s
|
|
| Slist1 s -> name_of_symbol_failed entry s
|
|
| Slist1sep (s, _) -> name_of_symbol_failed entry s
|
|
| Sopt s -> name_of_symbol_failed entry s
|
|
| Stree t -> name_of_tree_failed entry t
|
|
| s -> name_of_symbol entry s
|
|
and name_of_tree_failed entry =
|
|
function
|
|
| Node { node = s; brother = bro; son = son } ->
|
|
let tokl =
|
|
(match s with
|
|
| Stoken _ | Skeyword _ ->
|
|
Tools.get_token_list entry [] s son
|
|
| _ -> None)
|
|
in
|
|
(match tokl with
|
|
| None ->
|
|
let txt = name_of_symbol_failed entry s in
|
|
let txt =
|
|
(match (s, son) with
|
|
| (Sopt _, Node _) ->
|
|
txt ^
|
|
(" or " ^
|
|
(name_of_tree_failed entry son))
|
|
| _ -> txt) in
|
|
let txt =
|
|
(match bro with
|
|
| DeadEnd | LocAct (_, _) -> txt
|
|
| Node _ ->
|
|
txt ^
|
|
(" or " ^
|
|
(name_of_tree_failed entry bro)))
|
|
in txt
|
|
| Some ((tokl, _, _)) ->
|
|
List.fold_left
|
|
(fun s tok ->
|
|
(if s = "" then "" else s ^ " then ") ^
|
|
(match tok with
|
|
| Stoken ((_, descr)) -> descr
|
|
| Skeyword kwd -> kwd
|
|
| _ -> assert false))
|
|
"" tokl)
|
|
| DeadEnd | LocAct (_, _) -> "???"
|
|
let magic _s x = Obj.magic x
|
|
let tree_failed entry prev_symb_result prev_symb tree =
|
|
let txt = name_of_tree_failed entry tree in
|
|
let txt =
|
|
match prev_symb with
|
|
| Slist0 s ->
|
|
let txt1 = name_of_symbol_failed entry s
|
|
in txt1 ^ (" or " ^ (txt ^ " expected"))
|
|
| Slist1 s ->
|
|
let txt1 = name_of_symbol_failed entry s
|
|
in txt1 ^ (" or " ^ (txt ^ " expected"))
|
|
| Slist0sep (s, sep) ->
|
|
(match magic "tree_failed: 'a -> list 'b"
|
|
prev_symb_result
|
|
with
|
|
| [] ->
|
|
let txt1 = name_of_symbol_failed entry s
|
|
in txt1 ^ (" or " ^ (txt ^ " expected"))
|
|
| _ ->
|
|
let txt1 = name_of_symbol_failed entry sep
|
|
in txt1 ^ (" or " ^ (txt ^ " expected")))
|
|
| Slist1sep (s, sep) ->
|
|
(match magic "tree_failed: 'a -> list 'b"
|
|
prev_symb_result
|
|
with
|
|
| [] ->
|
|
let txt1 = name_of_symbol_failed entry s
|
|
in txt1 ^ (" or " ^ (txt ^ " expected"))
|
|
| _ ->
|
|
let txt1 = name_of_symbol_failed entry sep
|
|
in txt1 ^ (" or " ^ (txt ^ " expected")))
|
|
| Sopt _ | Stree _ -> txt ^ " expected"
|
|
| _ ->
|
|
txt ^
|
|
(" expected after " ^
|
|
(name_of_symbol entry prev_symb))
|
|
in
|
|
(if !(entry.egram.error_verbose)
|
|
then
|
|
(let tree =
|
|
Search.tree_in_entry prev_symb tree entry.edesc in
|
|
let ppf = err_formatter
|
|
in
|
|
(fprintf ppf "@[<v 0>@,";
|
|
fprintf ppf "----------------------------------@,";
|
|
fprintf ppf
|
|
"Parse error in entry [%s], rule:@;<0 2>"
|
|
entry.ename;
|
|
fprintf ppf "@[";
|
|
Print.print_level ppf pp_force_newline
|
|
(Print.flatten_tree tree);
|
|
fprintf ppf "@]@,";
|
|
fprintf ppf "----------------------------------@,";
|
|
fprintf ppf "@]@."))
|
|
else ();
|
|
txt ^ (" (in [" ^ (entry.ename ^ "])")))
|
|
let symb_failed entry prev_symb_result prev_symb symb =
|
|
let tree =
|
|
Node { node = symb; brother = DeadEnd; son = DeadEnd; }
|
|
in tree_failed entry prev_symb_result prev_symb tree
|
|
let symb_failed_txt e s1 s2 = symb_failed e 0 s1 s2
|
|
end
|
|
end
|
|
module Parser =
|
|
struct
|
|
module Make (Structure : Structure.S) =
|
|
struct
|
|
module Tools = Tools.Make(Structure)
|
|
module Failed = Failed.Make(Structure)
|
|
module Print = Print.Make(Structure)
|
|
open Structure
|
|
open Sig.Grammar
|
|
module Stream =
|
|
struct
|
|
include Stream
|
|
let junk strm = Context.junk strm
|
|
let count strm = Context.bp strm
|
|
end
|
|
let add_loc c bp parse_fun strm =
|
|
let x = parse_fun c strm in
|
|
let ep = Context.loc_ep c in
|
|
let loc = Loc.merge bp ep in (x, loc)
|
|
let level_number entry lab =
|
|
let rec lookup levn =
|
|
function
|
|
| [] -> failwith ("unknown level " ^ lab)
|
|
| lev :: levs ->
|
|
if Tools.is_level_labelled lab lev
|
|
then levn
|
|
else lookup (succ levn) levs
|
|
in
|
|
match entry.edesc with
|
|
| Dlevels elev -> lookup 0 elev
|
|
| Dparser _ -> raise Not_found
|
|
let strict_parsing = ref false
|
|
let strict_parsing_warning = ref false
|
|
let rec top_symb entry =
|
|
function
|
|
| Sself | Snext -> Snterm entry
|
|
| Snterml (e, _) -> Snterm e
|
|
| Slist1sep (s, sep) -> Slist1sep (top_symb entry s, sep)
|
|
| _ -> raise Stream.Failure
|
|
let top_tree entry =
|
|
function
|
|
| Node { node = s; brother = bro; son = son } ->
|
|
Node
|
|
{ node = top_symb entry s; brother = bro; son = son;
|
|
}
|
|
| LocAct (_, _) | DeadEnd -> raise Stream.Failure
|
|
let entry_of_symb entry =
|
|
function
|
|
| Sself | Snext -> entry
|
|
| Snterm e -> e
|
|
| Snterml (e, _) -> e
|
|
| _ -> raise Stream.Failure
|
|
let continue entry loc a s c son p1 (__strm : _ Stream.t) =
|
|
let a =
|
|
(entry_of_symb entry s).econtinue 0 loc a c __strm in
|
|
let act =
|
|
try p1 __strm
|
|
with
|
|
| Stream.Failure ->
|
|
raise
|
|
(Stream.Error (Failed.tree_failed entry a s son))
|
|
in Action.mk (fun _ -> Action.getf act a)
|
|
let skip_if_empty c bp p strm =
|
|
if (Context.loc_ep c) == bp
|
|
then Action.mk (fun _ -> p strm)
|
|
else raise Stream.Failure
|
|
let do_recover parser_of_tree entry nlevn alevn loc a s c son
|
|
(__strm : _ Stream.t) =
|
|
try
|
|
parser_of_tree entry nlevn alevn (top_tree entry son) c
|
|
__strm
|
|
with
|
|
| Stream.Failure ->
|
|
(try
|
|
skip_if_empty c loc
|
|
(fun (__strm : _ Stream.t) -> raise Stream.Failure)
|
|
__strm
|
|
with
|
|
| Stream.Failure ->
|
|
continue entry loc a s c son
|
|
(parser_of_tree entry nlevn alevn son c) __strm)
|
|
let recover parser_of_tree entry nlevn alevn loc a s c son
|
|
strm =
|
|
if !strict_parsing
|
|
then
|
|
raise (Stream.Error (Failed.tree_failed entry a s son))
|
|
else
|
|
(let _ =
|
|
if !strict_parsing_warning
|
|
then
|
|
(let msg = Failed.tree_failed entry a s son
|
|
in
|
|
(Format.eprintf
|
|
"Warning: trying to recover from syntax error";
|
|
if entry.ename <> ""
|
|
then Format.eprintf " in [%s]" entry.ename
|
|
else ();
|
|
Format.eprintf "\n%s%a@." msg Loc.print loc))
|
|
else ()
|
|
in
|
|
do_recover parser_of_tree entry nlevn alevn loc a s c
|
|
son strm)
|
|
let rec parser_of_tree entry nlevn alevn =
|
|
function
|
|
| DeadEnd ->
|
|
(fun _ (__strm : _ Stream.t) -> raise Stream.Failure)
|
|
| LocAct (act, _) -> (fun _ (__strm : _ Stream.t) -> act)
|
|
| Node
|
|
{
|
|
node = Sself;
|
|
son = LocAct (act, _);
|
|
brother = DeadEnd
|
|
} ->
|
|
(fun c (__strm : _ Stream.t) ->
|
|
let a = entry.estart alevn c __strm
|
|
in Action.getf act a)
|
|
| Node { node = Sself; son = LocAct (act, _); brother = bro
|
|
} ->
|
|
let p2 = parser_of_tree entry nlevn alevn bro
|
|
in
|
|
(fun c (__strm : _ Stream.t) ->
|
|
match try Some (entry.estart alevn c __strm)
|
|
with | Stream.Failure -> None
|
|
with
|
|
| Some a -> Action.getf act a
|
|
| _ -> p2 c __strm)
|
|
| Node { node = s; son = son; brother = DeadEnd } ->
|
|
let tokl =
|
|
(match s with
|
|
| Stoken _ | Skeyword _ ->
|
|
Tools.get_token_list entry [] s son
|
|
| _ -> None)
|
|
in
|
|
(match tokl with
|
|
| None ->
|
|
let ps = parser_of_symbol entry nlevn s in
|
|
let p1 = parser_of_tree entry nlevn alevn son in
|
|
let p1 = parser_cont p1 entry nlevn alevn s son
|
|
in
|
|
(fun c (__strm : _ Stream.t) ->
|
|
let bp = Stream.count __strm in
|
|
let a = ps c __strm in
|
|
let act =
|
|
try p1 c bp a __strm
|
|
with
|
|
| Stream.Failure ->
|
|
raise (Stream.Error "")
|
|
in Action.getf act a)
|
|
| Some ((tokl, last_tok, son)) ->
|
|
let p1 = parser_of_tree entry nlevn alevn son in
|
|
let p1 =
|
|
parser_cont p1 entry nlevn alevn last_tok son
|
|
in parser_of_token_list p1 tokl)
|
|
| Node { node = s; son = son; brother = bro } ->
|
|
let tokl =
|
|
(match s with
|
|
| Stoken _ | Skeyword _ ->
|
|
Tools.get_token_list entry [] s son
|
|
| _ -> None)
|
|
in
|
|
(match tokl with
|
|
| None ->
|
|
let ps = parser_of_symbol entry nlevn s in
|
|
let p1 = parser_of_tree entry nlevn alevn son in
|
|
let p1 =
|
|
parser_cont p1 entry nlevn alevn s son in
|
|
let p2 = parser_of_tree entry nlevn alevn bro
|
|
in
|
|
(fun c (__strm : _ Stream.t) ->
|
|
let bp = Stream.count __strm
|
|
in
|
|
match try Some (ps c __strm)
|
|
with | Stream.Failure -> None
|
|
with
|
|
| Some a ->
|
|
let act =
|
|
(try p1 c bp a __strm
|
|
with
|
|
| Stream.Failure ->
|
|
raise (Stream.Error ""))
|
|
in Action.getf act a
|
|
| _ -> p2 c __strm)
|
|
| Some ((tokl, last_tok, son)) ->
|
|
let p1 = parser_of_tree entry nlevn alevn son in
|
|
let p1 =
|
|
parser_cont p1 entry nlevn alevn last_tok son in
|
|
let p1 = parser_of_token_list p1 tokl in
|
|
let p2 = parser_of_tree entry nlevn alevn bro
|
|
in
|
|
(fun c (__strm : _ Stream.t) ->
|
|
try p1 c __strm
|
|
with | Stream.Failure -> p2 c __strm))
|
|
and
|
|
parser_cont p1 entry nlevn alevn s son c loc a
|
|
(__strm : _ Stream.t) =
|
|
try p1 c __strm
|
|
with
|
|
| Stream.Failure ->
|
|
(try
|
|
recover parser_of_tree entry nlevn alevn loc a s c
|
|
son __strm
|
|
with
|
|
| Stream.Failure ->
|
|
raise
|
|
(Stream.Error (Failed.tree_failed entry a s son)))
|
|
and parser_of_token_list p1 tokl =
|
|
let rec loop n =
|
|
function
|
|
| Stoken ((tematch, _)) :: tokl ->
|
|
(match tokl with
|
|
| [] ->
|
|
let ps c _ =
|
|
(match Context.peek_nth c n with
|
|
| Some ((tok, _)) when tematch tok ->
|
|
(Context.njunk c n; Action.mk tok)
|
|
| _ -> raise Stream.Failure)
|
|
in
|
|
(fun c (__strm : _ Stream.t) ->
|
|
let bp = Stream.count __strm in
|
|
let a = ps c __strm in
|
|
let act =
|
|
try p1 c bp a __strm
|
|
with
|
|
| Stream.Failure ->
|
|
raise (Stream.Error "")
|
|
in Action.getf act a)
|
|
| _ ->
|
|
let ps c _ =
|
|
(match Context.peek_nth c n with
|
|
| Some ((tok, _)) when tematch tok -> tok
|
|
| _ -> raise Stream.Failure) in
|
|
let p1 = loop (n + 1) tokl
|
|
in
|
|
(fun c (__strm : _ Stream.t) ->
|
|
let tok = ps c __strm in
|
|
let s = __strm in
|
|
let act = p1 c s in Action.getf act tok))
|
|
| Skeyword kwd :: tokl ->
|
|
(match tokl with
|
|
| [] ->
|
|
let ps c _ =
|
|
(match Context.peek_nth c n with
|
|
| Some ((tok, _)) when
|
|
Token.match_keyword kwd tok ->
|
|
(Context.njunk c n; Action.mk tok)
|
|
| _ -> raise Stream.Failure)
|
|
in
|
|
(fun c (__strm : _ Stream.t) ->
|
|
let bp = Stream.count __strm in
|
|
let a = ps c __strm in
|
|
let act =
|
|
try p1 c bp a __strm
|
|
with
|
|
| Stream.Failure ->
|
|
raise (Stream.Error "")
|
|
in Action.getf act a)
|
|
| _ ->
|
|
let ps c _ =
|
|
(match Context.peek_nth c n with
|
|
| Some ((tok, _)) when
|
|
Token.match_keyword kwd tok -> tok
|
|
| _ -> raise Stream.Failure) in
|
|
let p1 = loop (n + 1) tokl
|
|
in
|
|
(fun c (__strm : _ Stream.t) ->
|
|
let tok = ps c __strm in
|
|
let s = __strm in
|
|
let act = p1 c s in Action.getf act tok))
|
|
| _ -> invalid_arg "parser_of_token_list"
|
|
in loop 1 tokl
|
|
and parser_of_symbol entry nlevn =
|
|
function
|
|
| Smeta (_, symbl, act) ->
|
|
let act = Obj.magic act entry symbl in
|
|
let pl = List.map (parser_of_symbol entry nlevn) symbl
|
|
in
|
|
(fun c ->
|
|
Obj.magic
|
|
(List.fold_left
|
|
(fun act p -> Obj.magic act (p c)) act pl))
|
|
| Slist0 s ->
|
|
let ps = parser_of_symbol entry nlevn s in
|
|
let rec loop c al (__strm : _ Stream.t) =
|
|
(match try Some (ps c __strm)
|
|
with | Stream.Failure -> None
|
|
with
|
|
| Some a -> loop c (a :: al) __strm
|
|
| _ -> al)
|
|
in
|
|
(fun c (__strm : _ Stream.t) ->
|
|
let a = loop c [] __strm in Action.mk (List.rev a))
|
|
| Slist0sep (symb, sep) ->
|
|
let ps = parser_of_symbol entry nlevn symb in
|
|
let pt = parser_of_symbol entry nlevn sep in
|
|
let rec kont c al (__strm : _ Stream.t) =
|
|
(match try Some (pt c __strm)
|
|
with | Stream.Failure -> None
|
|
with
|
|
| Some v ->
|
|
let a =
|
|
(try ps c __strm
|
|
with
|
|
| Stream.Failure ->
|
|
raise
|
|
(Stream.Error
|
|
(Failed.symb_failed entry v sep symb)))
|
|
in kont c (a :: al) __strm
|
|
| _ -> al)
|
|
in
|
|
(fun c (__strm : _ Stream.t) ->
|
|
match try Some (ps c __strm)
|
|
with | Stream.Failure -> None
|
|
with
|
|
| Some a ->
|
|
let s = __strm
|
|
in Action.mk (List.rev (kont c [ a ] s))
|
|
| _ -> Action.mk [])
|
|
| Slist1 s ->
|
|
let ps = parser_of_symbol entry nlevn s in
|
|
let rec loop c al (__strm : _ Stream.t) =
|
|
(match try Some (ps c __strm)
|
|
with | Stream.Failure -> None
|
|
with
|
|
| Some a -> loop c (a :: al) __strm
|
|
| _ -> al)
|
|
in
|
|
(fun c (__strm : _ Stream.t) ->
|
|
let a = ps c __strm in
|
|
let s = __strm
|
|
in Action.mk (List.rev (loop c [ a ] s)))
|
|
| Slist1sep (symb, sep) ->
|
|
let ps = parser_of_symbol entry nlevn symb in
|
|
let pt = parser_of_symbol entry nlevn sep in
|
|
let rec kont c al (__strm : _ Stream.t) =
|
|
(match try Some (pt c __strm)
|
|
with | Stream.Failure -> None
|
|
with
|
|
| Some v ->
|
|
let a =
|
|
(try ps c __strm
|
|
with
|
|
| Stream.Failure ->
|
|
(try parse_top_symb' entry symb c __strm
|
|
with
|
|
| Stream.Failure ->
|
|
raise
|
|
(Stream.Error
|
|
(Failed.symb_failed entry v sep
|
|
symb))))
|
|
in kont c (a :: al) __strm
|
|
| _ -> al)
|
|
in
|
|
(fun c (__strm : _ Stream.t) ->
|
|
let a = ps c __strm in
|
|
let s = __strm
|
|
in Action.mk (List.rev (kont c [ a ] s)))
|
|
| Sopt s ->
|
|
let ps = parser_of_symbol entry nlevn s
|
|
in
|
|
(fun c (__strm : _ Stream.t) ->
|
|
match try Some (ps c __strm)
|
|
with | Stream.Failure -> None
|
|
with
|
|
| Some a -> Action.mk (Some a)
|
|
| _ -> Action.mk None)
|
|
| Stree t ->
|
|
let pt = parser_of_tree entry 1 0 t
|
|
in
|
|
(fun c (__strm : _ Stream.t) ->
|
|
let bp = Stream.count __strm in
|
|
let (act, loc) = add_loc c bp pt __strm
|
|
in Action.getf act loc)
|
|
| Snterm e ->
|
|
(fun c (__strm : _ Stream.t) -> e.estart 0 c __strm)
|
|
| Snterml (e, l) ->
|
|
(fun c (__strm : _ Stream.t) ->
|
|
e.estart (level_number e l) c __strm)
|
|
| Sself ->
|
|
(fun c (__strm : _ Stream.t) -> entry.estart 0 c __strm)
|
|
| Snext ->
|
|
(fun c (__strm : _ Stream.t) ->
|
|
entry.estart nlevn c __strm)
|
|
| Skeyword kwd ->
|
|
(fun _ (__strm : _ Stream.t) ->
|
|
match Stream.peek __strm with
|
|
| Some ((tok, _)) when Token.match_keyword kwd tok
|
|
-> (Stream.junk __strm; Action.mk tok)
|
|
| _ -> raise Stream.Failure)
|
|
| Stoken ((f, _)) ->
|
|
(fun _ (__strm : _ Stream.t) ->
|
|
match Stream.peek __strm with
|
|
| Some ((tok, _)) when f tok ->
|
|
(Stream.junk __strm; Action.mk tok)
|
|
| _ -> raise Stream.Failure)
|
|
and parse_top_symb' entry symb c =
|
|
parser_of_symbol entry 0 (top_symb entry symb) c
|
|
and parse_top_symb entry symb strm =
|
|
Context.call_with_ctx strm
|
|
(fun c -> parse_top_symb' entry symb c (Context.stream c))
|
|
let rec start_parser_of_levels entry clevn =
|
|
function
|
|
| [] ->
|
|
(fun _ _ (__strm : _ Stream.t) -> raise Stream.Failure)
|
|
| lev :: levs ->
|
|
let p1 = start_parser_of_levels entry (succ clevn) levs
|
|
in
|
|
(match lev.lprefix with
|
|
| DeadEnd -> p1
|
|
| tree ->
|
|
let alevn =
|
|
(match lev.assoc with
|
|
| LeftA | NonA -> succ clevn
|
|
| RightA -> clevn) in
|
|
let p2 =
|
|
parser_of_tree entry (succ clevn) alevn tree
|
|
in
|
|
(match levs with
|
|
| [] ->
|
|
(fun levn c (__strm : _ Stream.t) ->
|
|
let bp = Stream.count __strm in
|
|
let (act, loc) =
|
|
add_loc c bp p2 __strm in
|
|
let strm = __strm in
|
|
let a = Action.getf act loc
|
|
in entry.econtinue levn loc a c strm)
|
|
| _ ->
|
|
(fun levn c strm ->
|
|
if levn > clevn
|
|
then p1 levn c strm
|
|
else
|
|
(let (__strm : _ Stream.t) = strm in
|
|
let bp = Stream.count __strm
|
|
in
|
|
match try
|
|
Some
|
|
(add_loc c bp p2 __strm)
|
|
with
|
|
| Stream.Failure -> None
|
|
with
|
|
| Some ((act, loc)) ->
|
|
let a = Action.getf act loc
|
|
in
|
|
entry.econtinue levn loc a
|
|
c strm
|
|
| _ -> p1 levn c __strm))))
|
|
let start_parser_of_entry entry =
|
|
match entry.edesc with
|
|
| Dlevels [] -> Tools.empty_entry entry.ename
|
|
| Dlevels elev -> start_parser_of_levels entry 0 elev
|
|
| Dparser p -> (fun _ _ strm -> p strm)
|
|
let rec continue_parser_of_levels entry clevn =
|
|
function
|
|
| [] ->
|
|
(fun _ _ _ _ (__strm : _ Stream.t) ->
|
|
raise Stream.Failure)
|
|
| lev :: levs ->
|
|
let p1 =
|
|
continue_parser_of_levels entry (succ clevn) levs
|
|
in
|
|
(match lev.lsuffix with
|
|
| DeadEnd -> p1
|
|
| tree ->
|
|
let alevn =
|
|
(match lev.assoc with
|
|
| LeftA | NonA -> succ clevn
|
|
| RightA -> clevn) in
|
|
let p2 =
|
|
parser_of_tree entry (succ clevn) alevn tree
|
|
in
|
|
(fun c levn bp a strm ->
|
|
if levn > clevn
|
|
then p1 c levn bp a strm
|
|
else
|
|
(let (__strm : _ Stream.t) = strm in
|
|
let bp = Stream.count __strm
|
|
in
|
|
try p1 c levn bp a __strm
|
|
with
|
|
| Stream.Failure ->
|
|
let (act, loc) =
|
|
add_loc c bp p2 __strm in
|
|
let a = Action.getf2 act a loc
|
|
in
|
|
entry.econtinue levn loc a c
|
|
strm)))
|
|
let continue_parser_of_entry entry =
|
|
match entry.edesc with
|
|
| Dlevels elev ->
|
|
let p = continue_parser_of_levels entry 0 elev
|
|
in
|
|
(fun levn bp a c (__strm : _ Stream.t) ->
|
|
try p c levn bp a __strm
|
|
with | Stream.Failure -> a)
|
|
| Dparser _ ->
|
|
(fun _ _ _ _ (__strm : _ Stream.t) ->
|
|
raise Stream.Failure)
|
|
end
|
|
end
|
|
module Insert =
|
|
struct
|
|
module Make (Structure : Structure.S) =
|
|
struct
|
|
module Tools = Tools.Make(Structure)
|
|
module Parser = Parser.Make(Structure)
|
|
open Structure
|
|
open Format
|
|
open Sig.Grammar
|
|
let is_before s1 s2 =
|
|
match (s1, s2) with
|
|
| ((Skeyword _ | Stoken _), (Skeyword _ | Stoken _)) ->
|
|
false
|
|
| ((Skeyword _ | Stoken _), _) -> true
|
|
| _ -> false
|
|
let rec derive_eps =
|
|
function
|
|
| Slist0 _ -> true
|
|
| Slist0sep (_, _) -> true
|
|
| Sopt _ -> true
|
|
| Stree t -> tree_derive_eps t
|
|
| Smeta (_, _, _) | Slist1 _ | Slist1sep (_, _) | Snterm _
|
|
| Snterml (_, _) | Snext | Sself | Stoken _ |
|
|
Skeyword _ -> false
|
|
and tree_derive_eps =
|
|
function
|
|
| LocAct (_, _) -> true
|
|
| Node { node = s; brother = bro; son = son } ->
|
|
((derive_eps s) && (tree_derive_eps son)) ||
|
|
(tree_derive_eps bro)
|
|
| DeadEnd -> false
|
|
let empty_lev lname assoc =
|
|
let assoc = match assoc with | Some a -> a | None -> LeftA
|
|
in
|
|
{
|
|
assoc = assoc;
|
|
lname = lname;
|
|
lsuffix = DeadEnd;
|
|
lprefix = DeadEnd;
|
|
}
|
|
let change_lev entry lev n lname assoc =
|
|
let a =
|
|
match assoc with
|
|
| None -> lev.assoc
|
|
| Some a ->
|
|
(if
|
|
(a <> lev.assoc) && !(entry.egram.warning_verbose)
|
|
then
|
|
(eprintf
|
|
"<W> Changing associativity of level \"%s\"\n"
|
|
n;
|
|
flush stderr)
|
|
else ();
|
|
a)
|
|
in
|
|
((match lname with
|
|
| Some n ->
|
|
if
|
|
(lname <> lev.lname) &&
|
|
!(entry.egram.warning_verbose)
|
|
then
|
|
(eprintf "<W> Level label \"%s\" ignored\n" n;
|
|
flush stderr)
|
|
else ()
|
|
| None -> ());
|
|
{
|
|
assoc = a;
|
|
lname = lev.lname;
|
|
lsuffix = lev.lsuffix;
|
|
lprefix = lev.lprefix;
|
|
})
|
|
let change_to_self entry =
|
|
function | Snterm e when e == entry -> Sself | x -> x
|
|
let get_level entry position levs =
|
|
match position with
|
|
| Some First -> ([], empty_lev, levs)
|
|
| Some Last -> (levs, empty_lev, [])
|
|
| Some (Level n) ->
|
|
let rec get =
|
|
(function
|
|
| [] ->
|
|
(eprintf
|
|
"No level labelled \"%s\" in entry \"%s\"\n"
|
|
n entry.ename;
|
|
flush stderr;
|
|
failwith "Grammar.extend")
|
|
| lev :: levs ->
|
|
if Tools.is_level_labelled n lev
|
|
then ([], (change_lev entry lev n), levs)
|
|
else
|
|
(let (levs1, rlev, levs2) = get levs
|
|
in ((lev :: levs1), rlev, levs2)))
|
|
in get levs
|
|
| Some (Before n) ->
|
|
let rec get =
|
|
(function
|
|
| [] ->
|
|
(eprintf
|
|
"No level labelled \"%s\" in entry \"%s\"\n"
|
|
n entry.ename;
|
|
flush stderr;
|
|
failwith "Grammar.extend")
|
|
| lev :: levs ->
|
|
if Tools.is_level_labelled n lev
|
|
then ([], empty_lev, (lev :: levs))
|
|
else
|
|
(let (levs1, rlev, levs2) = get levs
|
|
in ((lev :: levs1), rlev, levs2)))
|
|
in get levs
|
|
| Some (After n) ->
|
|
let rec get =
|
|
(function
|
|
| [] ->
|
|
(eprintf
|
|
"No level labelled \"%s\" in entry \"%s\"\n"
|
|
n entry.ename;
|
|
flush stderr;
|
|
failwith "Grammar.extend")
|
|
| lev :: levs ->
|
|
if Tools.is_level_labelled n lev
|
|
then ([ lev ], empty_lev, levs)
|
|
else
|
|
(let (levs1, rlev, levs2) = get levs
|
|
in ((lev :: levs1), rlev, levs2)))
|
|
in get levs
|
|
| None ->
|
|
(match levs with
|
|
| lev :: levs ->
|
|
([], (change_lev entry lev "<top>"), levs)
|
|
| [] -> ([], empty_lev, []))
|
|
let rec check_gram entry =
|
|
function
|
|
| Snterm e ->
|
|
if e.egram != entry.egram
|
|
then
|
|
(eprintf
|
|
"\
|
|
Error: entries \"%s\" and \"%s\" do not belong to the same grammar.\n"
|
|
entry.ename e.ename;
|
|
flush stderr;
|
|
failwith "Grammar.extend error")
|
|
else ()
|
|
| Snterml (e, _) ->
|
|
if e.egram != entry.egram
|
|
then
|
|
(eprintf
|
|
"\
|
|
Error: entries \"%s\" and \"%s\" do not belong to the same grammar.\n"
|
|
entry.ename e.ename;
|
|
flush stderr;
|
|
failwith "Grammar.extend error")
|
|
else ()
|
|
| Smeta (_, sl, _) -> List.iter (check_gram entry) sl
|
|
| Slist0sep (s, t) ->
|
|
(check_gram entry t; check_gram entry s)
|
|
| Slist1sep (s, t) ->
|
|
(check_gram entry t; check_gram entry s)
|
|
| Slist0 s -> check_gram entry s
|
|
| Slist1 s -> check_gram entry s
|
|
| Sopt s -> check_gram entry s
|
|
| Stree t -> tree_check_gram entry t
|
|
| Snext | Sself | Stoken _ | Skeyword _ -> ()
|
|
and tree_check_gram entry =
|
|
function
|
|
| Node { node = n; brother = bro; son = son } ->
|
|
(check_gram entry n;
|
|
tree_check_gram entry bro;
|
|
tree_check_gram entry son)
|
|
| LocAct (_, _) | DeadEnd -> ()
|
|
let get_initial =
|
|
function
|
|
| Sself :: symbols -> (true, symbols)
|
|
| symbols -> (false, symbols)
|
|
let insert_tokens gram symbols =
|
|
let rec insert =
|
|
function
|
|
| Smeta (_, sl, _) -> List.iter insert sl
|
|
| Slist0 s -> insert s
|
|
| Slist1 s -> insert s
|
|
| Slist0sep (s, t) -> (insert s; insert t)
|
|
| Slist1sep (s, t) -> (insert s; insert t)
|
|
| Sopt s -> insert s
|
|
| Stree t -> tinsert t
|
|
| Skeyword kwd -> using gram kwd
|
|
| Snterm _ | Snterml (_, _) | Snext | Sself | Stoken _ ->
|
|
()
|
|
and tinsert =
|
|
function
|
|
| Node { node = s; brother = bro; son = son } ->
|
|
(insert s; tinsert bro; tinsert son)
|
|
| LocAct (_, _) | DeadEnd -> ()
|
|
in List.iter insert symbols
|
|
let insert_tree entry gsymbols action tree =
|
|
let rec insert symbols tree =
|
|
match symbols with
|
|
| s :: sl -> insert_in_tree s sl tree
|
|
| [] ->
|
|
(match tree with
|
|
| Node { node = s; son = son; brother = bro } ->
|
|
Node
|
|
{
|
|
node = s;
|
|
son = son;
|
|
brother = insert [] bro;
|
|
}
|
|
| LocAct (old_action, action_list) ->
|
|
let () =
|
|
if !(entry.egram.warning_verbose)
|
|
then
|
|
eprintf
|
|
"<W> Grammar extension: in [%s] some rule has been masked@."
|
|
entry.ename
|
|
else ()
|
|
in LocAct (action, old_action :: action_list)
|
|
| DeadEnd -> LocAct (action, []))
|
|
and insert_in_tree s sl tree =
|
|
match try_insert s sl tree with
|
|
| Some t -> t
|
|
| None ->
|
|
Node
|
|
{
|
|
node = s;
|
|
son = insert sl DeadEnd;
|
|
brother = tree;
|
|
}
|
|
and try_insert s sl tree =
|
|
match tree with
|
|
| Node { node = s1; son = son; brother = bro } ->
|
|
if Tools.eq_symbol s s1
|
|
then
|
|
(let t =
|
|
Node
|
|
{
|
|
node = s1;
|
|
son = insert sl son;
|
|
brother = bro;
|
|
}
|
|
in Some t)
|
|
else
|
|
if
|
|
(is_before s1 s) ||
|
|
((derive_eps s) && (not (derive_eps s1)))
|
|
then
|
|
(let bro =
|
|
match try_insert s sl bro with
|
|
| Some bro -> bro
|
|
| None ->
|
|
Node
|
|
{
|
|
node = s;
|
|
son = insert sl DeadEnd;
|
|
brother = bro;
|
|
} in
|
|
let t =
|
|
Node { node = s1; son = son; brother = bro; }
|
|
in Some t)
|
|
else
|
|
(match try_insert s sl bro with
|
|
| Some bro ->
|
|
let t =
|
|
Node
|
|
{ node = s1; son = son; brother = bro; }
|
|
in Some t
|
|
| None -> None)
|
|
| LocAct (_, _) | DeadEnd -> None
|
|
and insert_new =
|
|
function
|
|
| s :: sl ->
|
|
Node
|
|
{ node = s; son = insert_new sl; brother = DeadEnd;
|
|
}
|
|
| [] -> LocAct (action, [])
|
|
in insert gsymbols tree
|
|
let insert_level entry e1 symbols action slev =
|
|
match e1 with
|
|
| true ->
|
|
{
|
|
assoc = slev.assoc;
|
|
lname = slev.lname;
|
|
lsuffix =
|
|
insert_tree entry symbols action slev.lsuffix;
|
|
lprefix = slev.lprefix;
|
|
}
|
|
| false ->
|
|
{
|
|
assoc = slev.assoc;
|
|
lname = slev.lname;
|
|
lsuffix = slev.lsuffix;
|
|
lprefix =
|
|
insert_tree entry symbols action slev.lprefix;
|
|
}
|
|
let levels_of_rules entry position rules =
|
|
let elev =
|
|
match entry.edesc with
|
|
| Dlevels elev -> elev
|
|
| Dparser _ ->
|
|
(eprintf "Error: entry not extensible: \"%s\"\n"
|
|
entry.ename;
|
|
flush stderr;
|
|
failwith "Grammar.extend")
|
|
in
|
|
if rules = []
|
|
then elev
|
|
else
|
|
(let (levs1, make_lev, levs2) =
|
|
get_level entry position elev in
|
|
let (levs, _) =
|
|
List.fold_left
|
|
(fun (levs, make_lev) (lname, assoc, level) ->
|
|
let lev = make_lev lname assoc in
|
|
let lev =
|
|
List.fold_left
|
|
(fun lev (symbols, action) ->
|
|
let symbols =
|
|
List.map (change_to_self entry)
|
|
symbols
|
|
in
|
|
(List.iter (check_gram entry) symbols;
|
|
let (e1, symbols) =
|
|
get_initial symbols
|
|
in
|
|
(insert_tokens entry.egram symbols;
|
|
insert_level entry e1 symbols
|
|
action lev)))
|
|
lev level
|
|
in ((lev :: levs), empty_lev))
|
|
([], make_lev) rules
|
|
in levs1 @ ((List.rev levs) @ levs2))
|
|
let extend entry (position, rules) =
|
|
let elev = levels_of_rules entry position rules
|
|
in
|
|
(entry.edesc <- Dlevels elev;
|
|
entry.estart <-
|
|
(fun lev c strm ->
|
|
let f = Parser.start_parser_of_entry entry
|
|
in (entry.estart <- f; f lev c strm));
|
|
entry.econtinue <-
|
|
fun lev bp a c strm ->
|
|
let f = Parser.continue_parser_of_entry entry
|
|
in (entry.econtinue <- f; f lev bp a c strm))
|
|
end
|
|
end
|
|
module Delete =
|
|
struct
|
|
module Make (Structure : Structure.S) =
|
|
struct
|
|
module Tools = Tools.Make(Structure)
|
|
module Parser = Parser.Make(Structure)
|
|
open Structure
|
|
let delete_rule_in_tree entry =
|
|
let rec delete_in_tree symbols tree =
|
|
match (symbols, tree) with
|
|
| (s :: sl, Node n) ->
|
|
if Tools.logically_eq_symbols entry s n.node
|
|
then delete_son sl n
|
|
else
|
|
(match delete_in_tree symbols n.brother with
|
|
| Some ((dsl, t)) ->
|
|
Some
|
|
((dsl,
|
|
(Node
|
|
{
|
|
node = n.node;
|
|
son = n.son;
|
|
brother = t;
|
|
})))
|
|
| None -> None)
|
|
| (_ :: _, _) -> None
|
|
| ([], Node n) ->
|
|
(match delete_in_tree [] n.brother with
|
|
| Some ((dsl, t)) ->
|
|
Some
|
|
((dsl,
|
|
(Node
|
|
{
|
|
node = n.node;
|
|
son = n.son;
|
|
brother = t;
|
|
})))
|
|
| None -> None)
|
|
| ([], DeadEnd) -> None
|
|
| ([], LocAct (_, [])) -> Some (((Some []), DeadEnd))
|
|
| ([], LocAct (_, (action :: list))) ->
|
|
Some ((None, (LocAct (action, list))))
|
|
and delete_son sl n =
|
|
match delete_in_tree sl n.son with
|
|
| Some ((Some dsl, DeadEnd)) ->
|
|
Some (((Some (n.node :: dsl)), (n.brother)))
|
|
| Some ((Some dsl, t)) ->
|
|
let t =
|
|
Node
|
|
{ node = n.node; son = t; brother = n.brother; }
|
|
in Some (((Some (n.node :: dsl)), t))
|
|
| Some ((None, t)) ->
|
|
let t =
|
|
Node
|
|
{ node = n.node; son = t; brother = n.brother; }
|
|
in Some ((None, t))
|
|
| None -> None
|
|
in delete_in_tree
|
|
let rec decr_keyw_use gram =
|
|
function
|
|
| Skeyword kwd -> removing gram kwd
|
|
| Smeta (_, sl, _) -> List.iter (decr_keyw_use gram) sl
|
|
| Slist0 s -> decr_keyw_use gram s
|
|
| Slist1 s -> decr_keyw_use gram s
|
|
| Slist0sep (s1, s2) ->
|
|
(decr_keyw_use gram s1; decr_keyw_use gram s2)
|
|
| Slist1sep (s1, s2) ->
|
|
(decr_keyw_use gram s1; decr_keyw_use gram s2)
|
|
| Sopt s -> decr_keyw_use gram s
|
|
| Stree t -> decr_keyw_use_in_tree gram t
|
|
| Sself | Snext | Snterm _ | Snterml (_, _) | Stoken _ ->
|
|
()
|
|
and decr_keyw_use_in_tree gram =
|
|
function
|
|
| DeadEnd | LocAct (_, _) -> ()
|
|
| Node n ->
|
|
(decr_keyw_use gram n.node;
|
|
decr_keyw_use_in_tree gram n.son;
|
|
decr_keyw_use_in_tree gram n.brother)
|
|
let rec delete_rule_in_suffix entry symbols =
|
|
function
|
|
| lev :: levs ->
|
|
(match delete_rule_in_tree entry symbols lev.lsuffix
|
|
with
|
|
| Some ((dsl, t)) ->
|
|
((match dsl with
|
|
| Some dsl ->
|
|
List.iter (decr_keyw_use entry.egram) dsl
|
|
| None -> ());
|
|
(match t with
|
|
| DeadEnd when lev.lprefix == DeadEnd -> levs
|
|
| _ ->
|
|
let lev =
|
|
{
|
|
assoc = lev.assoc;
|
|
lname = lev.lname;
|
|
lsuffix = t;
|
|
lprefix = lev.lprefix;
|
|
}
|
|
in lev :: levs))
|
|
| None ->
|
|
let levs =
|
|
delete_rule_in_suffix entry symbols levs
|
|
in lev :: levs)
|
|
| [] -> raise Not_found
|
|
let rec delete_rule_in_prefix entry symbols =
|
|
function
|
|
| lev :: levs ->
|
|
(match delete_rule_in_tree entry symbols lev.lprefix
|
|
with
|
|
| Some ((dsl, t)) ->
|
|
((match dsl with
|
|
| Some dsl ->
|
|
List.iter (decr_keyw_use entry.egram) dsl
|
|
| None -> ());
|
|
(match t with
|
|
| DeadEnd when lev.lsuffix == DeadEnd -> levs
|
|
| _ ->
|
|
let lev =
|
|
{
|
|
assoc = lev.assoc;
|
|
lname = lev.lname;
|
|
lsuffix = lev.lsuffix;
|
|
lprefix = t;
|
|
}
|
|
in lev :: levs))
|
|
| None ->
|
|
let levs =
|
|
delete_rule_in_prefix entry symbols levs
|
|
in lev :: levs)
|
|
| [] -> raise Not_found
|
|
let rec delete_rule_in_level_list entry symbols levs =
|
|
match symbols with
|
|
| Sself :: symbols ->
|
|
delete_rule_in_suffix entry symbols levs
|
|
| Snterm e :: symbols when e == entry ->
|
|
delete_rule_in_suffix entry symbols levs
|
|
| _ -> delete_rule_in_prefix entry symbols levs
|
|
let delete_rule entry sl =
|
|
match entry.edesc with
|
|
| Dlevels levs ->
|
|
let levs = delete_rule_in_level_list entry sl levs
|
|
in
|
|
(entry.edesc <- Dlevels levs;
|
|
entry.estart <-
|
|
(fun lev c strm ->
|
|
let f = Parser.start_parser_of_entry entry
|
|
in (entry.estart <- f; f lev c strm));
|
|
entry.econtinue <-
|
|
(fun lev bp a c strm ->
|
|
let f = Parser.continue_parser_of_entry entry
|
|
in (entry.econtinue <- f; f lev bp a c strm)))
|
|
| Dparser _ -> ()
|
|
end
|
|
end
|
|
module Fold :
|
|
sig
|
|
module Make (Structure : Structure.S) :
|
|
sig
|
|
open Structure
|
|
val sfold0 : ('a -> 'b -> 'b) -> 'b -> (_, 'a, 'b) fold
|
|
val sfold1 : ('a -> 'b -> 'b) -> 'b -> (_, 'a, 'b) fold
|
|
val sfold0sep : ('a -> 'b -> 'b) -> 'b -> (_, 'a, 'b) foldsep
|
|
end
|
|
end =
|
|
struct
|
|
module Make (Structure : Structure.S) =
|
|
struct
|
|
open Structure
|
|
open Format
|
|
module Parse = Parser.Make(Structure)
|
|
module Fail = Failed.Make(Structure)
|
|
open Sig.Grammar
|
|
module Stream =
|
|
struct
|
|
include Stream
|
|
let junk strm = Context.junk strm
|
|
let count strm = Context.bp strm
|
|
end
|
|
let sfold0 f e _entry _symbl psymb =
|
|
let rec fold accu (__strm : _ Stream.t) =
|
|
match try Some (psymb __strm)
|
|
with | Stream.Failure -> None
|
|
with
|
|
| Some a -> fold (f a accu) __strm
|
|
| _ -> accu
|
|
in fun (__strm : _ Stream.t) -> fold e __strm
|
|
let sfold1 f e _entry _symbl psymb =
|
|
let rec fold accu (__strm : _ Stream.t) =
|
|
match try Some (psymb __strm)
|
|
with | Stream.Failure -> None
|
|
with
|
|
| Some a -> fold (f a accu) __strm
|
|
| _ -> accu
|
|
in
|
|
fun (__strm : _ Stream.t) ->
|
|
let a = psymb __strm
|
|
in
|
|
try fold (f a e) __strm
|
|
with | Stream.Failure -> raise (Stream.Error "")
|
|
let sfold0sep f e entry symbl psymb psep =
|
|
let failed =
|
|
function
|
|
| [ symb; sep ] -> Fail.symb_failed_txt entry sep symb
|
|
| _ -> "failed" in
|
|
let rec kont accu (__strm : _ Stream.t) =
|
|
match try Some (psep __strm)
|
|
with | Stream.Failure -> None
|
|
with
|
|
| Some () ->
|
|
let a =
|
|
(try psymb __strm
|
|
with
|
|
| Stream.Failure ->
|
|
raise (Stream.Error (failed symbl)))
|
|
in kont (f a accu) __strm
|
|
| _ -> accu
|
|
in
|
|
fun (__strm : _ Stream.t) ->
|
|
match try Some (psymb __strm)
|
|
with | Stream.Failure -> None
|
|
with
|
|
| Some a -> kont (f a e) __strm
|
|
| _ -> e
|
|
let sfold1sep f e entry symbl psymb psep =
|
|
let failed =
|
|
function
|
|
| [ symb; sep ] -> Fail.symb_failed_txt entry sep symb
|
|
| _ -> "failed" in
|
|
let parse_top =
|
|
function
|
|
| [ symb; _ ] -> Parse.parse_top_symb entry symb
|
|
| _ -> raise Stream.Failure in
|
|
let rec kont accu (__strm : _ Stream.t) =
|
|
match try Some (psep __strm)
|
|
with | Stream.Failure -> None
|
|
with
|
|
| Some () ->
|
|
let a =
|
|
(try
|
|
try psymb __strm
|
|
with
|
|
| Stream.Failure ->
|
|
let a =
|
|
(try parse_top symbl __strm
|
|
with
|
|
| Stream.Failure ->
|
|
raise (Stream.Error (failed symbl)))
|
|
in Obj.magic a
|
|
with | Stream.Failure -> raise (Stream.Error ""))
|
|
in kont (f a accu) __strm
|
|
| _ -> accu
|
|
in
|
|
fun (__strm : _ Stream.t) ->
|
|
let a = psymb __strm in kont (f a e) __strm
|
|
end
|
|
end
|
|
module Entry =
|
|
struct
|
|
module Make (Structure : Structure.S) =
|
|
struct
|
|
module Dump = Print.MakeDump(Structure)
|
|
module Print = Print.Make(Structure)
|
|
module Tools = Tools.Make(Structure)
|
|
open Format
|
|
open Structure
|
|
type 'a t = internal_entry
|
|
let name e = e.ename
|
|
let print ppf e = fprintf ppf "%a@\n" Print.entry e
|
|
let dump ppf e = fprintf ppf "%a@\n" Dump.entry e
|
|
let mk g n =
|
|
{
|
|
egram = g;
|
|
ename = n;
|
|
estart = Tools.empty_entry n;
|
|
econtinue =
|
|
(fun _ _ _ _ (__strm : _ Stream.t) ->
|
|
raise Stream.Failure);
|
|
edesc = Dlevels [];
|
|
}
|
|
let action_parse entry ts : Action.t =
|
|
Context.call_with_ctx ts
|
|
(fun c ->
|
|
try entry.estart 0 c (Context.stream c)
|
|
with
|
|
| Stream.Failure ->
|
|
Loc.raise (Context.loc_ep c)
|
|
(Stream.Error
|
|
("illegal begin of " ^ entry.ename))
|
|
| (Loc.Exc_located (_, _) as exc) -> raise exc
|
|
| exc -> Loc.raise (Context.loc_ep c) exc)
|
|
let lex entry loc cs = entry.egram.glexer loc cs
|
|
let lex_string entry loc str =
|
|
lex entry loc (Stream.of_string str)
|
|
let filter entry ts =
|
|
Token.Filter.filter (get_filter entry.egram) ts
|
|
let parse_tokens_after_filter entry ts =
|
|
Action.get (action_parse entry ts)
|
|
let parse_tokens_before_filter entry ts =
|
|
parse_tokens_after_filter entry (filter entry ts)
|
|
let parse entry loc cs =
|
|
parse_tokens_before_filter entry (lex entry loc cs)
|
|
let parse_string entry loc str =
|
|
parse_tokens_before_filter entry (lex_string entry loc str)
|
|
let of_parser g n (p : (Token.t * Loc.t) Stream.t -> 'a) :
|
|
'a t =
|
|
{
|
|
egram = g;
|
|
ename = n;
|
|
estart = (fun _ _ ts -> Action.mk (p ts));
|
|
econtinue =
|
|
(fun _ _ _ _ (__strm : _ Stream.t) ->
|
|
raise Stream.Failure);
|
|
edesc = Dparser (fun ts -> Action.mk (p ts));
|
|
}
|
|
let setup_parser e (p : (Token.t * Loc.t) Stream.t -> 'a) =
|
|
let f ts = Action.mk (p ts)
|
|
in
|
|
(e.estart <- (fun _ _ -> f);
|
|
e.econtinue <-
|
|
(fun _ _ _ _ (__strm : _ Stream.t) ->
|
|
raise Stream.Failure);
|
|
e.edesc <- Dparser f)
|
|
let clear e =
|
|
(e.estart <-
|
|
(fun _ _ (__strm : _ Stream.t) -> raise Stream.Failure);
|
|
e.econtinue <-
|
|
(fun _ _ _ _ (__strm : _ Stream.t) ->
|
|
raise Stream.Failure);
|
|
e.edesc <- Dlevels [])
|
|
let obj x = x
|
|
end
|
|
end
|
|
module Static =
|
|
struct
|
|
module Make (Lexer : Sig.Lexer) :
|
|
Sig.Grammar.Static with module Loc = Lexer.Loc
|
|
and module Token = Lexer.Token =
|
|
struct
|
|
module Structure = Structure.Make(Lexer)
|
|
module Delete = Delete.Make(Structure)
|
|
module Insert = Insert.Make(Structure)
|
|
module Fold = Fold.Make(Structure)
|
|
include Structure
|
|
let gram =
|
|
let gkeywords = Hashtbl.create 301
|
|
in
|
|
{
|
|
gkeywords = gkeywords;
|
|
gfilter = Token.Filter.mk (Hashtbl.mem gkeywords);
|
|
glexer = Lexer.mk ();
|
|
warning_verbose = ref true;
|
|
error_verbose = Camlp4_config.verbose;
|
|
}
|
|
module Entry =
|
|
struct
|
|
module E = Entry.Make(Structure)
|
|
type 'a t = 'a E.t
|
|
let mk = E.mk gram
|
|
let of_parser name strm = E.of_parser gram name strm
|
|
let setup_parser = E.setup_parser
|
|
let name = E.name
|
|
let print = E.print
|
|
let clear = E.clear
|
|
let dump = E.dump
|
|
let obj x = x
|
|
end
|
|
let get_filter () = gram.gfilter
|
|
let lex loc cs = gram.glexer loc cs
|
|
let lex_string loc str = lex loc (Stream.of_string str)
|
|
let filter ts = Token.Filter.filter gram.gfilter ts
|
|
let parse_tokens_after_filter entry ts =
|
|
Entry.E.parse_tokens_after_filter entry ts
|
|
let parse_tokens_before_filter entry ts =
|
|
parse_tokens_after_filter entry (filter ts)
|
|
let parse entry loc cs =
|
|
parse_tokens_before_filter entry (lex loc cs)
|
|
let parse_string entry loc str =
|
|
parse_tokens_before_filter entry (lex_string loc str)
|
|
let delete_rule = Delete.delete_rule
|
|
let srules e rl =
|
|
let t =
|
|
List.fold_left
|
|
(fun tree (symbols, action) ->
|
|
Insert.insert_tree e symbols action tree)
|
|
DeadEnd rl
|
|
in Stree t
|
|
let sfold0 = Fold.sfold0
|
|
let sfold1 = Fold.sfold1
|
|
let sfold0sep = Fold.sfold0sep
|
|
let extend = Insert.extend
|
|
end
|
|
end
|
|
module Dynamic =
|
|
struct
|
|
module Make (Lexer : Sig.Lexer) :
|
|
Sig.Grammar.Dynamic with module Loc = Lexer.Loc
|
|
and module Token = Lexer.Token =
|
|
struct
|
|
module Structure = Structure.Make(Lexer)
|
|
module Delete = Delete.Make(Structure)
|
|
module Insert = Insert.Make(Structure)
|
|
module Entry = Entry.Make(Structure)
|
|
module Fold = Fold.Make(Structure)
|
|
include Structure
|
|
let mk () =
|
|
let gkeywords = Hashtbl.create 301
|
|
in
|
|
{
|
|
gkeywords = gkeywords;
|
|
gfilter = Token.Filter.mk (Hashtbl.mem gkeywords);
|
|
glexer = Lexer.mk ();
|
|
warning_verbose = ref true;
|
|
error_verbose = Camlp4_config.verbose;
|
|
}
|
|
let get_filter g = g.gfilter
|
|
let lex g loc cs = g.glexer loc cs
|
|
let lex_string g loc str = lex g loc (Stream.of_string str)
|
|
let filter g ts = Token.Filter.filter g.gfilter ts
|
|
let parse_tokens_after_filter entry ts =
|
|
Entry.parse_tokens_after_filter entry ts
|
|
let parse_tokens_before_filter entry ts =
|
|
parse_tokens_after_filter entry (filter entry.egram ts)
|
|
let parse entry loc cs =
|
|
parse_tokens_before_filter entry (lex entry.egram loc cs)
|
|
let parse_string entry loc str =
|
|
parse_tokens_before_filter entry
|
|
(lex_string entry.egram loc str)
|
|
let delete_rule = Delete.delete_rule
|
|
let srules e rl =
|
|
let t =
|
|
List.fold_left
|
|
(fun tree (symbols, action) ->
|
|
Insert.insert_tree e symbols action tree)
|
|
DeadEnd rl
|
|
in Stree t
|
|
let sfold0 = Fold.sfold0
|
|
let sfold1 = Fold.sfold1
|
|
let sfold0sep = Fold.sfold0sep
|
|
let extend = Insert.extend
|
|
end
|
|
end
|
|
end
|
|
end
|
|
module Printers =
|
|
struct
|
|
module DumpCamlp4Ast :
|
|
sig
|
|
module Id : Sig.Id
|
|
module Make (Syntax : Sig.Syntax) : Sig.Printer(Syntax.Ast).S
|
|
end =
|
|
struct
|
|
module Id =
|
|
struct
|
|
let name = "Camlp4Printers.DumpCamlp4Ast"
|
|
let version =
|
|
"$Id: DumpCamlp4Ast.ml,v 1.5.4.1 2007/03/30 15:50:12 pouillar Exp $"
|
|
end
|
|
module Make (Syntax : Sig.Syntax) : Sig.Printer(Syntax.Ast).S =
|
|
struct
|
|
include Syntax
|
|
let with_open_out_file x f =
|
|
match x with
|
|
| Some file ->
|
|
let oc = open_out_bin file
|
|
in (f oc; flush oc; close_out oc)
|
|
| None ->
|
|
(set_binary_mode_out stdout true; f stdout; flush stdout)
|
|
let dump_ast magic ast oc =
|
|
(output_string oc magic; output_value oc ast)
|
|
let print_interf ?input_file:(_) ?output_file ast =
|
|
with_open_out_file output_file
|
|
(dump_ast Camlp4_config.camlp4_ast_intf_magic_number ast)
|
|
let print_implem ?input_file:(_) ?output_file ast =
|
|
with_open_out_file output_file
|
|
(dump_ast Camlp4_config.camlp4_ast_impl_magic_number ast)
|
|
end
|
|
end
|
|
module DumpOCamlAst :
|
|
sig
|
|
module Id : Sig.Id
|
|
module Make (Syntax : Sig.Camlp4Syntax) : Sig.Printer(Syntax.Ast).S
|
|
end =
|
|
struct
|
|
module Id : Sig.Id =
|
|
struct
|
|
let name = "Camlp4Printers.DumpOCamlAst"
|
|
let version =
|
|
"$Id: DumpOCamlAst.ml,v 1.5.4.1 2007/03/30 15:50:12 pouillar Exp $"
|
|
end
|
|
module Make (Syntax : Sig.Camlp4Syntax) : Sig.Printer(Syntax.Ast).S =
|
|
struct
|
|
include Syntax
|
|
module Ast2pt = Struct.Camlp4Ast2OCamlAst.Make(Ast)
|
|
let with_open_out_file x f =
|
|
match x with
|
|
| Some file ->
|
|
let oc = open_out_bin file
|
|
in (f oc; flush oc; close_out oc)
|
|
| None ->
|
|
(set_binary_mode_out stdout true; f stdout; flush stdout)
|
|
let dump_pt magic fname pt oc =
|
|
(output_string oc magic;
|
|
output_value oc (if fname = "-" then "" else fname);
|
|
output_value oc pt)
|
|
let print_interf ?(input_file = "-") ?output_file ast =
|
|
let pt = Ast2pt.sig_item ast
|
|
in
|
|
with_open_out_file output_file
|
|
(dump_pt Camlp4_config.ocaml_ast_intf_magic_number
|
|
input_file pt)
|
|
let print_implem ?(input_file = "-") ?output_file ast =
|
|
let pt = Ast2pt.str_item ast
|
|
in
|
|
with_open_out_file output_file
|
|
(dump_pt Camlp4_config.ocaml_ast_impl_magic_number
|
|
input_file pt)
|
|
end
|
|
end
|
|
module Null :
|
|
sig
|
|
module Id : Sig.Id
|
|
module Make (Syntax : Sig.Syntax) : Sig.Printer(Syntax.Ast).S
|
|
end =
|
|
struct
|
|
module Id =
|
|
struct
|
|
let name = "Camlp4.Printers.Null"
|
|
let version =
|
|
"$Id: Null.ml,v 1.2 2007/02/07 10:09:21 ertai Exp $"
|
|
end
|
|
module Make (Syntax : Sig.Syntax) =
|
|
struct
|
|
include Syntax
|
|
let print_interf ?input_file:(_) ?output_file:(_) _ = ()
|
|
let print_implem ?input_file:(_) ?output_file:(_) _ = ()
|
|
end
|
|
end
|
|
module OCaml :
|
|
sig
|
|
module Id : Sig.Id
|
|
module Make (Syntax : Sig.Camlp4Syntax) :
|
|
sig
|
|
open Format
|
|
include Sig.Camlp4Syntax with module Loc = Syntax.Loc
|
|
and module Token = Syntax.Token and module Ast = Syntax.Ast
|
|
and module Gram = Syntax.Gram
|
|
val list' :
|
|
(formatter -> 'a -> unit) ->
|
|
('b, formatter, unit) format ->
|
|
(unit, formatter, unit) format ->
|
|
formatter -> 'a list -> unit
|
|
val list :
|
|
(formatter -> 'a -> unit) ->
|
|
('b, formatter, unit) format -> formatter -> 'a list -> unit
|
|
val lex_string : string -> Token.t
|
|
val is_infix : string -> bool
|
|
val is_keyword : string -> bool
|
|
val ocaml_char : string -> string
|
|
val get_expr_args :
|
|
Ast.expr -> Ast.expr list -> (Ast.expr * (Ast.expr list))
|
|
val get_patt_args :
|
|
Ast.patt -> Ast.patt list -> (Ast.patt * (Ast.patt list))
|
|
val get_ctyp_args :
|
|
Ast.ctyp -> Ast.ctyp list -> (Ast.ctyp * (Ast.ctyp list))
|
|
val expr_fun_args : Ast.expr -> ((Ast.patt list) * Ast.expr)
|
|
class printer :
|
|
?curry_constr: bool ->
|
|
?comments: bool ->
|
|
unit ->
|
|
object ('a)
|
|
method interf : formatter -> Ast.sig_item -> unit
|
|
method implem : formatter -> Ast.str_item -> unit
|
|
method sig_item : formatter -> Ast.sig_item -> unit
|
|
method str_item : formatter -> Ast.str_item -> unit
|
|
val pipe : bool
|
|
val semi : bool
|
|
val semisep : string
|
|
val value_val : string
|
|
val value_let : string
|
|
method anti : formatter -> string -> unit
|
|
method class_declaration :
|
|
formatter -> Ast.class_expr -> unit
|
|
method class_expr : formatter -> Ast.class_expr -> unit
|
|
method class_sig_item :
|
|
formatter -> Ast.class_sig_item -> unit
|
|
method class_str_item :
|
|
formatter -> Ast.class_str_item -> unit
|
|
method class_type : formatter -> Ast.class_type -> unit
|
|
method constrain :
|
|
formatter -> (Ast.ctyp * Ast.ctyp) -> unit
|
|
method ctyp : formatter -> Ast.ctyp -> unit
|
|
method ctyp1 : formatter -> Ast.ctyp -> unit
|
|
method constructor_type : formatter -> Ast.ctyp -> unit
|
|
method dot_expr : formatter -> Ast.expr -> unit
|
|
method apply_expr : formatter -> Ast.expr -> unit
|
|
method expr : formatter -> Ast.expr -> unit
|
|
method expr_list : formatter -> Ast.expr list -> unit
|
|
method expr_list_cons :
|
|
bool -> formatter -> Ast.expr -> unit
|
|
method functor_arg :
|
|
formatter -> (string * Ast.module_type) -> unit
|
|
method functor_args :
|
|
formatter -> (string * Ast.module_type) list -> unit
|
|
method ident : formatter -> Ast.ident -> unit
|
|
method intlike : formatter -> string -> unit
|
|
method binding : formatter -> Ast.binding -> unit
|
|
method record_binding :
|
|
formatter -> Ast.rec_binding -> unit
|
|
method match_case : formatter -> Ast.match_case -> unit
|
|
method match_case_aux :
|
|
formatter -> Ast.match_case -> unit
|
|
method mk_expr_list :
|
|
Ast.expr -> ((Ast.expr list) * (Ast.expr option))
|
|
method mk_patt_list :
|
|
Ast.patt -> ((Ast.patt list) * (Ast.patt option))
|
|
method module_expr :
|
|
formatter -> Ast.module_expr -> unit
|
|
method module_expr_get_functor_args :
|
|
(string * Ast.module_type) list ->
|
|
Ast.module_expr ->
|
|
(((string * Ast.module_type) list) * Ast.
|
|
module_expr * (Ast.module_type option))
|
|
method module_rec_binding :
|
|
formatter -> Ast.module_binding -> unit
|
|
method module_type :
|
|
formatter -> Ast.module_type -> unit
|
|
method mutable_flag :
|
|
formatter -> Ast.meta_bool -> unit
|
|
method direction_flag :
|
|
formatter -> Ast.meta_bool -> unit
|
|
method rec_flag : formatter -> Ast.meta_bool -> unit
|
|
method flag :
|
|
formatter -> Ast.meta_bool -> string -> unit
|
|
method node : formatter -> 'b -> ('b -> Loc.t) -> unit
|
|
method object_dup :
|
|
formatter -> (string * Ast.expr) list -> unit
|
|
method patt : formatter -> Ast.patt -> unit
|
|
method patt1 : formatter -> Ast.patt -> unit
|
|
method patt2 : formatter -> Ast.patt -> unit
|
|
method patt3 : formatter -> Ast.patt -> unit
|
|
method patt4 : formatter -> Ast.patt -> unit
|
|
method patt5 : formatter -> Ast.patt -> unit
|
|
method patt_expr_fun_args :
|
|
formatter -> (Ast.patt * Ast.expr) -> unit
|
|
method patt_class_expr_fun_args :
|
|
formatter -> (Ast.patt * Ast.class_expr) -> unit
|
|
method print_comments_before :
|
|
Loc.t -> formatter -> unit
|
|
method private_flag :
|
|
formatter -> Ast.meta_bool -> unit
|
|
method virtual_flag :
|
|
formatter -> Ast.meta_bool -> unit
|
|
method quoted_string : formatter -> string -> unit
|
|
method raise_match_failure : formatter -> Loc.t -> unit
|
|
method reset : 'a
|
|
method reset_semi : 'a
|
|
method semisep : string
|
|
method set_comments : bool -> 'a
|
|
method set_curry_constr : bool -> 'a
|
|
method set_loc_and_comments : 'a
|
|
method set_semisep : string -> 'a
|
|
method simple_ctyp : formatter -> Ast.ctyp -> unit
|
|
method simple_expr : formatter -> Ast.expr -> unit
|
|
method simple_patt : formatter -> Ast.patt -> unit
|
|
method seq : formatter -> Ast.expr -> unit
|
|
method string : formatter -> string -> unit
|
|
method sum_type : formatter -> Ast.ctyp -> unit
|
|
method type_params : formatter -> Ast.ctyp list -> unit
|
|
method class_params : formatter -> Ast.ctyp -> unit
|
|
method under_pipe : 'a
|
|
method under_semi : 'a
|
|
method var : formatter -> string -> unit
|
|
method with_constraint :
|
|
formatter -> Ast.with_constr -> unit
|
|
end
|
|
val with_outfile :
|
|
string option -> (formatter -> 'a -> unit) -> 'a -> unit
|
|
val print :
|
|
string option ->
|
|
(printer -> formatter -> 'a -> unit) -> 'a -> unit
|
|
end
|
|
module MakeMore (Syntax : Sig.Camlp4Syntax) : Sig.Printer(Syntax.
|
|
Ast).S
|
|
end =
|
|
struct
|
|
open Format
|
|
module Id =
|
|
struct
|
|
let name = "Camlp4.Printers.OCaml"
|
|
let version =
|
|
"$Id: OCaml.ml,v 1.21.2.7 2007/05/10 13:31:20 pouillar Exp $"
|
|
end
|
|
module Make (Syntax : Sig.Camlp4Syntax) =
|
|
struct
|
|
include Syntax
|
|
let pp = fprintf
|
|
let cut f = fprintf f "@ "
|
|
let list' elt sep sep' f =
|
|
let rec loop =
|
|
function
|
|
| [] -> ()
|
|
| x :: xs -> (pp f sep; elt f x; pp f sep'; loop xs)
|
|
in
|
|
function
|
|
| [] -> ()
|
|
| [ x ] -> (elt f x; pp f sep')
|
|
| x :: xs -> (elt f x; pp f sep'; loop xs)
|
|
let list elt sep f =
|
|
let rec loop =
|
|
function | [] -> () | x :: xs -> (pp f sep; elt f x; loop xs)
|
|
in
|
|
function
|
|
| [] -> ()
|
|
| [ x ] -> elt f x
|
|
| x :: xs -> (elt f x; loop xs)
|
|
let rec list_of_meta_list =
|
|
function
|
|
| Ast.LNil -> []
|
|
| Ast.LCons (x, xs) -> x :: (list_of_meta_list xs)
|
|
| Ast.LAnt x -> assert false
|
|
let meta_list elt sep f mxs =
|
|
let xs = list_of_meta_list mxs in list elt sep f xs
|
|
module CommentFilter = Struct.CommentFilter.Make(Token)
|
|
let comment_filter = CommentFilter.mk ()
|
|
let _ = CommentFilter.define (Gram.get_filter ()) comment_filter
|
|
module StringSet = Set.Make(String)
|
|
let is_infix =
|
|
let infixes =
|
|
List.fold_right StringSet.add
|
|
[ "=="; "!="; "+"; "-"; "+."; "-."; "*"; "*."; "/"; "/.";
|
|
"**"; "="; "<>"; "<"; ">"; "<="; ">="; "^"; "^^"; "@";
|
|
"&&"; "||"; "asr"; "land"; "lor"; "lsl"; "lsr"; "lxor";
|
|
"mod"; "or" ]
|
|
StringSet.empty
|
|
in fun s -> StringSet.mem s infixes
|
|
let is_keyword =
|
|
let keywords =
|
|
List.fold_right StringSet.add
|
|
[ "and"; "as"; "assert"; "asr"; "begin"; "class";
|
|
"constraint"; "do"; "done"; "downto"; "else"; "end";
|
|
"exception"; "external"; "false"; "for"; "fun";
|
|
"function"; "functor"; "if"; "in"; "include"; "inherit";
|
|
"initializer"; "land"; "lazy"; "let"; "lor"; "lsl";
|
|
"lsr"; "lxor"; "match"; "method"; "mod"; "module";
|
|
"mutable"; "new"; "object"; "of"; "open"; "or"; "parser";
|
|
"private"; "rec"; "sig"; "struct"; "then"; "to"; "true";
|
|
"try"; "type"; "val"; "virtual"; "when"; "while"; "with" ]
|
|
StringSet.empty
|
|
in fun s -> StringSet.mem s keywords
|
|
module Lexer = Struct.Lexer.Make(Token)
|
|
let _ = let module M = ErrorHandler.Register(Lexer.Error) in ()
|
|
open Sig
|
|
let lexer s =
|
|
Lexer.from_string ~quotations: !Camlp4_config.quotations Loc.
|
|
ghost s
|
|
let lex_string str =
|
|
try
|
|
let (__strm : _ Stream.t) = lexer str
|
|
in
|
|
match Stream.peek __strm with
|
|
| Some ((tok, _)) ->
|
|
(Stream.junk __strm;
|
|
(match Stream.peek __strm with
|
|
| Some ((EOI, _)) -> (Stream.junk __strm; tok)
|
|
| _ -> raise (Stream.Error "")))
|
|
| _ -> raise Stream.Failure
|
|
with
|
|
| Stream.Failure ->
|
|
failwith
|
|
(sprintf
|
|
"Cannot print %S this string contains more than one token"
|
|
str)
|
|
| Lexer.Error.E exn ->
|
|
failwith
|
|
(sprintf
|
|
"Cannot print %S this identifier does not respect OCaml lexing rules (%s)"
|
|
str (Lexer.Error.to_string exn))
|
|
let ocaml_char = function | "'" -> "\\'" | c -> c
|
|
let rec get_expr_args a al =
|
|
match a with
|
|
| Ast.ExApp (_, a1, a2) -> get_expr_args a1 (a2 :: al)
|
|
| _ -> (a, al)
|
|
let rec get_patt_args a al =
|
|
match a with
|
|
| Ast.PaApp (_, a1, a2) -> get_patt_args a1 (a2 :: al)
|
|
| _ -> (a, al)
|
|
let rec get_ctyp_args a al =
|
|
match a with
|
|
| Ast.TyApp (_, a1, a2) -> get_ctyp_args a1 (a2 :: al)
|
|
| _ -> (a, al)
|
|
let is_irrefut_patt = Ast.is_irrefut_patt
|
|
let rec expr_fun_args =
|
|
function
|
|
| (Ast.ExFun (_, (Ast.McArr (_, p, (Ast.ExNil _), e))) as ge)
|
|
->
|
|
if is_irrefut_patt p
|
|
then (let (pl, e) = expr_fun_args e in ((p :: pl), e))
|
|
else ([], ge)
|
|
| ge -> ([], ge)
|
|
let rec class_expr_fun_args =
|
|
function
|
|
| (Ast.CeFun (_, p, ce) as ge) ->
|
|
if is_irrefut_patt p
|
|
then
|
|
(let (pl, ce) = class_expr_fun_args ce in ((p :: pl), ce))
|
|
else ([], ge)
|
|
| ge -> ([], ge)
|
|
let rec do_print_comments_before loc f (__strm : _ Stream.t) =
|
|
match Stream.peek __strm with
|
|
| Some ((comm, comm_loc)) when Loc.strictly_before comm_loc loc
|
|
->
|
|
(Stream.junk __strm;
|
|
let s = __strm in
|
|
let () = f comm comm_loc
|
|
in do_print_comments_before loc f s)
|
|
| _ -> ()
|
|
class printer ?curry_constr:(init_curry_constr = false)
|
|
?(comments = true) () =
|
|
object (o)
|
|
val pipe = false
|
|
val semi = false
|
|
method under_pipe = {< pipe = true; >}
|
|
method under_semi = {< semi = true; >}
|
|
method reset_semi = {< semi = false; >}
|
|
method reset = {< pipe = false; semi = false; >}
|
|
val semisep = ";;"
|
|
val andsep =
|
|
("@]@ @[<2>and@ " : (unit, formatter, unit) format)
|
|
val value_val = "val"
|
|
val value_let = "let"
|
|
val mode = if comments then `comments else `no_comments
|
|
val curry_constr = init_curry_constr
|
|
val var_conversion = false
|
|
method semisep = semisep
|
|
method set_semisep = fun s -> {< semisep = s; >}
|
|
method set_comments =
|
|
fun b ->
|
|
{< mode = if b then `comments else `no_comments; >}
|
|
method set_loc_and_comments = {< mode = `loc_and_comments; >}
|
|
method set_curry_constr = fun b -> {< curry_constr = b; >}
|
|
method print_comments_before =
|
|
fun loc f ->
|
|
match mode with
|
|
| `comments ->
|
|
do_print_comments_before loc
|
|
(fun c _ -> pp f "%s@ " c)
|
|
(CommentFilter.take_stream comment_filter)
|
|
| `loc_and_comments ->
|
|
let () = pp f "(*loc: %a*)@ " Loc.dump loc
|
|
in
|
|
do_print_comments_before loc
|
|
(fun s -> pp f "%s(*comm_loc: %a*)@ " s Loc.dump)
|
|
(CommentFilter.take_stream comment_filter)
|
|
| _ -> ()
|
|
method var =
|
|
fun f ->
|
|
function
|
|
| "" -> pp f "$lid:\"\"$"
|
|
| "[]" -> pp f "[]"
|
|
| "()" -> pp f "()"
|
|
| " True" -> pp f "True"
|
|
| " False" -> pp f "False"
|
|
| v ->
|
|
(match (var_conversion, v) with
|
|
| (true, "val") -> pp f "contents"
|
|
| (true, "True") -> pp f "true"
|
|
| (true, "False") -> pp f "false"
|
|
| _ ->
|
|
(match lex_string v with
|
|
| LIDENT s | UIDENT s | ESCAPED_IDENT s when
|
|
is_keyword s -> pp f "%s__" s
|
|
| SYMBOL s -> pp f "( %s )" s
|
|
| LIDENT s | UIDENT s | ESCAPED_IDENT s ->
|
|
pp_print_string f s
|
|
| tok ->
|
|
failwith
|
|
(sprintf
|
|
"Bad token used as an identifier: %s"
|
|
(Token.to_string tok))))
|
|
method type_params =
|
|
fun f ->
|
|
function
|
|
| [] -> ()
|
|
| [ x ] -> pp f "%a@ " o#ctyp x
|
|
| l -> pp f "@[<1>(%a)@]@ " (list o#ctyp ",@ ") l
|
|
method class_params =
|
|
fun f ->
|
|
function
|
|
| Ast.TyCom (_, t1, t2) ->
|
|
pp f "@[<1>%a,@ %a@]" o#class_params t1
|
|
o#class_params t2
|
|
| x -> o#ctyp f x
|
|
method mutable_flag = fun f b -> o#flag f b "mutable"
|
|
method rec_flag = fun f b -> o#flag f b "rec"
|
|
method virtual_flag = fun f b -> o#flag f b "virtual"
|
|
method private_flag = fun f b -> o#flag f b "private"
|
|
method flag =
|
|
fun f b n ->
|
|
match b with
|
|
| Ast.BTrue -> (pp_print_string f n; pp f "@ ")
|
|
| Ast.BFalse -> ()
|
|
| Ast.BAnt s -> o#anti f s
|
|
method anti = fun f s -> pp f "$%s$" s
|
|
method seq =
|
|
fun f ->
|
|
function
|
|
| Ast.ExSem (_, e1, e2) ->
|
|
pp f "%a;@ %a" o#under_semi#seq e1 o#seq e2
|
|
| Ast.ExSeq (_, e) -> o#seq f e
|
|
| e -> o#expr f e
|
|
method match_case =
|
|
fun f ->
|
|
function
|
|
| Ast.McNil _loc ->
|
|
pp f "@[<2>_@ ->@ %a@]" o#raise_match_failure _loc
|
|
| a -> o#match_case_aux f a
|
|
method match_case_aux =
|
|
fun f ->
|
|
function
|
|
| Ast.McNil _ -> ()
|
|
| Ast.McAnt (_, s) -> o#anti f s
|
|
| Ast.McOr (_, a1, a2) ->
|
|
pp f "%a%a" o#match_case_aux a1 o#match_case_aux a2
|
|
| Ast.McArr (_, p, (Ast.ExNil _), e) ->
|
|
pp f "@ | @[<2>%a@ ->@ %a@]" o#patt p
|
|
o#under_pipe#expr e
|
|
| Ast.McArr (_, p, w, e) ->
|
|
pp f "@ | @[<2>%a@ when@ %a@ ->@ %a@]" o#patt p
|
|
o#under_pipe#expr w o#under_pipe#expr e
|
|
method binding =
|
|
fun f bi ->
|
|
let () = o#node f bi Ast.loc_of_binding
|
|
in
|
|
match bi with
|
|
| Ast.BiNil _ -> ()
|
|
| Ast.BiAnd (_, b1, b2) ->
|
|
(o#binding f b1; pp f andsep; o#binding f b2)
|
|
| Ast.BiEq (_, p, e) ->
|
|
let (pl, e) =
|
|
(match p with
|
|
| Ast.PaTyc (_, _, _) -> ([], e)
|
|
| _ -> expr_fun_args e)
|
|
in
|
|
(match (p, e) with
|
|
| (Ast.PaId (_, (Ast.IdLid (_, _))),
|
|
Ast.ExTyc (_, e, t)) ->
|
|
pp f "%a :@ %a =@ %a"
|
|
(list o#simple_patt "@ ") (p :: pl)
|
|
o#ctyp t o#expr e
|
|
| _ ->
|
|
pp f "%a @[<0>%a=@]@ %a" o#simple_patt p
|
|
(list' o#simple_patt "" "@ ") pl o#expr e)
|
|
| Ast.BiAnt (_, s) -> o#anti f s
|
|
method record_binding =
|
|
fun f bi ->
|
|
let () = o#node f bi Ast.loc_of_rec_binding
|
|
in
|
|
match bi with
|
|
| Ast.RbNil _ -> ()
|
|
| Ast.RbEq (_, i, e) ->
|
|
pp f "@ @[<2>%a =@ %a@];" o#var_ident i o#expr e
|
|
| Ast.RbSem (_, b1, b2) ->
|
|
(o#under_semi#record_binding f b1;
|
|
o#under_semi#record_binding f b2)
|
|
| Ast.RbAnt (_, s) -> o#anti f s
|
|
method object_dup =
|
|
fun f ->
|
|
list
|
|
(fun f (s, e) ->
|
|
pp f "@[<2>%a =@ %a@]" o#var s o#expr e)
|
|
";@ " f
|
|
method mk_patt_list =
|
|
function
|
|
| Ast.PaApp (_,
|
|
(Ast.PaApp (_, (Ast.PaId (_, (Ast.IdUid (_, "::")))),
|
|
p1)),
|
|
p2) ->
|
|
let (pl, c) = o#mk_patt_list p2 in ((p1 :: pl), c)
|
|
| Ast.PaId (_, (Ast.IdUid (_, "[]"))) -> ([], None)
|
|
| p -> ([], (Some p))
|
|
method mk_expr_list =
|
|
function
|
|
| Ast.ExApp (_,
|
|
(Ast.ExApp (_, (Ast.ExId (_, (Ast.IdUid (_, "::")))),
|
|
e1)),
|
|
e2) ->
|
|
let (el, c) = o#mk_expr_list e2 in ((e1 :: el), c)
|
|
| Ast.ExId (_, (Ast.IdUid (_, "[]"))) -> ([], None)
|
|
| e -> ([], (Some e))
|
|
method expr_list =
|
|
fun f ->
|
|
function
|
|
| [] -> pp f "[]"
|
|
| [ e ] -> pp f "[ %a ]" o#expr e
|
|
| el -> pp f "@[<2>[ %a@] ]" (list o#expr ";@ ") el
|
|
method expr_list_cons =
|
|
fun simple f e ->
|
|
let (el, c) = o#mk_expr_list e
|
|
in
|
|
match c with
|
|
| None -> o#expr_list f el
|
|
| Some x ->
|
|
(if simple
|
|
then pp f "@[<2>(%a)@]"
|
|
else pp f "@[<2>%a@]") (list o#dot_expr " ::@ ")
|
|
(el @ [ x ])
|
|
method patt_expr_fun_args =
|
|
fun f (p, e) ->
|
|
let (pl, e) = expr_fun_args e
|
|
in
|
|
pp f "%a@ ->@ %a" (list o#patt "@ ") (p :: pl) o#expr e
|
|
method patt_class_expr_fun_args =
|
|
fun f (p, ce) ->
|
|
let (pl, ce) = class_expr_fun_args ce
|
|
in
|
|
pp f "%a =@]@ %a" (list o#patt "@ ") (p :: pl)
|
|
o#class_expr ce
|
|
method constrain =
|
|
fun f (t1, t2) ->
|
|
pp f "@[<2>constraint@ %a =@ %a@]" o#ctyp t1 o#ctyp t2
|
|
method sum_type =
|
|
fun f t -> (pp_print_string f "| "; o#ctyp f t)
|
|
method string = fun f -> pp f "%s"
|
|
method quoted_string = fun f -> pp f "%S"
|
|
method intlike =
|
|
fun f s ->
|
|
if s.[0] = '-' then pp f "(%s)" s else pp f "%s" s
|
|
method module_expr_get_functor_args =
|
|
fun accu ->
|
|
function
|
|
| Ast.MeFun (_, s, mt, me) ->
|
|
o#module_expr_get_functor_args ((s, mt) :: accu) me
|
|
| Ast.MeTyc (_, me, mt) ->
|
|
((List.rev accu), me, (Some mt))
|
|
| me -> ((List.rev accu), me, None)
|
|
method functor_args = fun f -> list o#functor_arg "@ " f
|
|
method functor_arg =
|
|
fun f (s, mt) ->
|
|
pp f "@[<2>(%a :@ %a)@]" o#var s o#module_type mt
|
|
method module_rec_binding =
|
|
fun f ->
|
|
function
|
|
| Ast.MbNil _ -> ()
|
|
| Ast.MbColEq (_, s, mt, me) ->
|
|
pp f "@[<2>%a :@ %a =@ %a@]" o#var s o#module_type mt
|
|
o#module_expr me
|
|
| Ast.MbCol (_, s, mt) ->
|
|
pp f "@[<2>%a :@ %a@]" o#var s o#module_type mt
|
|
| Ast.MbAnd (_, mb1, mb2) ->
|
|
(o#module_rec_binding f mb1;
|
|
pp f andsep;
|
|
o#module_rec_binding f mb2)
|
|
| Ast.MbAnt (_, s) -> o#anti f s
|
|
method class_declaration =
|
|
fun f ->
|
|
function
|
|
| Ast.CeTyc (_, ce, ct) ->
|
|
pp f "%a :@ %a" o#class_expr ce o#class_type ct
|
|
| ce -> o#class_expr f ce
|
|
method raise_match_failure =
|
|
fun f _loc ->
|
|
let n = Loc.file_name _loc in
|
|
let l = Loc.start_line _loc in
|
|
let c = (Loc.start_off _loc) - (Loc.start_bol _loc)
|
|
in
|
|
o#expr f
|
|
(Ast.ExApp (_loc,
|
|
Ast.ExId (_loc, Ast.IdLid (_loc, "raise")),
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExApp (_loc,
|
|
Ast.ExId (_loc,
|
|
Ast.IdUid (_loc, "Match_failure")),
|
|
Ast.ExStr (_loc, Ast.safe_string_escaped n)),
|
|
Ast.ExInt (_loc, string_of_int l)),
|
|
Ast.ExInt (_loc, string_of_int c))))
|
|
method node : 'a. formatter -> 'a -> ('a -> Loc.t) -> unit =
|
|
fun f node loc_of_node ->
|
|
o#print_comments_before (loc_of_node node) f
|
|
method ident =
|
|
fun f i ->
|
|
let () = o#node f i Ast.loc_of_ident
|
|
in
|
|
match i with
|
|
| Ast.IdAcc (_, i1, i2) ->
|
|
pp f "%a.@,%a" o#ident i1 o#ident i2
|
|
| Ast.IdApp (_, i1, i2) ->
|
|
pp f "%a@,(%a)" o#ident i1 o#ident i2
|
|
| Ast.IdAnt (_, s) -> o#anti f s
|
|
| Ast.IdLid (_, s) | Ast.IdUid (_, s) -> o#var f s
|
|
method private var_ident = {< var_conversion = true; >}#ident
|
|
method expr =
|
|
fun f e ->
|
|
let () = o#node f e Ast.loc_of_expr
|
|
in
|
|
match e with
|
|
| (Ast.ExLet (_, _, _, _) | Ast.ExLmd (_, _, _, _) as
|
|
e) when semi -> pp f "(%a)" o#reset#expr e
|
|
| (Ast.ExMat (_, _, _) | Ast.ExTry (_, _, _) |
|
|
Ast.ExFun (_, _)
|
|
as e) when pipe || semi ->
|
|
pp f "(%a)" o#reset#expr e
|
|
| Ast.ExApp (_, (Ast.ExId (_, (Ast.IdLid (_, "~-")))),
|
|
x) -> pp f "@[<2>-@,%a@]" o#expr x
|
|
| Ast.ExApp (_, (Ast.ExId (_, (Ast.IdLid (_, "~-.")))),
|
|
x) -> pp f "@[<2>-.@,%a@]" o#expr x
|
|
| Ast.ExApp (_,
|
|
(Ast.ExApp (_,
|
|
(Ast.ExId (_, (Ast.IdUid (_, "::")))), _)),
|
|
_) -> o#expr_list_cons false f e
|
|
| Ast.ExApp (_loc,
|
|
(Ast.ExApp (_, (Ast.ExId (_, (Ast.IdLid (_, n)))),
|
|
x)),
|
|
y) when is_infix n ->
|
|
pp f "@[<2>%a@ %s@ %a@]" o#apply_expr x n
|
|
o#apply_expr y
|
|
| Ast.ExApp (_, x, y) ->
|
|
let (a, al) = get_expr_args x [ y ]
|
|
in
|
|
if
|
|
(not curry_constr) &&
|
|
(Ast.is_expr_constructor a)
|
|
then
|
|
(match al with
|
|
| [ Ast.ExTup (_, _) ] ->
|
|
pp f "@[<2>%a@ (%a)@]" o#apply_expr x
|
|
o#expr y
|
|
| [ _ ] ->
|
|
pp f "@[<2>%a@ %a@]" o#apply_expr x
|
|
o#apply_expr y
|
|
| al ->
|
|
pp f "@[<2>%a@ (%a)@]" o#apply_expr a
|
|
(list o#under_pipe#expr ",@ ") al)
|
|
else
|
|
pp f "@[<2>%a@]" (list o#apply_expr "@ ")
|
|
(a :: al)
|
|
| Ast.ExAss (_,
|
|
(Ast.ExAcc (_, e1,
|
|
(Ast.ExId (_, (Ast.IdLid (_, "val")))))),
|
|
e2) -> pp f "@[<2>%a :=@ %a@]" o#expr e1 o#expr e2
|
|
| Ast.ExAss (_, e1, e2) ->
|
|
pp f "@[<2>%a@ <-@ %a@]" o#expr e1 o#expr e2
|
|
| Ast.ExFun (loc, (Ast.McNil _)) ->
|
|
pp f "@[<2>fun@ _@ ->@ %a@]" o#raise_match_failure
|
|
loc
|
|
| Ast.ExFun (_, (Ast.McArr (_, p, (Ast.ExNil _), e)))
|
|
when is_irrefut_patt p ->
|
|
pp f "@[<2>fun@ %a@]" o#patt_expr_fun_args (p, e)
|
|
| Ast.ExFun (_, a) ->
|
|
pp f "@[<hv0>function%a@]" o#match_case a
|
|
| Ast.ExIfe (_, e1, e2, e3) ->
|
|
pp f
|
|
"@[<hv0>@[<2>if@ %a@]@ @[<2>then@ %a@]@ @[<2>else@ %a@]@]"
|
|
o#expr e1 o#under_semi#expr e2 o#under_semi#expr
|
|
e3
|
|
| Ast.ExLaz (_, e) ->
|
|
pp f "@[<2>lazy@ %a@]" o#simple_expr e
|
|
| Ast.ExLet (_, r, bi, e) ->
|
|
(match e with
|
|
| Ast.ExLet (_, _, _, _) ->
|
|
pp f "@[<0>@[<2>let %a%a in@]@ %a@]"
|
|
o#rec_flag r o#binding bi o#reset_semi#expr
|
|
e
|
|
| _ ->
|
|
pp f
|
|
"@[<hv0>@[<2>let %a%a@]@ @[<hv2>in@ %a@]@]"
|
|
o#rec_flag r o#binding bi o#reset_semi#expr
|
|
e)
|
|
| Ast.ExMat (_, e, a) ->
|
|
pp f "@[<hv0>@[<hv0>@[<2>match %a@]@ with@]%a@]"
|
|
o#expr e o#match_case a
|
|
| Ast.ExTry (_, e, a) ->
|
|
pp f "@[<0>@[<hv2>try@ %a@]@ @[<0>with%a@]@]"
|
|
o#expr e o#match_case a
|
|
| Ast.ExAsf _ -> pp f "@[<2>assert@ false@]"
|
|
| Ast.ExAsr (_, e) ->
|
|
pp f "@[<2>assert@ %a@]" o#dot_expr e
|
|
| Ast.ExLmd (_, s, me, e) ->
|
|
pp f "@[<2>let module %a =@ %a@]@ @[<2>in@ %a@]"
|
|
o#var s o#module_expr me o#expr e
|
|
| e -> o#apply_expr f e
|
|
method apply_expr =
|
|
fun f e ->
|
|
let () = o#node f e Ast.loc_of_expr
|
|
in
|
|
match e with
|
|
| Ast.ExNew (_, i) -> pp f "@[<2>new@ %a@]" o#ident i
|
|
| e -> o#dot_expr f e
|
|
method dot_expr =
|
|
fun f e ->
|
|
let () = o#node f e Ast.loc_of_expr
|
|
in
|
|
match e with
|
|
| Ast.ExAcc (_, e,
|
|
(Ast.ExId (_, (Ast.IdLid (_, "val"))))) ->
|
|
pp f "@[<2>!@,%a@]" o#simple_expr e
|
|
| Ast.ExAcc (_, e1, e2) ->
|
|
pp f "@[<2>%a.@,%a@]" o#dot_expr e1 o#dot_expr e2
|
|
| Ast.ExAre (_, e1, e2) ->
|
|
pp f "@[<2>%a.@,(%a)@]" o#dot_expr e1 o#expr e2
|
|
| Ast.ExSte (_, e1, e2) ->
|
|
pp f "%a.@[<1>[@,%a@]@,]" o#dot_expr e1 o#expr e2
|
|
| Ast.ExSnd (_, e, s) ->
|
|
pp f "@[<2>%a#@,%s@]" o#dot_expr e s
|
|
| e -> o#simple_expr f e
|
|
method simple_expr =
|
|
fun f e ->
|
|
let () = o#node f e Ast.loc_of_expr
|
|
in
|
|
match e with
|
|
| Ast.ExNil _ -> ()
|
|
| Ast.ExSeq (_, e) -> pp f "@[<hv1>(%a)@]" o#seq e
|
|
| Ast.ExApp (_,
|
|
(Ast.ExApp (_,
|
|
(Ast.ExId (_, (Ast.IdUid (_, "::")))), _)),
|
|
_) -> o#expr_list_cons true f e
|
|
| Ast.ExTup (_, e) -> pp f "@[<1>(%a)@]" o#expr e
|
|
| Ast.ExArr (_, e) ->
|
|
pp f "@[<0>@[<2>[|@ %a@]@ |]@]" o#under_semi#expr e
|
|
| Ast.ExCoe (_, e, (Ast.TyNil _), t) ->
|
|
pp f "@[<2>(%a :>@ %a)@]" o#expr e o#ctyp t
|
|
| Ast.ExCoe (_, e, t1, t2) ->
|
|
pp f "@[<2>(%a :@ %a :>@ %a)@]" o#expr e o#ctyp t1
|
|
o#ctyp t2
|
|
| Ast.ExTyc (_, e, t) ->
|
|
pp f "@[<2>(%a :@ %a)@]" o#expr e o#ctyp t
|
|
| Ast.ExAnt (_, s) -> o#anti f s
|
|
| Ast.ExFor (_, s, e1, e2, df, e3) ->
|
|
pp f
|
|
"@[<hv0>@[<hv2>@[<2>for %a =@ %a@ %a@ %a@ do@]@ %a@]@ done@]"
|
|
o#var s o#expr e1 o#direction_flag df o#expr e2
|
|
o#seq e3
|
|
| Ast.ExInt (_, s) -> pp f "%a" o#intlike s
|
|
| Ast.ExNativeInt (_, s) -> pp f "%an" o#intlike s
|
|
| Ast.ExInt64 (_, s) -> pp f "%aL" o#intlike s
|
|
| Ast.ExInt32 (_, s) -> pp f "%al" o#intlike s
|
|
| Ast.ExFlo (_, s) -> pp f "%s" s
|
|
| Ast.ExChr (_, s) -> pp f "'%s'" (ocaml_char s)
|
|
| Ast.ExId (_, i) -> o#var_ident f i
|
|
| Ast.ExRec (_, b, (Ast.ExNil _)) ->
|
|
pp f "@[<hv0>@[<hv2>{%a@]@ }@]" o#record_binding b
|
|
| Ast.ExRec (_, b, e) ->
|
|
pp f "@[<hv0>@[<hv2>{@ (%a)@ with%a@]@ }@]"
|
|
o#expr e o#record_binding b
|
|
| Ast.ExStr (_, s) -> pp f "\"%s\"" s
|
|
| Ast.ExWhi (_, e1, e2) ->
|
|
pp f "@[<2>while@ %a@ do@ %a@ done@]" o#expr e1
|
|
o#seq e2
|
|
| Ast.ExLab (_, s, (Ast.ExNil _)) -> pp f "~%s" s
|
|
| Ast.ExLab (_, s, e) ->
|
|
pp f "@[<2>~%s:@ %a@]" s o#dot_expr e
|
|
| Ast.ExOlb (_, s, (Ast.ExNil _)) -> pp f "?%s" s
|
|
| Ast.ExOlb (_, s, e) ->
|
|
pp f "@[<2>?%s:@ %a@]" s o#dot_expr e
|
|
| Ast.ExVrn (_, s) -> pp f "`%a" o#var s
|
|
| Ast.ExOvr (_, b) ->
|
|
pp f "@[<hv0>@[<hv2>{<%a@]@ >}@]" o#record_binding
|
|
b
|
|
| Ast.ExObj (_, (Ast.PaNil _), cst) ->
|
|
pp f "@[<hv0>@[<hv2>object@ %a@]@ end@]"
|
|
o#class_str_item cst
|
|
| Ast.ExObj (_, (Ast.PaTyc (_, p, t)), cst) ->
|
|
pp f
|
|
"@[<hv0>@[<hv2>object @[<1>(%a :@ %a)@]@ %a@]@ end@]"
|
|
o#patt p o#ctyp t o#class_str_item cst
|
|
| Ast.ExObj (_, p, cst) ->
|
|
pp f
|
|
"@[<hv0>@[<hv2>object @[<2>(%a)@]@ %a@]@ end@]"
|
|
o#patt p o#class_str_item cst
|
|
| Ast.ExCom (_, e1, e2) ->
|
|
pp f "%a,@ %a" o#simple_expr e1 o#simple_expr e2
|
|
| Ast.ExSem (_, e1, e2) ->
|
|
pp f "%a;@ %a" o#under_semi#expr e1 o#expr e2
|
|
| Ast.ExApp (_, _, _) | Ast.ExAcc (_, _, _) |
|
|
Ast.ExAre (_, _, _) | Ast.ExSte (_, _, _) |
|
|
Ast.ExAss (_, _, _) | Ast.ExSnd (_, _, _) |
|
|
Ast.ExFun (_, _) | Ast.ExMat (_, _, _) |
|
|
Ast.ExTry (_, _, _) | Ast.ExIfe (_, _, _, _) |
|
|
Ast.ExLet (_, _, _, _) | Ast.ExLmd (_, _, _, _) |
|
|
Ast.ExAsr (_, _) | Ast.ExAsf _ | Ast.ExLaz (_, _) |
|
|
Ast.ExNew (_, _) -> pp f "(%a)" o#reset#expr e
|
|
method direction_flag =
|
|
fun f b ->
|
|
match b with
|
|
| Ast.BTrue -> pp_print_string f "to"
|
|
| Ast.BFalse -> pp_print_string f "downto"
|
|
| Ast.BAnt s -> o#anti f s
|
|
method patt =
|
|
fun f p ->
|
|
let () = o#node f p Ast.loc_of_patt
|
|
in
|
|
match p with
|
|
| Ast.PaAli (_, p1, p2) ->
|
|
pp f "@[<1>(%a@ as@ %a)@]" o#patt p1 o#patt p2
|
|
| Ast.PaEq (_, i, p) ->
|
|
pp f "@[<2>%a =@ %a@]" o#var_ident i o#patt p
|
|
| Ast.PaSem (_, p1, p2) ->
|
|
pp f "%a;@ %a" o#patt p1 o#patt p2
|
|
| p -> o#patt1 f p
|
|
method patt1 =
|
|
fun f ->
|
|
function
|
|
| Ast.PaOrp (_, p1, p2) ->
|
|
pp f "@[<2>%a@ |@ %a@]" o#patt1 p1 o#patt2 p2
|
|
| p -> o#patt2 f p
|
|
method patt2 = fun f p -> o#patt3 f p
|
|
method patt3 =
|
|
fun f ->
|
|
function
|
|
| Ast.PaRng (_, p1, p2) ->
|
|
pp f "@[<2>%a@ ..@ %a@]" o#patt3 p1 o#patt4 p2
|
|
| Ast.PaCom (_, p1, p2) ->
|
|
pp f "%a,@ %a" o#patt3 p1 o#patt3 p2
|
|
| p -> o#patt4 f p
|
|
method patt4 =
|
|
fun f ->
|
|
function
|
|
| (Ast.PaApp (_,
|
|
(Ast.PaApp (_,
|
|
(Ast.PaId (_, (Ast.IdUid (_, "::")))), _)),
|
|
_)
|
|
as p) ->
|
|
let (pl, c) = o#mk_patt_list p
|
|
in
|
|
(match c with
|
|
| None ->
|
|
pp f "@[<2>[@ %a@]@ ]" (list o#patt ";@ ") pl
|
|
| Some x ->
|
|
pp f "@[<2>%a@]" (list o#patt5 " ::@ ")
|
|
(pl @ [ x ]))
|
|
| p -> o#patt5 f p
|
|
method patt5 =
|
|
fun f ->
|
|
function
|
|
| (Ast.PaApp (_,
|
|
(Ast.PaApp (_,
|
|
(Ast.PaId (_, (Ast.IdUid (_, "::")))), _)),
|
|
_)
|
|
as p) -> o#simple_patt f p
|
|
| Ast.PaApp (_, x, y) ->
|
|
let (a, al) = get_patt_args x [ y ]
|
|
in
|
|
if
|
|
(not curry_constr) && (Ast.is_patt_constructor a)
|
|
then
|
|
(match al with
|
|
| [ Ast.PaTup (_, _) ] ->
|
|
pp f "@[<2>%a@ (%a)@]" o#simple_patt x
|
|
o#patt y
|
|
| [ _ ] ->
|
|
pp f "@[<2>%a@ %a@]" o#patt5 x o#simple_patt
|
|
y
|
|
| al ->
|
|
pp f "@[<2>%a@ (%a)@]" o#patt5 a
|
|
(list o#simple_patt ",@ ") al)
|
|
else
|
|
pp f "@[<2>%a@]" (list o#simple_patt "@ ")
|
|
(a :: al)
|
|
| p -> o#simple_patt f p
|
|
method simple_patt =
|
|
fun f p ->
|
|
let () = o#node f p Ast.loc_of_patt
|
|
in
|
|
match p with
|
|
| Ast.PaNil _ -> ()
|
|
| Ast.PaId (_, i) -> o#var_ident f i
|
|
| Ast.PaAnt (_, s) -> o#anti f s
|
|
| Ast.PaAny _ -> pp f "_"
|
|
| Ast.PaTup (_, p) -> pp f "@[<1>(%a)@]" o#patt3 p
|
|
| Ast.PaRec (_, p) -> pp f "@[<hv2>{@ %a@]@ }" o#patt p
|
|
| Ast.PaStr (_, s) -> pp f "\"%s\"" s
|
|
| Ast.PaTyc (_, p, t) ->
|
|
pp f "@[<1>(%a :@ %a)@]" o#patt p o#ctyp t
|
|
| Ast.PaNativeInt (_, s) -> pp f "%an" o#intlike s
|
|
| Ast.PaInt64 (_, s) -> pp f "%aL" o#intlike s
|
|
| Ast.PaInt32 (_, s) -> pp f "%al" o#intlike s
|
|
| Ast.PaInt (_, s) -> pp f "%a" o#intlike s
|
|
| Ast.PaFlo (_, s) -> pp f "%s" s
|
|
| Ast.PaChr (_, s) -> pp f "'%s'" (ocaml_char s)
|
|
| Ast.PaLab (_, s, (Ast.PaNil _)) -> pp f "~%s" s
|
|
| Ast.PaVrn (_, s) -> pp f "`%a" o#var s
|
|
| Ast.PaTyp (_, i) -> pp f "@[<2>#%a@]" o#ident i
|
|
| Ast.PaArr (_, p) -> pp f "@[<2>[|@ %a@]@ |]" o#patt p
|
|
| Ast.PaLab (_, s, p) ->
|
|
pp f "@[<2>~%s:@ (%a)@]" s o#patt p
|
|
| Ast.PaOlb (_, s, (Ast.PaNil _)) -> pp f "?%s" s
|
|
| Ast.PaOlb (_, "", p) -> pp f "@[<2>?(%a)@]" o#patt p
|
|
| Ast.PaOlb (_, s, p) ->
|
|
pp f "@[<2>?%s:@,@[<1>(%a)@]@]" s o#patt p
|
|
| Ast.PaOlbi (_, "", p, e) ->
|
|
pp f "@[<2>?(%a =@ %a)@]" o#patt p o#expr e
|
|
| Ast.PaOlbi (_, s, p, e) ->
|
|
pp f "@[<2>?%s:@,@[<1>(%a =@ %a)@]@]" s o#patt p
|
|
o#expr e
|
|
| (Ast.PaApp (_, _, _) | Ast.PaAli (_, _, _) |
|
|
Ast.PaOrp (_, _, _) | Ast.PaRng (_, _, _) |
|
|
Ast.PaCom (_, _, _) | Ast.PaSem (_, _, _) |
|
|
Ast.PaEq (_, _, _)
|
|
as p) -> pp f "@[<1>(%a)@]" o#patt p
|
|
method simple_ctyp =
|
|
fun f t ->
|
|
let () = o#node f t Ast.loc_of_ctyp
|
|
in
|
|
match t with
|
|
| Ast.TyId (_, i) -> o#ident f i
|
|
| Ast.TyAnt (_, s) -> o#anti f s
|
|
| Ast.TyAny _ -> pp f "_"
|
|
| Ast.TyLab (_, s, t) ->
|
|
pp f "@[<2>%s:@ %a@]" s o#simple_ctyp t
|
|
| Ast.TyOlb (_, s, t) ->
|
|
pp f "@[<2>?%s:@ %a@]" s o#simple_ctyp t
|
|
| Ast.TyObj (_, (Ast.TyNil _), Ast.BFalse) ->
|
|
pp f "< >"
|
|
| Ast.TyObj (_, (Ast.TyNil _), Ast.BTrue) ->
|
|
pp f "< .. >"
|
|
| Ast.TyObj (_, t, Ast.BTrue) ->
|
|
pp f "@[<0>@[<2><@ %a;@ ..@]@ >@]" o#ctyp t
|
|
| Ast.TyObj (_, t, Ast.BFalse) ->
|
|
pp f "@[<0>@[<2><@ %a@]@ >@]" o#ctyp t
|
|
| Ast.TyQuo (_, s) -> pp f "'%a" o#var s
|
|
| Ast.TyRec (_, t) -> pp f "@[<2>{@ %a@]@ }" o#ctyp t
|
|
| Ast.TySum (_, t) -> pp f "@[<0>%a@]" o#sum_type t
|
|
| Ast.TyTup (_, t) -> pp f "@[<1>(%a)@]" o#ctyp t
|
|
| Ast.TyVrnEq (_, t) -> pp f "@[<2>[@ %a@]@ ]" o#ctyp t
|
|
| Ast.TyVrnInf (_, t) ->
|
|
pp f "@[<2>[<@ %a@]@,]" o#ctyp t
|
|
| Ast.TyVrnInfSup (_, t1, t2) ->
|
|
pp f "@[<2>[<@ %a@ >@ %a@]@ ]" o#ctyp t1 o#ctyp t2
|
|
| Ast.TyVrnSup (_, t) ->
|
|
pp f "@[<2>[>@ %a@]@,]" o#ctyp t
|
|
| Ast.TyCls (_, i) -> pp f "@[<2>#%a@]" o#ident i
|
|
| Ast.TyMan (_, t1, t2) ->
|
|
pp f "@[<2>%a =@ %a@]" o#simple_ctyp t1
|
|
o#simple_ctyp t2
|
|
| Ast.TyVrn (_, s) -> pp f "`%a" o#var s
|
|
| Ast.TySta (_, t1, t2) ->
|
|
pp f "%a *@ %a" o#simple_ctyp t1 o#simple_ctyp t2
|
|
| t -> pp f "@[<1>(%a)@]" o#ctyp t
|
|
method ctyp =
|
|
fun f t ->
|
|
let () = o#node f t Ast.loc_of_ctyp
|
|
in
|
|
match t with
|
|
| Ast.TyAli (_, t1, t2) ->
|
|
pp f "@[<2>%a@ as@ %a@]" o#simple_ctyp t1
|
|
o#simple_ctyp t2
|
|
| Ast.TyArr (_, t1, t2) ->
|
|
pp f "@[<2>%a@ ->@ %a@]" o#ctyp1 t1 o#ctyp t2
|
|
| Ast.TyQuP (_, s) -> pp f "+'%a" o#var s
|
|
| Ast.TyQuM (_, s) -> pp f "-'%a" o#var s
|
|
| Ast.TyOr (_, t1, t2) ->
|
|
pp f "%a@ | %a" o#ctyp t1 o#ctyp t2
|
|
| Ast.TyCol (_, t1, (Ast.TyMut (_, t2))) ->
|
|
pp f "@[mutable@ %a :@ %a@]" o#ctyp t1 o#ctyp t2
|
|
| Ast.TyCol (_, t1, t2) ->
|
|
pp f "@[<2>%a :@ %a@]" o#ctyp t1 o#ctyp t2
|
|
| Ast.TySem (_, t1, t2) ->
|
|
pp f "%a;@ %a" o#ctyp t1 o#ctyp t2
|
|
| Ast.TyOf (_, t, (Ast.TyNil _)) -> o#ctyp f t
|
|
| Ast.TyOf (_, t1, t2) ->
|
|
pp f "@[<h>%a@ @[<3>of@ %a@]@]" o#ctyp t1
|
|
o#constructor_type t2
|
|
| Ast.TyOfAmp (_, t1, t2) ->
|
|
pp f "@[<h>%a@ @[<3>of &@ %a@]@]" o#ctyp t1
|
|
o#constructor_type t2
|
|
| Ast.TyAnd (_, t1, t2) ->
|
|
pp f "%a@ and %a" o#ctyp t1 o#ctyp t2
|
|
| Ast.TyMut (_, t) ->
|
|
pp f "@[<2>mutable@ %a@]" o#ctyp t
|
|
| Ast.TyAmp (_, t1, t2) ->
|
|
pp f "%a@ &@ %a" o#ctyp t1 o#ctyp t2
|
|
| Ast.TyDcl (_, tn, tp, te, cl) ->
|
|
(pp f "@[<2>%a%a@]" o#type_params tp o#var tn;
|
|
(match te with
|
|
| Ast.TyNil _ -> ()
|
|
| _ -> pp f " =@ %a" o#ctyp te);
|
|
if cl <> []
|
|
then pp f "@ %a" (list o#constrain "@ ") cl
|
|
else ())
|
|
| t -> o#ctyp1 f t
|
|
method ctyp1 =
|
|
fun f ->
|
|
function
|
|
| Ast.TyApp (_, t1, t2) ->
|
|
(match get_ctyp_args t1 [ t2 ] with
|
|
| (_, [ _ ]) ->
|
|
pp f "@[<2>%a@ %a@]" o#simple_ctyp t2
|
|
o#simple_ctyp t1
|
|
| (a, al) ->
|
|
pp f "@[<2>(%a)@ %a@]" (list o#ctyp ",@ ") al
|
|
o#simple_ctyp a)
|
|
| Ast.TyPol (_, t1, t2) ->
|
|
let (a, al) = get_ctyp_args t1 []
|
|
in
|
|
pp f "@[<2>%a.@ %a@]" (list o#ctyp "@ ") (a :: al)
|
|
o#ctyp t2
|
|
| Ast.TyPrv (_, t) ->
|
|
pp f "@[private@ %a@]" o#simple_ctyp t
|
|
| t -> o#simple_ctyp f t
|
|
method constructor_type =
|
|
fun f t ->
|
|
match t with
|
|
| Ast.TyAnd (loc, t1, t2) ->
|
|
let () = o#node f t (fun _ -> loc)
|
|
in
|
|
pp f "%a@ * %a" o#constructor_type t1
|
|
o#constructor_type t2
|
|
| Ast.TyArr (_, _, _) -> pp f "(%a)" o#ctyp t
|
|
| t -> o#ctyp f t
|
|
method sig_item =
|
|
fun f sg ->
|
|
let () = o#node f sg Ast.loc_of_sig_item
|
|
in
|
|
match sg with
|
|
| Ast.SgNil _ -> ()
|
|
| Ast.SgSem (_, sg, (Ast.SgNil _)) |
|
|
Ast.SgSem (_, (Ast.SgNil _), sg) -> o#sig_item f sg
|
|
| Ast.SgSem (_, sg1, sg2) ->
|
|
(o#sig_item f sg1; cut f; o#sig_item f sg2)
|
|
| Ast.SgExc (_, t) ->
|
|
pp f "@[<2>exception@ %a%s@]" o#ctyp t semisep
|
|
| Ast.SgExt (_, s, t, sl) ->
|
|
pp f "@[<2>external@ %a :@ %a =@ %a%s@]" o#var s
|
|
o#ctyp t (meta_list o#quoted_string "@ ") sl
|
|
semisep
|
|
| Ast.SgMod (_, s1, (Ast.MtFun (_, s2, mt1, mt2))) ->
|
|
let rec loop accu =
|
|
(function
|
|
| Ast.MtFun (_, s, mt1, mt2) ->
|
|
loop ((s, mt1) :: accu) mt2
|
|
| mt -> ((List.rev accu), mt)) in
|
|
let (al, mt) = loop [ (s2, mt1) ] mt2
|
|
in
|
|
pp f "@[<2>module %a@ @[<0>%a@] :@ %a%s@]"
|
|
o#var s1 o#functor_args al o#module_type mt
|
|
semisep
|
|
| Ast.SgMod (_, s, mt) ->
|
|
pp f "@[<2>module %a :@ %a%s@]" o#var s
|
|
o#module_type mt semisep
|
|
| Ast.SgMty (_, s, (Ast.MtNil _)) ->
|
|
pp f "@[<2>module type %a%s@]" o#var s semisep
|
|
| Ast.SgMty (_, s, mt) ->
|
|
pp f "@[<2>module type %a =@ %a%s@]" o#var s
|
|
o#module_type mt semisep
|
|
| Ast.SgOpn (_, sl) ->
|
|
pp f "@[<2>open@ %a%s@]" o#ident sl semisep
|
|
| Ast.SgTyp (_, t) ->
|
|
pp f "@[<hv0>@[<hv2>type %a@]%s@]" o#ctyp t semisep
|
|
| Ast.SgVal (_, s, t) ->
|
|
pp f "@[<2>%s %a :@ %a%s@]" value_val o#var s
|
|
o#ctyp t semisep
|
|
| Ast.SgInc (_, mt) ->
|
|
pp f "@[<2>include@ %a%s@]" o#module_type mt
|
|
semisep
|
|
| Ast.SgClt (_, ct) ->
|
|
pp f "@[<2>class type %a%s@]" o#class_type ct
|
|
semisep
|
|
| Ast.SgCls (_, ce) ->
|
|
pp f "@[<2>class %a%s@]" o#class_type ce semisep
|
|
| Ast.SgRecMod (_, mb) ->
|
|
pp f "@[<2>module rec %a%s@]" o#module_rec_binding
|
|
mb semisep
|
|
| Ast.SgDir (_, _, _) -> ()
|
|
| Ast.SgAnt (_, s) -> pp f "%a%s" o#anti s semisep
|
|
method str_item =
|
|
fun f st ->
|
|
let () = o#node f st Ast.loc_of_str_item
|
|
in
|
|
match st with
|
|
| Ast.StNil _ -> ()
|
|
| Ast.StSem (_, st, (Ast.StNil _)) |
|
|
Ast.StSem (_, (Ast.StNil _), st) -> o#str_item f st
|
|
| Ast.StSem (_, st1, st2) ->
|
|
(o#str_item f st1; cut f; o#str_item f st2)
|
|
| Ast.StExc (_, t, Ast.ONone) ->
|
|
pp f "@[<2>exception@ %a%s@]" o#ctyp t semisep
|
|
| Ast.StExc (_, t, (Ast.OSome sl)) ->
|
|
pp f "@[<2>exception@ %a =@ %a%s@]" o#ctyp t
|
|
o#ident sl semisep
|
|
| Ast.StExt (_, s, t, sl) ->
|
|
pp f "@[<2>external@ %a :@ %a =@ %a%s@]" o#var s
|
|
o#ctyp t (meta_list o#quoted_string "@ ") sl
|
|
semisep
|
|
| Ast.StMod (_, s1, (Ast.MeFun (_, s2, mt1, me))) ->
|
|
(match o#module_expr_get_functor_args [ (s2, mt1) ]
|
|
me
|
|
with
|
|
| (al, me, Some mt2) ->
|
|
pp f
|
|
"@[<2>module %a@ @[<0>%a@] :@ %a =@ %a%s@]"
|
|
o#var s1 o#functor_args al o#module_type mt2
|
|
o#module_expr me semisep
|
|
| (al, me, _) ->
|
|
pp f "@[<2>module %a@ @[<0>%a@] =@ %a%s@]"
|
|
o#var s1 o#functor_args al o#module_expr me
|
|
semisep)
|
|
| Ast.StMod (_, s, (Ast.MeTyc (_, me, mt))) ->
|
|
pp f "@[<2>module %a :@ %a =@ %a%s@]" o#var s
|
|
o#module_type mt o#module_expr me semisep
|
|
| Ast.StMod (_, s, me) ->
|
|
pp f "@[<2>module %a =@ %a%s@]" o#var s
|
|
o#module_expr me semisep
|
|
| Ast.StMty (_, s, mt) ->
|
|
pp f "@[<2>module type %a =@ %a%s@]" o#var s
|
|
o#module_type mt semisep
|
|
| Ast.StOpn (_, sl) ->
|
|
pp f "@[<2>open@ %a%s@]" o#ident sl semisep
|
|
| Ast.StTyp (_, t) ->
|
|
pp f "@[<hv0>@[<hv2>type %a@]%s@]" o#ctyp t semisep
|
|
| Ast.StVal (_, r, bi) ->
|
|
pp f "@[<2>%s %a%a%s@]" value_let o#rec_flag r
|
|
o#binding bi semisep
|
|
| Ast.StExp (_, e) ->
|
|
pp f "@[<2>let _ =@ %a%s@]" o#expr e semisep
|
|
| Ast.StInc (_, me) ->
|
|
pp f "@[<2>include@ %a%s@]" o#module_expr me
|
|
semisep
|
|
| Ast.StClt (_, ct) ->
|
|
pp f "@[<2>class type %a%s@]" o#class_type ct
|
|
semisep
|
|
| Ast.StCls (_, ce) ->
|
|
pp f "@[<hv2>class %a%s@]" o#class_declaration ce
|
|
semisep
|
|
| Ast.StRecMod (_, mb) ->
|
|
pp f "@[<2>module rec %a%s@]" o#module_rec_binding
|
|
mb semisep
|
|
| Ast.StDir (_, _, _) -> ()
|
|
| Ast.StAnt (_, s) -> pp f "%a%s" o#anti s semisep
|
|
| Ast.StExc (_, _, (Ast.OAnt _)) -> assert false
|
|
method module_type =
|
|
fun f mt ->
|
|
let () = o#node f mt Ast.loc_of_module_type
|
|
in
|
|
match mt with
|
|
| Ast.MtNil _ -> assert false
|
|
| Ast.MtId (_, i) -> o#ident f i
|
|
| Ast.MtAnt (_, s) -> o#anti f s
|
|
| Ast.MtFun (_, s, mt1, mt2) ->
|
|
pp f "@[<2>functor@ @[<1>(%a :@ %a)@]@ ->@ %a@]"
|
|
o#var s o#module_type mt1 o#module_type mt2
|
|
| Ast.MtQuo (_, s) -> pp f "'%a" o#var s
|
|
| Ast.MtSig (_, sg) ->
|
|
pp f "@[<hv0>@[<hv2>sig@ %a@]@ end@]" o#sig_item sg
|
|
| Ast.MtWit (_, mt, wc) ->
|
|
pp f "@[<2>%a@ with@ %a@]" o#module_type mt
|
|
o#with_constraint wc
|
|
method with_constraint =
|
|
fun f wc ->
|
|
let () = o#node f wc Ast.loc_of_with_constr
|
|
in
|
|
match wc with
|
|
| Ast.WcNil _ -> ()
|
|
| Ast.WcTyp (_, t1, t2) ->
|
|
pp f "@[<2>type@ %a =@ %a@]" o#ctyp t1 o#ctyp t2
|
|
| Ast.WcMod (_, i1, i2) ->
|
|
pp f "@[<2>module@ %a =@ %a@]" o#ident i1 o#ident
|
|
i2
|
|
| Ast.WcAnd (_, wc1, wc2) ->
|
|
(o#with_constraint f wc1;
|
|
pp f andsep;
|
|
o#with_constraint f wc2)
|
|
| Ast.WcAnt (_, s) -> o#anti f s
|
|
method module_expr =
|
|
fun f me ->
|
|
let () = o#node f me Ast.loc_of_module_expr
|
|
in
|
|
match me with
|
|
| Ast.MeNil _ -> assert false
|
|
| Ast.MeId (_, i) -> o#ident f i
|
|
| Ast.MeAnt (_, s) -> o#anti f s
|
|
| Ast.MeApp (_, me1, me2) ->
|
|
pp f "@[<2>%a@,(%a)@]" o#module_expr me1
|
|
o#module_expr me2
|
|
| Ast.MeFun (_, s, mt, me) ->
|
|
pp f "@[<2>functor@ @[<1>(%a :@ %a)@]@ ->@ %a@]"
|
|
o#var s o#module_type mt o#module_expr me
|
|
| Ast.MeStr (_, st) ->
|
|
pp f "@[<hv0>@[<hv2>struct@ %a@]@ end@]" o#str_item
|
|
st
|
|
| Ast.MeTyc (_, (Ast.MeStr (_, st)),
|
|
(Ast.MtSig (_, sg))) ->
|
|
pp f
|
|
"@[<2>@[<hv2>struct@ %a@]@ end :@ @[<hv2>sig@ %a@]@ end@]"
|
|
o#str_item st o#sig_item sg
|
|
| Ast.MeTyc (_, me, mt) ->
|
|
pp f "@[<1>(%a :@ %a)@]" o#module_expr me
|
|
o#module_type mt
|
|
method class_expr =
|
|
fun f ce ->
|
|
let () = o#node f ce Ast.loc_of_class_expr
|
|
in
|
|
match ce with
|
|
| Ast.CeApp (_, ce, e) ->
|
|
pp f "@[<2>%a@ %a@]" o#class_expr ce o#expr e
|
|
| Ast.CeCon (_, Ast.BFalse, i, (Ast.TyNil _)) ->
|
|
pp f "@[<2>%a@]" o#ident i
|
|
| Ast.CeCon (_, Ast.BFalse, i, t) ->
|
|
pp f "@[<2>@[<1>[%a]@]@ %a@]" o#class_params t
|
|
o#ident i
|
|
| Ast.CeCon (_, Ast.BTrue, (Ast.IdLid (_, i)),
|
|
(Ast.TyNil _)) -> pp f "@[<2>virtual@ %a@]" o#var i
|
|
| Ast.CeCon (_, Ast.BTrue, (Ast.IdLid (_, i)), t) ->
|
|
pp f "@[<2>virtual@ @[<1>[%a]@]@ %a@]"
|
|
o#class_params t o#var i
|
|
| Ast.CeFun (_, p, ce) ->
|
|
pp f "@[<2>fun@ %a@ ->@ %a@]" o#patt p o#class_expr
|
|
ce
|
|
| Ast.CeLet (_, r, bi, ce) ->
|
|
pp f "@[<2>let %a%a@]@ @[<2>in@ %a@]" o#rec_flag r
|
|
o#binding bi o#class_expr ce
|
|
| Ast.CeStr (_, (Ast.PaNil _), cst) ->
|
|
pp f "@[<hv0>@[<hv2>object %a@]@ end@]"
|
|
o#class_str_item cst
|
|
| Ast.CeStr (_, p, cst) ->
|
|
pp f
|
|
"@[<hv0>@[<hv2>object @[<1>(%a)@]@ %a@]@ end@]"
|
|
o#patt p o#class_str_item cst
|
|
| Ast.CeTyc (_, ce, ct) ->
|
|
pp f "@[<1>(%a :@ %a)@]" o#class_expr ce
|
|
o#class_type ct
|
|
| Ast.CeAnt (_, s) -> o#anti f s
|
|
| Ast.CeAnd (_, ce1, ce2) ->
|
|
(o#class_expr f ce1;
|
|
pp f andsep;
|
|
o#class_expr f ce2)
|
|
| Ast.CeEq (_, ce1, (Ast.CeFun (_, p, ce2))) when
|
|
is_irrefut_patt p ->
|
|
pp f "@[<2>%a@ %a" o#class_expr ce1
|
|
o#patt_class_expr_fun_args (p, ce2)
|
|
| Ast.CeEq (_, ce1, ce2) ->
|
|
pp f "@[<2>%a =@]@ %a" o#class_expr ce1
|
|
o#class_expr ce2
|
|
| _ -> assert false
|
|
method class_type =
|
|
fun f ct ->
|
|
let () = o#node f ct Ast.loc_of_class_type
|
|
in
|
|
match ct with
|
|
| Ast.CtCon (_, Ast.BFalse, i, (Ast.TyNil _)) ->
|
|
pp f "@[<2>%a@]" o#ident i
|
|
| Ast.CtCon (_, Ast.BFalse, i, t) ->
|
|
pp f "@[<2>[@,%a@]@,]@ %a" o#class_params t
|
|
o#ident i
|
|
| Ast.CtCon (_, Ast.BTrue, (Ast.IdLid (_, i)),
|
|
(Ast.TyNil _)) -> pp f "@[<2>virtual@ %a@]" o#var i
|
|
| Ast.CtCon (_, Ast.BTrue, (Ast.IdLid (_, i)), t) ->
|
|
pp f "@[<2>virtual@ [@,%a@]@,]@ %a" o#class_params
|
|
t o#var i
|
|
| Ast.CtFun (_, t, ct) ->
|
|
pp f "@[<2>%a@ ->@ %a@]" o#simple_ctyp t
|
|
o#class_type ct
|
|
| Ast.CtSig (_, (Ast.TyNil _), csg) ->
|
|
pp f "@[<hv0>@[<hv2>object@ %a@]@ end@]"
|
|
o#class_sig_item csg
|
|
| Ast.CtSig (_, t, csg) ->
|
|
pp f
|
|
"@[<hv0>@[<hv2>object @[<1>(%a)@]@ %a@]@ end@]"
|
|
o#ctyp t o#class_sig_item csg
|
|
| Ast.CtAnt (_, s) -> o#anti f s
|
|
| Ast.CtAnd (_, ct1, ct2) ->
|
|
(o#class_type f ct1;
|
|
pp f andsep;
|
|
o#class_type f ct2)
|
|
| Ast.CtCol (_, ct1, ct2) ->
|
|
pp f "%a :@ %a" o#class_type ct1 o#class_type ct2
|
|
| Ast.CtEq (_, ct1, ct2) ->
|
|
pp f "%a =@ %a" o#class_type ct1 o#class_type ct2
|
|
| _ -> assert false
|
|
method class_sig_item =
|
|
fun f csg ->
|
|
let () = o#node f csg Ast.loc_of_class_sig_item
|
|
in
|
|
match csg with
|
|
| Ast.CgNil _ -> ()
|
|
| Ast.CgSem (_, csg, (Ast.CgNil _)) |
|
|
Ast.CgSem (_, (Ast.CgNil _), csg) ->
|
|
o#class_sig_item f csg
|
|
| Ast.CgSem (_, csg1, csg2) ->
|
|
(o#class_sig_item f csg1;
|
|
cut f;
|
|
o#class_sig_item f csg2)
|
|
| Ast.CgCtr (_, t1, t2) ->
|
|
pp f "@[<2>type@ %a =@ %a%s@]" o#ctyp t1 o#ctyp t2
|
|
semisep
|
|
| Ast.CgInh (_, ct) ->
|
|
pp f "@[<2>inherit@ %a%s@]" o#class_type ct semisep
|
|
| Ast.CgMth (_, s, pr, t) ->
|
|
pp f "@[<2>method %a%a :@ %a%s@]" o#private_flag pr
|
|
o#var s o#ctyp t semisep
|
|
| Ast.CgVir (_, s, pr, t) ->
|
|
pp f "@[<2>method virtual %a%a :@ %a%s@]"
|
|
o#private_flag pr o#var s o#ctyp t semisep
|
|
| Ast.CgVal (_, s, mu, vi, t) ->
|
|
pp f "@[<2>%s %a%a%a :@ %a%s@]" value_val
|
|
o#mutable_flag mu o#virtual_flag vi o#var s
|
|
o#ctyp t semisep
|
|
| Ast.CgAnt (_, s) -> pp f "%a%s" o#anti s semisep
|
|
method class_str_item =
|
|
fun f cst ->
|
|
let () = o#node f cst Ast.loc_of_class_str_item
|
|
in
|
|
match cst with
|
|
| Ast.CrNil _ -> ()
|
|
| Ast.CrSem (_, cst, (Ast.CrNil _)) |
|
|
Ast.CrSem (_, (Ast.CrNil _), cst) ->
|
|
o#class_str_item f cst
|
|
| Ast.CrSem (_, cst1, cst2) ->
|
|
(o#class_str_item f cst1;
|
|
cut f;
|
|
o#class_str_item f cst2)
|
|
| Ast.CrCtr (_, t1, t2) ->
|
|
pp f "@[<2>type %a =@ %a%s@]" o#ctyp t1 o#ctyp t2
|
|
semisep
|
|
| Ast.CrInh (_, ce, "") ->
|
|
pp f "@[<2>inherit@ %a%s@]" o#class_expr ce semisep
|
|
| Ast.CrInh (_, ce, s) ->
|
|
pp f "@[<2>inherit@ %a as@ %a%s@]" o#class_expr ce
|
|
o#var s semisep
|
|
| Ast.CrIni (_, e) ->
|
|
pp f "@[<2>initializer@ %a%s@]" o#expr e semisep
|
|
| Ast.CrMth (_, s, pr, e, (Ast.TyNil _)) ->
|
|
pp f "@[<2>method %a%a =@ %a%s@]" o#private_flag pr
|
|
o#var s o#expr e semisep
|
|
| Ast.CrMth (_, s, pr, e, t) ->
|
|
pp f "@[<2>method %a%a :@ %a =@ %a%s@]"
|
|
o#private_flag pr o#var s o#ctyp t o#expr e
|
|
semisep
|
|
| Ast.CrVir (_, s, pr, t) ->
|
|
pp f "@[<2>method virtual@ %a%a :@ %a%s@]"
|
|
o#private_flag pr o#var s o#ctyp t semisep
|
|
| Ast.CrVvr (_, s, mu, t) ->
|
|
pp f "@[<2>%s virtual %a%a :@ %a%s@]" value_val
|
|
o#mutable_flag mu o#var s o#ctyp t semisep
|
|
| Ast.CrVal (_, s, mu, e) ->
|
|
pp f "@[<2>%s %a%a =@ %a%s@]" value_val
|
|
o#mutable_flag mu o#var s o#expr e semisep
|
|
| Ast.CrAnt (_, s) -> pp f "%a%s" o#anti s semisep
|
|
method implem =
|
|
fun f st ->
|
|
match st with
|
|
| Ast.StExp (_, e) ->
|
|
pp f "@[<0>%a%s@]@." o#expr e semisep
|
|
| st -> pp f "@[<v0>%a@]@." o#str_item st
|
|
method interf = fun f sg -> pp f "@[<v0>%a@]@." o#sig_item sg
|
|
end
|
|
let with_outfile output_file fct arg =
|
|
let call close f =
|
|
((try fct f arg with | exn -> (close (); raise exn));
|
|
close ())
|
|
in
|
|
match output_file with
|
|
| None -> call (fun () -> ()) std_formatter
|
|
| Some s ->
|
|
let oc = open_out s in
|
|
let f = formatter_of_out_channel oc
|
|
in call (fun () -> close_out oc) f
|
|
let print output_file fct =
|
|
let o = new printer () in with_outfile output_file (fct o)
|
|
let print_interf ?input_file:(_) ?output_file sg =
|
|
print output_file (fun o -> o#interf) sg
|
|
let print_implem ?input_file:(_) ?output_file st =
|
|
print output_file (fun o -> o#implem) st
|
|
end
|
|
module MakeMore (Syntax : Sig.Camlp4Syntax) : Sig.Printer(Syntax.
|
|
Ast).S =
|
|
struct
|
|
include Make(Syntax)
|
|
let semisep = ref false
|
|
let margin = ref 78
|
|
let comments = ref true
|
|
let locations = ref false
|
|
let curry_constr = ref false
|
|
let print output_file fct =
|
|
let o =
|
|
new printer ~comments: !comments ~curry_constr: !curry_constr
|
|
() in
|
|
let o =
|
|
if !semisep then o#set_semisep ";;" else o#set_semisep "" in
|
|
let o = if !locations then o#set_loc_and_comments else o
|
|
in
|
|
with_outfile output_file
|
|
(fun f ->
|
|
let () = Format.pp_set_margin f !margin
|
|
in Format.fprintf f "@[<v0>%a@]@." (fct o))
|
|
let print_interf ?input_file:(_) ?output_file sg =
|
|
print output_file (fun o -> o#interf) sg
|
|
let print_implem ?input_file:(_) ?output_file st =
|
|
print output_file (fun o -> o#implem) st
|
|
let _ =
|
|
Options.add "-l" (Arg.Int (fun i -> margin := i))
|
|
"<length> line length for pretty printing."
|
|
let _ =
|
|
Options.add "-ss" (Arg.Set semisep) "Print double semicolons."
|
|
let _ =
|
|
Options.add "-curry-constr" (Arg.Set curry_constr)
|
|
"Use currified constructors."
|
|
let _ =
|
|
Options.add "-no_ss" (Arg.Clear semisep)
|
|
"Do not print double semicolons (default)."
|
|
let _ =
|
|
Options.add "-no_comments" (Arg.Clear comments)
|
|
"Do not add comments."
|
|
let _ =
|
|
Options.add "-add_locations" (Arg.Set locations)
|
|
"Add locations as comment."
|
|
end
|
|
end
|
|
module OCamlr :
|
|
sig
|
|
module Id : Sig.Id
|
|
module Make (Syntax : Sig.Camlp4Syntax) :
|
|
sig
|
|
open Format
|
|
include Sig.Camlp4Syntax with module Loc = Syntax.Loc
|
|
and module Token = Syntax.Token and module Ast = Syntax.Ast
|
|
and module Gram = Syntax.Gram
|
|
class printer :
|
|
?curry_constr: bool ->
|
|
?comments: bool ->
|
|
unit -> object ('a) inherit OCaml.Make(Syntax).printer end
|
|
val with_outfile :
|
|
string option -> (formatter -> 'a -> unit) -> 'a -> unit
|
|
val print :
|
|
string option ->
|
|
(printer -> formatter -> 'a -> unit) -> 'a -> unit
|
|
end
|
|
module MakeMore (Syntax : Sig.Camlp4Syntax) : Sig.Printer(Syntax.
|
|
Ast).S
|
|
end =
|
|
struct
|
|
open Format
|
|
module Id =
|
|
struct
|
|
let name = "Camlp4.Printers.OCamlr"
|
|
let version =
|
|
"$Id: OCamlr.ml,v 1.17.4.3 2007/05/10 13:31:20 pouillar Exp $"
|
|
end
|
|
module Make (Syntax : Sig.Camlp4Syntax) =
|
|
struct
|
|
include Syntax
|
|
open Sig
|
|
module PP_o = OCaml.Make(Syntax)
|
|
open PP_o
|
|
let pp = fprintf
|
|
let is_keyword =
|
|
let keywords = [ "where" ]
|
|
and not_keywords = [ "false"; "function"; "true"; "val" ]
|
|
in
|
|
fun s ->
|
|
(not (List.mem s not_keywords)) &&
|
|
((is_keyword s) || (List.mem s keywords))
|
|
class printer ?curry_constr:(init_curry_constr = true)
|
|
?(comments = true) () =
|
|
object (o)
|
|
inherit
|
|
PP_o.printer ~curry_constr: init_curry_constr ~comments () as
|
|
super
|
|
val semisep = ";"
|
|
val andsep =
|
|
("@]@ @[<2>and@ " : (unit, formatter, unit) format)
|
|
val value_val = "value"
|
|
val value_let = "value"
|
|
val mode = if comments then `comments else `no_comments
|
|
val curry_constr = init_curry_constr
|
|
val first_match_case = true
|
|
method under_pipe = o
|
|
method under_semi = o
|
|
method reset_semi = o
|
|
method reset = o
|
|
method private unset_first_match_case =
|
|
{< first_match_case = false; >}
|
|
method private set_first_match_case =
|
|
{< first_match_case = true; >}
|
|
method seq =
|
|
fun f e ->
|
|
let rec self right f e =
|
|
let go_right = self right
|
|
and go_left = self false
|
|
in
|
|
match e with
|
|
| Ast.ExLet (_, r, bi, e1) ->
|
|
if right
|
|
then
|
|
pp f "@[<2>let %a%a@];@ %a" o#rec_flag r
|
|
o#binding bi go_right e1
|
|
else pp f "(%a)" o#expr e
|
|
| Ast.ExSeq (_, e) -> go_right f e
|
|
| Ast.ExSem (_, e1, e2) ->
|
|
(pp f "%a;@ " go_left e1;
|
|
(match (right, e2) with
|
|
| (true, Ast.ExLet (_, r, bi, e3)) ->
|
|
pp f "@[<2>let %a%a@];@ %a" o#rec_flag r
|
|
o#binding bi go_right e3
|
|
| _ -> go_right f e2))
|
|
| e -> o#expr f e
|
|
in self true f e
|
|
method var =
|
|
fun f ->
|
|
function
|
|
| "" -> pp f "$lid:\"\"$"
|
|
| "[]" -> pp f "[]"
|
|
| "()" -> pp f "()"
|
|
| " True" -> pp f "True"
|
|
| " False" -> pp f "False"
|
|
| v ->
|
|
(match lex_string v with
|
|
| LIDENT s | UIDENT s | ESCAPED_IDENT s when
|
|
is_keyword s -> pp f "%s__" s
|
|
| SYMBOL s -> pp f "( %s )" s
|
|
| LIDENT s | UIDENT s | ESCAPED_IDENT s ->
|
|
pp_print_string f s
|
|
| tok ->
|
|
failwith
|
|
(sprintf "Bad token used as an identifier: %s"
|
|
(Token.to_string tok)))
|
|
method type_params =
|
|
fun f ->
|
|
function
|
|
| [] -> ()
|
|
| [ x ] -> pp f "@ %a" o#ctyp x
|
|
| l -> pp f "@ @[<1>%a@]" (list o#ctyp "@ ") l
|
|
method match_case =
|
|
fun f ->
|
|
function
|
|
| Ast.McNil _ -> pp f "@ []"
|
|
| m ->
|
|
pp f "@ [ %a ]" o#set_first_match_case#match_case_aux
|
|
m
|
|
method match_case_aux =
|
|
fun f ->
|
|
function
|
|
| Ast.McNil _ -> ()
|
|
| Ast.McAnt (_, s) -> o#anti f s
|
|
| Ast.McOr (_, a1, a2) ->
|
|
pp f "%a%a" o#match_case_aux a1
|
|
o#unset_first_match_case#match_case_aux a2
|
|
| Ast.McArr (_, p, (Ast.ExNil _), e) ->
|
|
let () = if first_match_case then () else pp f "@ | "
|
|
in
|
|
pp f "@[<2>%a@ ->@ %a@]" o#patt p o#under_pipe#expr
|
|
e
|
|
| Ast.McArr (_, p, w, e) ->
|
|
let () = if first_match_case then () else pp f "@ | "
|
|
in
|
|
pp f "@[<2>%a@ when@ %a@ ->@ %a@]" o#patt p
|
|
o#under_pipe#expr w o#under_pipe#expr e
|
|
method sum_type = fun f t -> pp f "@[<hv0>[ %a ]@]" o#ctyp t
|
|
method ident =
|
|
fun f i ->
|
|
let () = o#node f i Ast.loc_of_ident
|
|
in
|
|
match i with
|
|
| Ast.IdApp (_, i1, i2) ->
|
|
pp f "%a@ %a" o#dot_ident i1 o#dot_ident i2
|
|
| i -> o#dot_ident f i
|
|
method private dot_ident =
|
|
fun f i ->
|
|
let () = o#node f i Ast.loc_of_ident
|
|
in
|
|
match i with
|
|
| Ast.IdAcc (_, i1, i2) ->
|
|
pp f "%a.@,%a" o#dot_ident i1 o#dot_ident i2
|
|
| Ast.IdAnt (_, s) -> o#anti f s
|
|
| Ast.IdLid (_, s) | Ast.IdUid (_, s) -> o#var f s
|
|
| i -> pp f "(%a)" o#ident i
|
|
method patt4 =
|
|
fun f ->
|
|
function
|
|
| (Ast.PaApp (_,
|
|
(Ast.PaApp (_,
|
|
(Ast.PaId (_, (Ast.IdUid (_, "::")))), _)),
|
|
_)
|
|
as p) ->
|
|
let (pl, c) = o#mk_patt_list p
|
|
in
|
|
(match c with
|
|
| None ->
|
|
pp f "@[<2>[@ %a@]@ ]" (list o#patt ";@ ") pl
|
|
| Some x ->
|
|
pp f "@[<2>[ %a ::@ %a ]@]"
|
|
(list o#patt ";@ ") pl o#patt x)
|
|
| p -> super#patt4 f p
|
|
method expr_list_cons =
|
|
fun _ f e ->
|
|
let (el, c) = o#mk_expr_list e
|
|
in
|
|
match c with
|
|
| None -> o#expr_list f el
|
|
| Some x ->
|
|
pp f "@[<2>[ %a ::@ %a ]@]" (list o#expr ";@ ") el
|
|
o#expr x
|
|
method expr =
|
|
fun f e ->
|
|
let () = o#node f e Ast.loc_of_expr
|
|
in
|
|
match e with
|
|
| Ast.ExAss (_, e1, e2) ->
|
|
pp f "@[<2>%a@ :=@ %a@]" o#expr e1 o#expr e2
|
|
| Ast.ExFun (_, (Ast.McArr (_, p, (Ast.ExNil _), e)))
|
|
when Ast.is_irrefut_patt p ->
|
|
pp f "@[<2>fun@ %a@]" o#patt_expr_fun_args (p, e)
|
|
| Ast.ExFun (_, a) ->
|
|
pp f "@[<hv0>fun%a@]" o#match_case a
|
|
| Ast.ExAsf _ -> pp f "@[<2>assert@ False@]"
|
|
| e -> super#expr f e
|
|
method dot_expr =
|
|
fun f e ->
|
|
let () = o#node f e Ast.loc_of_expr
|
|
in
|
|
match e with
|
|
| Ast.ExAcc (_, e,
|
|
(Ast.ExId (_, (Ast.IdLid (_, "val"))))) ->
|
|
pp f "@[<2>%a.@,val@]" o#simple_expr e
|
|
| e -> super#dot_expr f e
|
|
method ctyp =
|
|
fun f t ->
|
|
let () = o#node f t Ast.loc_of_ctyp
|
|
in
|
|
match t with
|
|
| Ast.TyDcl (_, tn, tp, te, cl) ->
|
|
(pp f "@[<2>%a%a@]" o#var tn o#type_params tp;
|
|
(match te with
|
|
| Ast.TyNil _ -> ()
|
|
| _ -> pp f " =@ %a" o#ctyp te);
|
|
if cl <> []
|
|
then pp f "@ %a" (list o#constrain "@ ") cl
|
|
else ())
|
|
| Ast.TyCol (_, t1, (Ast.TyMut (_, t2))) ->
|
|
pp f "@[%a :@ mutable %a@]" o#ctyp t1 o#ctyp t2
|
|
| t -> super#ctyp f t
|
|
method simple_ctyp =
|
|
fun f t ->
|
|
let () = o#node f t Ast.loc_of_ctyp
|
|
in
|
|
match t with
|
|
| Ast.TyVrnEq (_, t) ->
|
|
pp f "@[<2>[ =@ %a@]@ ]" o#ctyp t
|
|
| Ast.TyVrnInf (_, t) ->
|
|
pp f "@[<2>[ <@ %a@]@,]" o#ctyp t
|
|
| Ast.TyVrnInfSup (_, t1, t2) ->
|
|
pp f "@[<2>[ <@ %a@ >@ %a@]@ ]" o#ctyp t1 o#ctyp t2
|
|
| Ast.TyVrnSup (_, t) ->
|
|
pp f "@[<2>[ >@ %a@]@,]" o#ctyp t
|
|
| Ast.TyMan (_, t1, t2) ->
|
|
pp f "@[<2>%a@ ==@ %a@]" o#simple_ctyp t1
|
|
o#simple_ctyp t2
|
|
| Ast.TyLab (_, s, t) ->
|
|
pp f "@[<2>~%s:@ %a@]" s o#simple_ctyp t
|
|
| t -> super#simple_ctyp f t
|
|
method ctyp1 =
|
|
fun f ->
|
|
function
|
|
| Ast.TyApp (_, t1, t2) ->
|
|
(match get_ctyp_args t1 [ t2 ] with
|
|
| (_, [ _ ]) ->
|
|
pp f "@[<2>%a@ %a@]" o#simple_ctyp t1
|
|
o#simple_ctyp t2
|
|
| (a, al) ->
|
|
pp f "@[<2>%a@]" (list o#simple_ctyp "@ ")
|
|
(a :: al))
|
|
| Ast.TyPol (_, t1, t2) ->
|
|
let (a, al) = get_ctyp_args t1 []
|
|
in
|
|
pp f "@[<2>! %a.@ %a@]" (list o#ctyp "@ ")
|
|
(a :: al) o#ctyp t2
|
|
| t -> super#ctyp1 f t
|
|
method constructor_type =
|
|
fun f t ->
|
|
match t with
|
|
| Ast.TyAnd (loc, t1, t2) ->
|
|
let () = o#node f t (fun _ -> loc)
|
|
in
|
|
pp f "%a@ and %a" o#constructor_type t1
|
|
o#constructor_type t2
|
|
| t -> o#ctyp f t
|
|
method str_item =
|
|
fun f st ->
|
|
match st with
|
|
| Ast.StExp (_, e) -> pp f "@[<2>%a%s@]" o#expr e semisep
|
|
| st -> super#str_item f st
|
|
method module_expr =
|
|
fun f me ->
|
|
let () = o#node f me Ast.loc_of_module_expr
|
|
in
|
|
match me with
|
|
| Ast.MeApp (_, me1, me2) ->
|
|
pp f "@[<2>%a@,(%a)@]" o#module_expr me1
|
|
o#module_expr me2
|
|
| me -> super#module_expr f me
|
|
method implem = fun f st -> pp f "@[<v0>%a@]@." o#str_item st
|
|
method class_type =
|
|
fun f ct ->
|
|
let () = o#node f ct Ast.loc_of_class_type
|
|
in
|
|
match ct with
|
|
| Ast.CtFun (_, t, ct) ->
|
|
pp f "@[<2>[ %a ] ->@ %a@]" o#simple_ctyp t
|
|
o#class_type ct
|
|
| Ast.CtCon (_, Ast.BFalse, i, (Ast.TyNil _)) ->
|
|
pp f "@[<2>%a@]" o#ident i
|
|
| Ast.CtCon (_, Ast.BFalse, i, t) ->
|
|
pp f "@[<2>%a [@,%a@]@,]" o#ident i o#class_params
|
|
t
|
|
| Ast.CtCon (_, Ast.BTrue, (Ast.IdLid (_, i)),
|
|
(Ast.TyNil _)) -> pp f "@[<2>virtual@ %a@]" o#var i
|
|
| Ast.CtCon (_, Ast.BTrue, (Ast.IdLid (_, i)), t) ->
|
|
pp f "@[<2>virtual@ %a@ [@,%a@]@,]" o#var i
|
|
o#class_params t
|
|
| ct -> super#class_type f ct
|
|
method class_expr =
|
|
fun f ce ->
|
|
let () = o#node f ce Ast.loc_of_class_expr
|
|
in
|
|
match ce with
|
|
| Ast.CeCon (_, Ast.BFalse, i, (Ast.TyNil _)) ->
|
|
pp f "@[<2>%a@]" o#ident i
|
|
| Ast.CeCon (_, Ast.BFalse, i, t) ->
|
|
pp f "@[<2>%a@ @[<1>[%a]@]@]" o#ident i
|
|
o#class_params t
|
|
| Ast.CeCon (_, Ast.BTrue, (Ast.IdLid (_, i)),
|
|
(Ast.TyNil _)) -> pp f "@[<2>virtual@ %a@]" o#var i
|
|
| Ast.CeCon (_, Ast.BTrue, (Ast.IdLid (_, i)), t) ->
|
|
pp f "@[<2>virtual@ %a@ @[<1>[%a]@]@]" o#var i
|
|
o#ctyp t
|
|
| ce -> super#class_expr f ce
|
|
end
|
|
let with_outfile = with_outfile
|
|
let print = print
|
|
let print_interf = print_interf
|
|
let print_implem = print_implem
|
|
end
|
|
module MakeMore (Syntax : Sig.Camlp4Syntax) : Sig.Printer(Syntax.
|
|
Ast).S =
|
|
struct
|
|
include Make(Syntax)
|
|
let margin = ref 78
|
|
let comments = ref true
|
|
let locations = ref false
|
|
let curry_constr = ref true
|
|
let print output_file fct =
|
|
let o =
|
|
new printer ~comments: !comments ~curry_constr: !curry_constr
|
|
() in
|
|
let o = if !locations then o#set_loc_and_comments else o
|
|
in
|
|
with_outfile output_file
|
|
(fun f ->
|
|
let () = Format.pp_set_margin f !margin
|
|
in Format.fprintf f "@[<v0>%a@]@." (fct o))
|
|
let print_interf ?input_file:(_) ?output_file sg =
|
|
print output_file (fun o -> o#interf) sg
|
|
let print_implem ?input_file:(_) ?output_file st =
|
|
print output_file (fun o -> o#implem) st
|
|
let _ =
|
|
Options.add "-l" (Arg.Int (fun i -> margin := i))
|
|
"<length> line length for pretty printing."
|
|
let _ =
|
|
Options.add "-no_comments" (Arg.Clear comments)
|
|
"Do not add comments."
|
|
let _ =
|
|
Options.add "-add_locations" (Arg.Set locations)
|
|
"Add locations as comment."
|
|
end
|
|
end
|
|
end
|
|
module OCamlInitSyntax =
|
|
struct
|
|
module Make
|
|
(Ast : Sig.Camlp4Ast)
|
|
(Gram :
|
|
Sig.Grammar.Static with module Loc = Ast.Loc with
|
|
type Token.t = Sig.camlp4_token)
|
|
(Quotation : Sig.Quotation with module Ast = Sig.Camlp4AstToAst(Ast)) :
|
|
Sig.Camlp4Syntax with module Loc = Ast.Loc and module Ast = Ast
|
|
and module Token = Gram.Token and module Gram = Gram
|
|
and module AntiquotSyntax.Ast = Sig.Camlp4AstToAst(Ast)
|
|
and module Quotation = Quotation =
|
|
struct
|
|
module Loc = Ast.Loc
|
|
module Ast = Ast
|
|
module Gram = Gram
|
|
module Token = Gram.Token
|
|
open Sig
|
|
type warning = Loc.t -> string -> unit
|
|
let default_warning loc txt =
|
|
Format.eprintf "<W> %a: %s@." Loc.print loc txt
|
|
let current_warning = ref default_warning
|
|
let print_warning loc txt = !current_warning loc txt
|
|
let a_CHAR = Gram.Entry.mk "a_CHAR"
|
|
let a_FLOAT = Gram.Entry.mk "a_FLOAT"
|
|
let a_INT = Gram.Entry.mk "a_INT"
|
|
let a_INT32 = Gram.Entry.mk "a_INT32"
|
|
let a_INT64 = Gram.Entry.mk "a_INT64"
|
|
let a_LABEL = Gram.Entry.mk "a_LABEL"
|
|
let a_LIDENT = Gram.Entry.mk "a_LIDENT"
|
|
let a_NATIVEINT = Gram.Entry.mk "a_NATIVEINT"
|
|
let a_OPTLABEL = Gram.Entry.mk "a_OPTLABEL"
|
|
let a_STRING = Gram.Entry.mk "a_STRING"
|
|
let a_UIDENT = Gram.Entry.mk "a_UIDENT"
|
|
let a_ident = Gram.Entry.mk "a_ident"
|
|
let amp_ctyp = Gram.Entry.mk "amp_ctyp"
|
|
let and_ctyp = Gram.Entry.mk "and_ctyp"
|
|
let match_case = Gram.Entry.mk "match_case"
|
|
let match_case0 = Gram.Entry.mk "match_case0"
|
|
let binding = Gram.Entry.mk "binding"
|
|
let class_declaration = Gram.Entry.mk "class_declaration"
|
|
let class_description = Gram.Entry.mk "class_description"
|
|
let class_expr = Gram.Entry.mk "class_expr"
|
|
let class_fun_binding = Gram.Entry.mk "class_fun_binding"
|
|
let class_fun_def = Gram.Entry.mk "class_fun_def"
|
|
let class_info_for_class_expr =
|
|
Gram.Entry.mk "class_info_for_class_expr"
|
|
let class_info_for_class_type =
|
|
Gram.Entry.mk "class_info_for_class_type"
|
|
let class_longident = Gram.Entry.mk "class_longident"
|
|
let class_longident_and_param =
|
|
Gram.Entry.mk "class_longident_and_param"
|
|
let class_name_and_param = Gram.Entry.mk "class_name_and_param"
|
|
let class_sig_item = Gram.Entry.mk "class_sig_item"
|
|
let class_signature = Gram.Entry.mk "class_signature"
|
|
let class_str_item = Gram.Entry.mk "class_str_item"
|
|
let class_structure = Gram.Entry.mk "class_structure"
|
|
let class_type = Gram.Entry.mk "class_type"
|
|
let class_type_declaration = Gram.Entry.mk "class_type_declaration"
|
|
let class_type_longident = Gram.Entry.mk "class_type_longident"
|
|
let class_type_longident_and_param =
|
|
Gram.Entry.mk "class_type_longident_and_param"
|
|
let class_type_plus = Gram.Entry.mk "class_type_plus"
|
|
let comma_ctyp = Gram.Entry.mk "comma_ctyp"
|
|
let comma_expr = Gram.Entry.mk "comma_expr"
|
|
let comma_ipatt = Gram.Entry.mk "comma_ipatt"
|
|
let comma_patt = Gram.Entry.mk "comma_patt"
|
|
let comma_type_parameter = Gram.Entry.mk "comma_type_parameter"
|
|
let constrain = Gram.Entry.mk "constrain"
|
|
let constructor_arg_list = Gram.Entry.mk "constructor_arg_list"
|
|
let constructor_declaration = Gram.Entry.mk "constructor_declaration"
|
|
let constructor_declarations =
|
|
Gram.Entry.mk "constructor_declarations"
|
|
let ctyp = Gram.Entry.mk "ctyp"
|
|
let cvalue_binding = Gram.Entry.mk "cvalue_binding"
|
|
let direction_flag = Gram.Entry.mk "direction_flag"
|
|
let dummy = Gram.Entry.mk "dummy"
|
|
let entry_eoi = Gram.Entry.mk "entry_eoi"
|
|
let eq_expr = Gram.Entry.mk "eq_expr"
|
|
let expr = Gram.Entry.mk "expr"
|
|
let expr_eoi = Gram.Entry.mk "expr_eoi"
|
|
let field_expr = Gram.Entry.mk "field_expr"
|
|
let fun_binding = Gram.Entry.mk "fun_binding"
|
|
let fun_def = Gram.Entry.mk "fun_def"
|
|
let ident = Gram.Entry.mk "ident"
|
|
let implem = Gram.Entry.mk "implem"
|
|
let interf = Gram.Entry.mk "interf"
|
|
let ipatt = Gram.Entry.mk "ipatt"
|
|
let ipatt_tcon = Gram.Entry.mk "ipatt_tcon"
|
|
let label = Gram.Entry.mk "label"
|
|
let label_declaration = Gram.Entry.mk "label_declaration"
|
|
let label_expr = Gram.Entry.mk "label_expr"
|
|
let label_ipatt = Gram.Entry.mk "label_ipatt"
|
|
let label_longident = Gram.Entry.mk "label_longident"
|
|
let label_patt = Gram.Entry.mk "label_patt"
|
|
let labeled_ipatt = Gram.Entry.mk "labeled_ipatt"
|
|
let let_binding = Gram.Entry.mk "let_binding"
|
|
let meth_list = Gram.Entry.mk "meth_list"
|
|
let module_binding = Gram.Entry.mk "module_binding"
|
|
let module_binding0 = Gram.Entry.mk "module_binding0"
|
|
let module_declaration = Gram.Entry.mk "module_declaration"
|
|
let module_expr = Gram.Entry.mk "module_expr"
|
|
let module_longident = Gram.Entry.mk "module_longident"
|
|
let module_longident_with_app =
|
|
Gram.Entry.mk "module_longident_with_app"
|
|
let module_rec_declaration = Gram.Entry.mk "module_rec_declaration"
|
|
let module_type = Gram.Entry.mk "module_type"
|
|
let more_ctyp = Gram.Entry.mk "more_ctyp"
|
|
let name_tags = Gram.Entry.mk "name_tags"
|
|
let opt_as_lident = Gram.Entry.mk "opt_as_lident"
|
|
let opt_class_self_patt = Gram.Entry.mk "opt_class_self_patt"
|
|
let opt_class_self_type = Gram.Entry.mk "opt_class_self_type"
|
|
let opt_class_signature = Gram.Entry.mk "opt_class_signature"
|
|
let opt_class_structure = Gram.Entry.mk "opt_class_structure"
|
|
let opt_comma_ctyp = Gram.Entry.mk "opt_comma_ctyp"
|
|
let opt_dot_dot = Gram.Entry.mk "opt_dot_dot"
|
|
let opt_eq_ctyp = Gram.Entry.mk "opt_eq_ctyp"
|
|
let opt_expr = Gram.Entry.mk "opt_expr"
|
|
let opt_meth_list = Gram.Entry.mk "opt_meth_list"
|
|
let opt_mutable = Gram.Entry.mk "opt_mutable"
|
|
let opt_polyt = Gram.Entry.mk "opt_polyt"
|
|
let opt_private = Gram.Entry.mk "opt_private"
|
|
let opt_rec = Gram.Entry.mk "opt_rec"
|
|
let opt_sig_items = Gram.Entry.mk "opt_sig_items"
|
|
let opt_str_items = Gram.Entry.mk "opt_str_items"
|
|
let opt_virtual = Gram.Entry.mk "opt_virtual"
|
|
let opt_when_expr = Gram.Entry.mk "opt_when_expr"
|
|
let patt = Gram.Entry.mk "patt"
|
|
let patt_as_patt_opt = Gram.Entry.mk "patt_as_patt_opt"
|
|
let patt_eoi = Gram.Entry.mk "patt_eoi"
|
|
let patt_tcon = Gram.Entry.mk "patt_tcon"
|
|
let phrase = Gram.Entry.mk "phrase"
|
|
let poly_type = Gram.Entry.mk "poly_type"
|
|
let row_field = Gram.Entry.mk "row_field"
|
|
let sem_expr = Gram.Entry.mk "sem_expr"
|
|
let sem_expr_for_list = Gram.Entry.mk "sem_expr_for_list"
|
|
let sem_patt = Gram.Entry.mk "sem_patt"
|
|
let sem_patt_for_list = Gram.Entry.mk "sem_patt_for_list"
|
|
let semi = Gram.Entry.mk "semi"
|
|
let sequence = Gram.Entry.mk "sequence"
|
|
let do_sequence = Gram.Entry.mk "do_sequence"
|
|
let sig_item = Gram.Entry.mk "sig_item"
|
|
let sig_items = Gram.Entry.mk "sig_items"
|
|
let star_ctyp = Gram.Entry.mk "star_ctyp"
|
|
let str_item = Gram.Entry.mk "str_item"
|
|
let str_items = Gram.Entry.mk "str_items"
|
|
let top_phrase = Gram.Entry.mk "top_phrase"
|
|
let type_constraint = Gram.Entry.mk "type_constraint"
|
|
let type_declaration = Gram.Entry.mk "type_declaration"
|
|
let type_ident_and_parameters =
|
|
Gram.Entry.mk "type_ident_and_parameters"
|
|
let type_kind = Gram.Entry.mk "type_kind"
|
|
let type_longident = Gram.Entry.mk "type_longident"
|
|
let type_longident_and_parameters =
|
|
Gram.Entry.mk "type_longident_and_parameters"
|
|
let type_parameter = Gram.Entry.mk "type_parameter"
|
|
let type_parameters = Gram.Entry.mk "type_parameters"
|
|
let typevars = Gram.Entry.mk "typevars"
|
|
let use_file = Gram.Entry.mk "use_file"
|
|
let val_longident = Gram.Entry.mk "val_longident"
|
|
let value_let = Gram.Entry.mk "value_let"
|
|
let value_val = Gram.Entry.mk "value_val"
|
|
let with_constr = Gram.Entry.mk "with_constr"
|
|
let expr_quot = Gram.Entry.mk "quotation of expression"
|
|
let patt_quot = Gram.Entry.mk "quotation of pattern"
|
|
let ctyp_quot = Gram.Entry.mk "quotation of type"
|
|
let str_item_quot = Gram.Entry.mk "quotation of structure item"
|
|
let sig_item_quot = Gram.Entry.mk "quotation of signature item"
|
|
let class_str_item_quot =
|
|
Gram.Entry.mk "quotation of class structure item"
|
|
let class_sig_item_quot =
|
|
Gram.Entry.mk "quotation of class signature item"
|
|
let module_expr_quot = Gram.Entry.mk "quotation of module expression"
|
|
let module_type_quot = Gram.Entry.mk "quotation of module type"
|
|
let class_type_quot = Gram.Entry.mk "quotation of class type"
|
|
let class_expr_quot = Gram.Entry.mk "quotation of class expression"
|
|
let with_constr_quot = Gram.Entry.mk "quotation of with constraint"
|
|
let binding_quot = Gram.Entry.mk "quotation of binding"
|
|
let rec_binding_quot = Gram.Entry.mk "quotation of record binding"
|
|
let match_case_quot =
|
|
Gram.Entry.mk "quotation of match_case (try/match/function case)"
|
|
let module_binding_quot =
|
|
Gram.Entry.mk "quotation of module rec binding"
|
|
let ident_quot = Gram.Entry.mk "quotation of identifier"
|
|
let prefixop =
|
|
Gram.Entry.mk "prefix operator (start with '!', '?', '~')"
|
|
let infixop0 =
|
|
Gram.Entry.mk
|
|
"infix operator (level 0) (comparison operators, and some others)"
|
|
let infixop1 =
|
|
Gram.Entry.mk "infix operator (level 1) (start with '^', '@')"
|
|
let infixop2 =
|
|
Gram.Entry.mk "infix operator (level 2) (start with '+', '-')"
|
|
let infixop3 =
|
|
Gram.Entry.mk "infix operator (level 3) (start with '*', '/', '%')"
|
|
let infixop4 =
|
|
Gram.Entry.mk
|
|
"infix operator (level 4) (start with \"**\") (right assoc)"
|
|
let _ =
|
|
Gram.extend (top_phrase : 'top_phrase Gram.Entry.t)
|
|
((fun () ->
|
|
(None,
|
|
[ (None, None,
|
|
[ ([ Gram.Stoken
|
|
(((function | EOI -> true | _ -> false), "EOI")) ],
|
|
(Gram.Action.mk
|
|
(fun (__camlp4_0 : Gram.Token.t) (_loc : Loc.t) ->
|
|
match __camlp4_0 with
|
|
| EOI -> (None : 'top_phrase)
|
|
| _ -> assert false))) ]) ]))
|
|
())
|
|
module AntiquotSyntax =
|
|
struct
|
|
module Loc = Ast.Loc
|
|
module Ast = Sig.Camlp4AstToAst(Ast)
|
|
module Gram = Gram
|
|
let antiquot_expr = Gram.Entry.mk "antiquot_expr"
|
|
let antiquot_patt = Gram.Entry.mk "antiquot_patt"
|
|
let _ =
|
|
(Gram.extend (antiquot_expr : 'antiquot_expr Gram.Entry.t)
|
|
((fun () ->
|
|
(None,
|
|
[ (None, None,
|
|
[ ([ Gram.Snterm
|
|
(Gram.Entry.obj (expr : 'expr Gram.Entry.t));
|
|
Gram.Stoken
|
|
(((function | EOI -> true | _ -> false),
|
|
"EOI")) ],
|
|
(Gram.Action.mk
|
|
(fun (__camlp4_0 : Gram.Token.t) (x : 'expr)
|
|
(_loc : Loc.t) ->
|
|
match __camlp4_0 with
|
|
| EOI -> (x : 'antiquot_expr)
|
|
| _ -> assert false))) ]) ]))
|
|
());
|
|
Gram.extend (antiquot_patt : 'antiquot_patt Gram.Entry.t)
|
|
((fun () ->
|
|
(None,
|
|
[ (None, None,
|
|
[ ([ Gram.Snterm
|
|
(Gram.Entry.obj (patt : 'patt Gram.Entry.t));
|
|
Gram.Stoken
|
|
(((function | EOI -> true | _ -> false),
|
|
"EOI")) ],
|
|
(Gram.Action.mk
|
|
(fun (__camlp4_0 : Gram.Token.t) (x : 'patt)
|
|
(_loc : Loc.t) ->
|
|
match __camlp4_0 with
|
|
| EOI -> (x : 'antiquot_patt)
|
|
| _ -> assert false))) ]) ]))
|
|
()))
|
|
let parse_expr loc str = Gram.parse_string antiquot_expr loc str
|
|
let parse_patt loc str = Gram.parse_string antiquot_patt loc str
|
|
end
|
|
module Quotation = Quotation
|
|
let wrap directive_handler pa init_loc cs =
|
|
let rec loop loc =
|
|
let (pl, stopped_at_directive) = pa loc cs
|
|
in
|
|
match stopped_at_directive with
|
|
| Some new_loc ->
|
|
let pl =
|
|
(match List.rev pl with
|
|
| [] -> assert false
|
|
| x :: xs ->
|
|
(match directive_handler x with
|
|
| None -> xs
|
|
| Some x -> x :: xs))
|
|
in (List.rev pl) @ (loop new_loc)
|
|
| None -> pl
|
|
in loop init_loc
|
|
let parse_implem ?(directive_handler = fun _ -> None) _loc cs =
|
|
let l = wrap directive_handler (Gram.parse implem) _loc cs
|
|
in Ast.stSem_of_list l
|
|
let parse_interf ?(directive_handler = fun _ -> None) _loc cs =
|
|
let l = wrap directive_handler (Gram.parse interf) _loc cs
|
|
in Ast.sgSem_of_list l
|
|
let print_interf ?input_file:(_) ?output_file:(_) _ =
|
|
failwith "No interface printer"
|
|
let print_implem ?input_file:(_) ?output_file:(_) _ =
|
|
failwith "No implementation printer"
|
|
end
|
|
end
|
|
module PreCast :
|
|
sig
|
|
type camlp4_token =
|
|
Sig.camlp4_token =
|
|
| KEYWORD of string | SYMBOL of string | LIDENT of string
|
|
| UIDENT of string | ESCAPED_IDENT of string | INT of int * string
|
|
| INT32 of int32 * string | INT64 of int64 * string
|
|
| NATIVEINT of nativeint * string | FLOAT of float * string
|
|
| CHAR of char * string | STRING of string * string | LABEL of string
|
|
| OPTLABEL of string | QUOTATION of Sig.quotation
|
|
| ANTIQUOT of string * string | COMMENT of string | BLANKS of string
|
|
| NEWLINE | LINE_DIRECTIVE of int * string option | EOI
|
|
module Id : Sig.Id
|
|
module Loc : Sig.Loc
|
|
module Ast : Sig.Camlp4Ast with module Loc = Loc
|
|
module Token : Sig.Token with module Loc = Loc and type t = camlp4_token
|
|
module Lexer : Sig.Lexer with module Loc = Loc and module Token = Token
|
|
module Gram : Sig.Grammar.Static with module Loc = Loc
|
|
and module Token = Token
|
|
module Quotation :
|
|
Sig.Quotation with module Ast = Sig.Camlp4AstToAst(Ast)
|
|
module DynLoader : Sig.DynLoader
|
|
module AstFilters : Sig.AstFilters with module Ast = Ast
|
|
module Syntax : Sig.Camlp4Syntax with module Loc = Loc
|
|
and module Token = Token and module Ast = Ast and module Gram = Gram
|
|
and module Quotation = Quotation
|
|
module Printers :
|
|
sig
|
|
module OCaml : Sig.Printer(Ast).S
|
|
module OCamlr : Sig.Printer(Ast).S
|
|
module DumpOCamlAst : Sig.Printer(Ast).S
|
|
module DumpCamlp4Ast : Sig.Printer(Ast).S
|
|
module Null : Sig.Printer(Ast).S
|
|
end
|
|
module MakeGram (Lexer : Sig.Lexer with module Loc = Loc) :
|
|
Sig.Grammar.Static with module Loc = Loc and module Token = Lexer.Token
|
|
module MakeSyntax (U : sig end) : Sig.Syntax
|
|
end =
|
|
struct
|
|
module Id =
|
|
struct
|
|
let name = "Camlp4.PreCast"
|
|
let version =
|
|
"$Id: PreCast.ml,v 1.4.4.1 2007/03/30 15:50:12 pouillar Exp $"
|
|
end
|
|
type camlp4_token =
|
|
Sig.camlp4_token =
|
|
| KEYWORD of string | SYMBOL of string | LIDENT of string
|
|
| UIDENT of string | ESCAPED_IDENT of string | INT of int * string
|
|
| INT32 of int32 * string | INT64 of int64 * string
|
|
| NATIVEINT of nativeint * string | FLOAT of float * string
|
|
| CHAR of char * string | STRING of string * string | LABEL of string
|
|
| OPTLABEL of string | QUOTATION of Sig.quotation
|
|
| ANTIQUOT of string * string | COMMENT of string | BLANKS of string
|
|
| NEWLINE | LINE_DIRECTIVE of int * string option | EOI
|
|
module Loc = Struct.Loc
|
|
module Ast = Struct.Camlp4Ast.Make(Loc)
|
|
module Token = Struct.Token.Make(Loc)
|
|
module Lexer = Struct.Lexer.Make(Token)
|
|
module Gram = Struct.Grammar.Static.Make(Lexer)
|
|
module DynLoader = Struct.DynLoader
|
|
module Quotation = Struct.Quotation.Make(Ast)
|
|
module MakeSyntax (U : sig end) =
|
|
OCamlInitSyntax.Make(Ast)(Gram)(Quotation)
|
|
module Syntax = MakeSyntax(struct end)
|
|
module AstFilters = Struct.AstFilters.Make(Ast)
|
|
module MakeGram = Struct.Grammar.Static.Make
|
|
module Printers =
|
|
struct
|
|
module OCaml = Printers.OCaml.Make(Syntax)
|
|
module OCamlr = Printers.OCamlr.Make(Syntax)
|
|
module DumpOCamlAst = Printers.DumpOCamlAst.Make(Syntax)
|
|
module DumpCamlp4Ast = Printers.DumpCamlp4Ast.Make(Syntax)
|
|
module Null = Printers.Null.Make(Syntax)
|
|
end
|
|
end
|
|
module Register :
|
|
sig
|
|
module Plugin
|
|
(Id : Sig.Id) (Plugin : functor (Unit : sig end) -> sig end) :
|
|
sig end
|
|
module SyntaxPlugin
|
|
(Id : Sig.Id) (SyntaxPlugin : functor (Syn : Sig.Syntax) -> sig end) :
|
|
sig end
|
|
module SyntaxExtension
|
|
(Id : Sig.Id) (SyntaxExtension : Sig.SyntaxExtension) : sig end
|
|
module OCamlSyntaxExtension
|
|
(Id : Sig.Id)
|
|
(SyntaxExtension :
|
|
functor (Syntax : Sig.Camlp4Syntax) -> Sig.Camlp4Syntax) :
|
|
sig end
|
|
type 'a parser_fun =
|
|
?directive_handler: ('a -> 'a option) ->
|
|
PreCast.Loc.t -> char Stream.t -> 'a
|
|
val register_str_item_parser : PreCast.Ast.str_item parser_fun -> unit
|
|
val register_sig_item_parser : PreCast.Ast.sig_item parser_fun -> unit
|
|
val register_parser :
|
|
PreCast.Ast.str_item parser_fun ->
|
|
PreCast.Ast.sig_item parser_fun -> unit
|
|
module Parser
|
|
(Id : Sig.Id) (Maker : functor (Ast : Sig.Ast) -> Sig.Parser(Ast).S) :
|
|
sig end
|
|
module OCamlParser
|
|
(Id : Sig.Id)
|
|
(Maker : functor (Ast : Sig.Camlp4Ast) -> Sig.Parser(Ast).S) :
|
|
sig end
|
|
module OCamlPreCastParser
|
|
(Id : Sig.Id) (Parser : Sig.Parser(PreCast.Ast).S) : sig end
|
|
type 'a printer_fun =
|
|
?input_file: string -> ?output_file: string -> 'a -> unit
|
|
val register_str_item_printer : PreCast.Ast.str_item printer_fun -> unit
|
|
val register_sig_item_printer : PreCast.Ast.sig_item printer_fun -> unit
|
|
val register_printer :
|
|
PreCast.Ast.str_item printer_fun ->
|
|
PreCast.Ast.sig_item printer_fun -> unit
|
|
module Printer
|
|
(Id : Sig.Id)
|
|
(Maker : functor (Syn : Sig.Syntax) -> Sig.Printer(Syn.Ast).S) :
|
|
sig end
|
|
module OCamlPrinter
|
|
(Id : Sig.Id)
|
|
(Maker : functor (Syn : Sig.Camlp4Syntax) -> Sig.Printer(Syn.Ast).S) :
|
|
sig end
|
|
module OCamlPreCastPrinter
|
|
(Id : Sig.Id) (Printer : Sig.Printer(PreCast.Ast).S) : sig end
|
|
module AstFilter
|
|
(Id : Sig.Id) (Maker : functor (F : Sig.AstFilters) -> sig end) :
|
|
sig end
|
|
val declare_dyn_module : string -> (unit -> unit) -> unit
|
|
val iter_and_take_callbacks : ((string * (unit -> unit)) -> unit) -> unit
|
|
val loaded_modules : (string list) ref
|
|
module CurrentParser : Sig.Parser(PreCast.Ast).S
|
|
module CurrentPrinter : Sig.Printer(PreCast.Ast).S
|
|
val enable_ocaml_printer : unit -> unit
|
|
val enable_ocamlr_printer : unit -> unit
|
|
val enable_null_printer : unit -> unit
|
|
val enable_dump_ocaml_ast_printer : unit -> unit
|
|
val enable_dump_camlp4_ast_printer : unit -> unit
|
|
end =
|
|
struct
|
|
module PP = Printers
|
|
open PreCast
|
|
type 'a parser_fun =
|
|
?directive_handler: ('a -> 'a option) ->
|
|
PreCast.Loc.t -> char Stream.t -> 'a
|
|
type 'a printer_fun =
|
|
?input_file: string -> ?output_file: string -> 'a -> unit
|
|
let sig_item_parser =
|
|
ref (fun ?directive_handler:(_) _ _ -> failwith "No interface parser")
|
|
let str_item_parser =
|
|
ref
|
|
(fun ?directive_handler:(_) _ _ ->
|
|
failwith "No implementation parser")
|
|
let sig_item_printer =
|
|
ref
|
|
(fun ?input_file:(_) ?output_file:(_) _ ->
|
|
failwith "No interface printer")
|
|
let str_item_printer =
|
|
ref
|
|
(fun ?input_file:(_) ?output_file:(_) _ ->
|
|
failwith "No implementation printer")
|
|
let callbacks = Queue.create ()
|
|
let loaded_modules = ref []
|
|
let iter_and_take_callbacks f =
|
|
let rec loop () = loop (f (Queue.take callbacks))
|
|
in try loop () with | Queue.Empty -> ()
|
|
let declare_dyn_module m f =
|
|
(loaded_modules := m :: !loaded_modules; Queue.add (m, f) callbacks)
|
|
let register_str_item_parser f = str_item_parser := f
|
|
let register_sig_item_parser f = sig_item_parser := f
|
|
let register_parser f g = (str_item_parser := f; sig_item_parser := g)
|
|
let register_str_item_printer f = str_item_printer := f
|
|
let register_sig_item_printer f = sig_item_printer := f
|
|
let register_printer f g = (str_item_printer := f; sig_item_printer := g)
|
|
module Plugin
|
|
(Id : Sig.Id) (Maker : functor (Unit : sig end) -> sig end) =
|
|
struct
|
|
let _ =
|
|
declare_dyn_module Id.name
|
|
(fun _ -> let module M = Maker(struct end) in ())
|
|
end
|
|
module SyntaxExtension (Id : Sig.Id) (Maker : Sig.SyntaxExtension) =
|
|
struct
|
|
let _ =
|
|
declare_dyn_module Id.name
|
|
(fun _ -> let module M = Maker(Syntax) in ())
|
|
end
|
|
module OCamlSyntaxExtension
|
|
(Id : Sig.Id)
|
|
(Maker : functor (Syn : Sig.Camlp4Syntax) -> Sig.Camlp4Syntax) =
|
|
struct
|
|
let _ =
|
|
declare_dyn_module Id.name
|
|
(fun _ -> let module M = Maker(Syntax) in ())
|
|
end
|
|
module SyntaxPlugin
|
|
(Id : Sig.Id) (Maker : functor (Syn : Sig.Syntax) -> sig end) =
|
|
struct
|
|
let _ =
|
|
declare_dyn_module Id.name
|
|
(fun _ -> let module M = Maker(Syntax) in ())
|
|
end
|
|
module Printer
|
|
(Id : Sig.Id)
|
|
(Maker : functor (Syn : Sig.Syntax) -> Sig.Printer(Syn.Ast).S) =
|
|
struct
|
|
let _ =
|
|
declare_dyn_module Id.name
|
|
(fun _ -> let module M = Maker(Syntax)
|
|
in register_printer M.print_implem M.print_interf)
|
|
end
|
|
module OCamlPrinter
|
|
(Id : Sig.Id)
|
|
(Maker : functor (Syn : Sig.Camlp4Syntax) -> Sig.Printer(Syn.Ast).S) =
|
|
struct
|
|
let _ =
|
|
declare_dyn_module Id.name
|
|
(fun _ -> let module M = Maker(Syntax)
|
|
in register_printer M.print_implem M.print_interf)
|
|
end
|
|
module OCamlPreCastPrinter
|
|
(Id : Sig.Id) (P : Sig.Printer(PreCast.Ast).S) =
|
|
struct
|
|
let _ =
|
|
declare_dyn_module Id.name
|
|
(fun _ -> register_printer P.print_implem P.print_interf)
|
|
end
|
|
module Parser
|
|
(Id : Sig.Id) (Maker : functor (Ast : Sig.Ast) -> Sig.Parser(Ast).S) =
|
|
struct
|
|
let _ =
|
|
declare_dyn_module Id.name
|
|
(fun _ -> let module M = Maker(PreCast.Ast)
|
|
in register_parser M.parse_implem M.parse_interf)
|
|
end
|
|
module OCamlParser
|
|
(Id : Sig.Id)
|
|
(Maker : functor (Ast : Sig.Camlp4Ast) -> Sig.Parser(Ast).S) =
|
|
struct
|
|
let _ =
|
|
declare_dyn_module Id.name
|
|
(fun _ -> let module M = Maker(PreCast.Ast)
|
|
in register_parser M.parse_implem M.parse_interf)
|
|
end
|
|
module OCamlPreCastParser (Id : Sig.Id) (P : Sig.Parser(PreCast.Ast).S) =
|
|
struct
|
|
let _ =
|
|
declare_dyn_module Id.name
|
|
(fun _ -> register_parser P.parse_implem P.parse_interf)
|
|
end
|
|
module AstFilter
|
|
(Id : Sig.Id) (Maker : functor (F : Sig.AstFilters) -> sig end) =
|
|
struct
|
|
let _ =
|
|
declare_dyn_module Id.name
|
|
(fun _ -> let module M = Maker(AstFilters) in ())
|
|
end
|
|
let _ = sig_item_parser := Syntax.parse_interf
|
|
let _ = str_item_parser := Syntax.parse_implem
|
|
module CurrentParser =
|
|
struct
|
|
module Ast = Ast
|
|
let parse_interf ?directive_handler loc strm =
|
|
!sig_item_parser ?directive_handler loc strm
|
|
let parse_implem ?directive_handler loc strm =
|
|
!str_item_parser ?directive_handler loc strm
|
|
end
|
|
module CurrentPrinter =
|
|
struct
|
|
module Ast = Ast
|
|
let print_interf ?input_file ?output_file ast =
|
|
!sig_item_printer ?input_file ?output_file ast
|
|
let print_implem ?input_file ?output_file ast =
|
|
!str_item_printer ?input_file ?output_file ast
|
|
end
|
|
let enable_ocaml_printer () =
|
|
let module M = OCamlPrinter(PP.OCaml.Id)(PP.OCaml.MakeMore) in ()
|
|
let enable_ocamlr_printer () =
|
|
let module M = OCamlPrinter(PP.OCamlr.Id)(PP.OCamlr.MakeMore) in ()
|
|
let enable_dump_ocaml_ast_printer () =
|
|
let module M = OCamlPrinter(PP.DumpOCamlAst.Id)(PP.DumpOCamlAst.Make)
|
|
in ()
|
|
let enable_dump_camlp4_ast_printer () =
|
|
let module M = Printer(PP.DumpCamlp4Ast.Id)(PP.DumpCamlp4Ast.Make)
|
|
in ()
|
|
let enable_null_printer () =
|
|
let module M = Printer(PP.Null.Id)(PP.Null.Make) in ()
|
|
end
|
|
|