3 (****************************************************************************)
7 (* INRIA Rocquencourt *)
9 (* Copyright 2006 Institut National de Recherche en Informatique et *)
10 (* en Automatique. All rights reserved. This file is distributed under *)
11 (* the terms of the GNU Library General Public License, with the special *)
12 (* exception on linking described in LICENSE at the top of the Objective *)
13 (* Caml source tree. *)
15 (****************************************************************************)
17 * - Daniel de Rauglaudre: initial version
18 * - Nicolas Pouillard: refactoring
23 val mode : section -> bool
25 val printf : section -> ('a, Format.formatter, unit) format -> 'a
29 (****************************************************************************)
33 (* INRIA Rocquencourt *)
35 (* Copyright 2006 Institut National de Recherche en Informatique et *)
36 (* en Automatique. All rights reserved. This file is distributed under *)
37 (* the terms of the GNU Library General Public License, with the special *)
38 (* exception on linking described in LICENSE at the top of the Objective *)
39 (* Caml source tree. *)
41 (****************************************************************************)
43 * - Daniel de Rauglaudre: initial version
44 * - Nicolas Pouillard: refactoring
49 module Debug = struct let mode _ = false
56 let f = Sys.getenv "CAMLP4_DEBUG_FILE"
58 open_out_gen [ Open_wronly; Open_creat; Open_append; Open_text ]
60 with | Not_found -> stderr
62 module StringSet = Set.Make(String)
66 let str = Sys.getenv "CAMLP4_DEBUG" in
69 let pos = String.index_from str i ':'
71 loop (StringSet.add (String.sub str i (pos - i)) acc) (pos + 1)
74 StringSet.add (String.sub str i ((String.length str) - i)) acc in
75 let sections = loop StringSet.empty 0
77 if StringSet.mem "*" sections
79 else (fun x -> StringSet.mem x sections)
80 with | Not_found -> (fun _ -> false)
83 let header = "camlp4-debug: " in
85 let rec self from accu =
87 let i = String.index_from s from '\n'
88 in self (i + 1) ((String.sub s from ((i - from) + 1)) :: accu)
91 (String.sub s from ((String.length s) - from)) :: accu
92 in String.concat header (List.rev (self 0 [])) in
93 let after_new_line str = header ^ (normal str) in
94 let f = ref after_new_line in
96 (output_string out_channel (!f str);
97 output_char out_channel chr;
98 f := if chr = '\n' then after_new_line else normal)
102 let p = pred len in output (String.sub buf pos p) buf.[pos + p])
103 (fun () -> flush out_channel)
105 let printf section fmt = fprintf formatter ("%s: " ^^ fmt) section
111 (****************************************************************************)
115 (* INRIA Rocquencourt *)
117 (* Copyright 2006 Institut National de Recherche en Informatique et *)
118 (* en Automatique. All rights reserved. This file is distributed under *)
119 (* the terms of the GNU Library General Public License, with the special *)
120 (* exception on linking described in LICENSE at the top of the Objective *)
121 (* Caml source tree. *)
123 (****************************************************************************)
125 * - Daniel de Rauglaudre: initial version
126 * - Nicolas Pouillard: refactoring
128 type spec_list = (string * Arg.spec * string) list
130 val init : spec_list -> unit
132 val add : string -> Arg.spec -> string -> unit
134 (** Add an option to the command line options. *)
135 val print_usage_list : spec_list -> unit
137 val ext_spec_list : unit -> spec_list
139 val parse : (string -> unit) -> string array -> string list
143 (****************************************************************************)
147 (* INRIA Rocquencourt *)
149 (* Copyright 2006 Institut National de Recherche en Informatique et *)
150 (* en Automatique. All rights reserved. This file is distributed under *)
151 (* the terms of the GNU Library General Public License, with the special *)
152 (* exception on linking described in LICENSE at the top of the Objective *)
153 (* Caml source tree. *)
155 (****************************************************************************)
157 * - Daniel de Rauglaudre: initial version
158 * - Nicolas Pouillard: refactoring
160 type spec_list = (string * Arg.spec * string) list
164 let rec action_arg s sl =
166 | Arg.Unit f -> if s = "" then (f (); Some sl) else None
172 (try (f (bool_of_string s); Some sl)
173 with | Invalid_argument "bool_of_string" -> None)
176 (try (f (bool_of_string s); Some sl)
177 with | Invalid_argument "bool_of_string" -> None)
178 | Arg.Set r -> if s = "" then (r := true; Some sl) else None
179 | Arg.Clear r -> if s = "" then (r := false; Some sl) else None
180 | Arg.Rest f -> (List.iter f (s :: sl); Some [])
183 then (match sl with | s :: sl -> (f s; Some sl) | [] -> None)
185 | Arg.Set_string r ->
187 then (match sl with | s :: sl -> (r := s; Some sl) | [] -> None)
188 else (r := s; Some sl)
194 (try (f (int_of_string s); Some sl)
195 with | Failure "int_of_string" -> None)
198 (try (f (int_of_string s); Some sl)
199 with | Failure "int_of_string" -> None)
205 (try (r := int_of_string s; Some sl)
206 with | Failure "int_of_string" -> None)
209 (try (r := int_of_string s; Some sl)
210 with | Failure "int_of_string" -> None)
215 | s :: sl -> (f (float_of_string s); Some sl)
217 else (f (float_of_string s); Some sl)
222 | s :: sl -> (r := float_of_string s; Some sl)
224 else (r := float_of_string s; Some sl)
226 let rec action_args s sl =
229 | spec :: spec_list ->
230 (match action_arg s sl spec with
231 | None -> action_args "" [] spec_list
232 | Some (s :: sl) -> action_args s sl spec_list
233 | Some sl -> action_args "" sl spec_list))
234 in action_args s sl specs
235 | Arg.Symbol (syms, f) ->
236 (match if s = "" then sl else s :: sl with
237 | s :: sl when List.mem s syms -> (f s; Some sl)
240 let common_start s1 s2 =
242 if (i == (String.length s1)) || (i == (String.length s2))
244 else if s1.[i] == s2.[i] then loop (i + 1) else i
247 let parse_arg fold s sl =
249 (fun (name, action, _) acu ->
250 let i = common_start s name
252 if i == (String.length name)
255 action_arg (String.sub s i ((String.length s) - i)) sl
257 with | Arg.Bad _ -> acu)
261 let rec parse_aux fold anon_fun =
265 if ((String.length s) > 1) && (s.[0] = '-')
267 (match parse_arg fold s sl with
268 | Some sl -> parse_aux fold anon_fun sl
269 | None -> s :: (parse_aux fold anon_fun sl))
270 else ((anon_fun s : unit); parse_aux fold anon_fun sl)
272 let align_doc key s =
275 if i = (String.length s)
280 else String.sub s i ((String.length s) - i)
283 if (String.length s) > 0
288 if i = (String.length s)
294 (let p = String.sub s 0 (i + 1) in
296 if i >= (String.length s)
301 else (p, (String.sub s i ((String.length s) - i)))
307 String.make (max 1 ((16 - (String.length key)) - (String.length p)))
315 (List.fold_left (fun x y -> x ^ ("|" ^ y)) ("{" ^ h) t) ^ "}"
317 let print_usage_list l =
319 (fun (key, spec, doc) ->
321 | Arg.Symbol (symbs, _) ->
322 let s = make_symlist symbs in
323 let synt = key ^ (" " ^ s)
324 in eprintf " %s %s\n" synt (align_doc synt doc)
325 | _ -> eprintf " %s %s\n" key (align_doc key doc))
328 let remaining_args argv =
330 if i == (Array.length argv) then l else loop (argv.(i) :: l) (i + 1)
331 in List.rev (loop [] (!Arg.current + 1))
333 let init_spec_list = ref []
335 let ext_spec_list = ref []
337 let init spec_list = init_spec_list := spec_list
339 let add name spec descr =
340 ext_spec_list := (name, spec, descr) :: !ext_spec_list
343 let spec_list = !init_spec_list @ !ext_spec_list in
344 let specs = Sort.list (fun (k1, _, _) (k2, _, _) -> k1 >= k2) spec_list
345 in List.fold_right f specs init
347 let parse anon_fun argv =
348 let remaining_args = remaining_args argv
349 in parse_aux fold anon_fun remaining_args
351 let ext_spec_list () = !ext_spec_list
358 (****************************************************************************)
362 (* INRIA Rocquencourt *)
364 (* Copyright 2006 Institut National de Recherche en Informatique et *)
365 (* en Automatique. All rights reserved. This file is distributed under *)
366 (* the terms of the GNU Library General Public License, with the special *)
367 (* exception on linking described in LICENSE at the top of the Objective *)
368 (* Caml source tree. *)
370 (****************************************************************************)
372 * - Daniel de Rauglaudre: initial version
373 * - Nicolas Pouillard: refactoring
375 (** Camlp4 signature repository *)
376 (** {6 Basic signatures} *)
377 (** Signature with just a type. *)
378 module type Type = sig type t
381 (** Signature for errors modules, an Error modules can be registred with
382 the {!ErrorHandler.Register} functor in order to be well printed. *)
389 val to_string : t -> string
391 val print : Format.formatter -> t -> unit
395 (** A signature for extensions identifiers. *)
398 (** The name of the extension, typically the module name. *)
401 (** The version of the extension, typically $ Id$ with a versionning system. *)
406 (** A signature for warnings abstract from locations. *)
407 module Warning (Loc : Type) =
411 type warning = Loc.t -> string -> unit
413 val default_warning : warning
415 val current_warning : warning ref
417 val print_warning : warning
423 (** {6 Advanced signatures} *)
424 (** A signature for locations. *)
429 (** Return a start location for the given file name.
430 This location starts at the begining of the file. *)
433 (** The [ghost] location can be used when no location
434 information is available. *)
437 (** {6 Conversion functions} *)
438 (** Return a location where both positions are set the given position. *)
439 val of_lexing_position : Lexing.position -> t
441 (** Return an OCaml location. *)
442 val to_ocaml_location : t -> Camlp4_import.Location.t
444 (** Return a location from an OCaml location. *)
445 val of_ocaml_location : Camlp4_import.Location.t -> t
447 (** Return a location from ocamllex buffer. *)
448 val of_lexbuf : Lexing.lexbuf -> t
450 (** Return a location from [(file_name, start_line, start_bol, start_off,
451 stop_line, stop_bol, stop_off, ghost)]. *)
453 (string * int * int * int * int * int * int * bool) -> t
455 (** Return [(file_name, start_line, start_bol, start_off,
456 stop_line, stop_bol, stop_off, ghost)]. *)
458 t -> (string * int * int * int * int * int * int * bool)
460 (** [merge loc1 loc2] Return a location that starts at [loc1] and end at [loc2]. *)
461 val merge : t -> t -> t
463 (** The stop pos becomes equal to the start pos. *)
466 (** [move selector n loc]
467 Return the location where positions are moved.
468 Affected positions are chosen with [selector].
469 Returned positions have their character offset plus [n]. *)
470 val move : [ | `start | `stop | `both ] -> int -> t -> t
472 (** [shift n loc] Return the location where the new start position is the old
473 stop position, and where the new stop position character offset is the
475 val shift : int -> t -> t
477 (** [move_line n loc] Return the location with the old line count plus [n].
478 The "begin of line" of both positions become the current offset. *)
479 val move_line : int -> t -> t
482 (** Return the file name *)
483 val file_name : t -> string
485 (** Return the line number of the begining of this location. *)
486 val start_line : t -> int
488 (** Return the line number of the ending of this location. *)
489 val stop_line : t -> int
491 (** Returns the number of characters from the begining of the file
492 to the begining of the line of location's begining. *)
493 val start_bol : t -> int
495 (** Returns the number of characters from the begining of the file
496 to the begining of the line of location's ending. *)
497 val stop_bol : t -> int
499 (** Returns the number of characters from the begining of the file
500 of the begining of this location. *)
501 val start_off : t -> int
503 (** Return the number of characters from the begining of the file
504 of the ending of this location. *)
505 val stop_off : t -> int
507 (** Return the start position as a Lexing.position. *)
508 val start_pos : t -> Lexing.position
510 (** Return the stop position as a Lexing.position. *)
511 val stop_pos : t -> Lexing.position
513 (** Generally, return true if this location does not come
514 from an input stream. *)
515 val is_ghost : t -> bool
517 (** Return the associated ghost location. *)
518 val ghostify : t -> t
520 (** Return the location with the give file name *)
521 val set_file_name : string -> t -> t
523 (** [strictly_before loc1 loc2] True if the stop position of [loc1] is
524 strictly_before the start position of [loc2]. *)
525 val strictly_before : t -> t -> bool
527 (** Return the location with an absolute file name. *)
528 val make_absolute : t -> t
530 (** Print the location into the formatter in a format suitable for error
532 val print : Format.formatter -> t -> unit
534 (** Print the location in a short format useful for debugging. *)
535 val dump : Format.formatter -> t -> unit
537 (** Same as {!print} but return a string instead of printting it. *)
538 val to_string : t -> string
540 (** [Exc_located loc e] is an encapsulation of the exception [e] with
541 the input location [loc]. To be used in quotation expanders
542 and in grammars to specify some input location for an error.
543 Do not raise this exception directly: rather use the following
544 function [Loc.raise]. *)
545 exception Exc_located of t * exn
547 (** [raise loc e], if [e] is already an [Exc_located] exception,
548 re-raise it, else raise the exception [Exc_located loc e]. *)
549 val raise : t -> exn -> 'a
551 (** The name of the location variable used in grammars and in
552 the predefined quotations for OCaml syntax trees. Default: [_loc]. *)
553 val name : string ref
557 (** Abstract syntax tree minimal signature.
558 Types of this signature are abstract.
559 See the {!Camlp4Ast} signature for a concrete definition. *)
562 (** {6 Syntactic categories as abstract types} *)
605 (** {6 Location accessors} *)
606 val loc_of_ctyp : ctyp -> loc
608 val loc_of_patt : patt -> loc
610 val loc_of_expr : expr -> loc
612 val loc_of_module_type : module_type -> loc
614 val loc_of_module_expr : module_expr -> loc
616 val loc_of_sig_item : sig_item -> loc
618 val loc_of_str_item : str_item -> loc
620 val loc_of_class_type : class_type -> loc
622 val loc_of_class_sig_item : class_sig_item -> loc
624 val loc_of_class_expr : class_expr -> loc
626 val loc_of_class_str_item : class_str_item -> loc
628 val loc_of_with_constr : with_constr -> loc
630 val loc_of_binding : binding -> loc
632 val loc_of_rec_binding : rec_binding -> loc
634 val loc_of_module_binding : module_binding -> loc
636 val loc_of_match_case : match_case -> loc
638 val loc_of_ident : ident -> loc
640 (** {6 Traversals} *)
641 (** This class is the base class for map traversal on the Ast.
642 To make a custom traversal class one just extend it like that:
644 This example swap pairs expression contents:
647 inherit Ast.map as super;
649 match super#expr e with
650 \[ <:expr\@_loc< ($e1$, $e2$) >> -> <:expr< ($e2$, $e1$) >>
653 value _loc = Loc.ghost;
654 value map = (new swap)#expr;
655 assert (map <:expr< fun x -> (x, 42) >> = <:expr< fun x -> (42, x) >>);]
659 method string : string -> string
662 'a 'b. ('self_type -> 'a -> 'b) -> 'a list -> 'b list
664 method meta_bool : meta_bool -> meta_bool
668 ('self_type -> 'a -> 'b) -> 'a meta_option -> 'b meta_option
671 'a 'b. ('self_type -> 'a -> 'b) -> 'a meta_list -> 'b meta_list
673 method loc : loc -> loc
675 method expr : expr -> expr
677 method patt : patt -> patt
679 method ctyp : ctyp -> ctyp
681 method str_item : str_item -> str_item
683 method sig_item : sig_item -> sig_item
685 method module_expr : module_expr -> module_expr
687 method module_type : module_type -> module_type
689 method class_expr : class_expr -> class_expr
691 method class_type : class_type -> class_type
693 method class_sig_item : class_sig_item -> class_sig_item
695 method class_str_item : class_str_item -> class_str_item
697 method with_constr : with_constr -> with_constr
699 method binding : binding -> binding
701 method rec_binding : rec_binding -> rec_binding
703 method module_binding : module_binding -> module_binding
705 method match_case : match_case -> match_case
707 method ident : ident -> ident
709 method unknown : 'a. 'a -> 'a
713 (** Fold style traversal *)
716 method string : string -> 'self_type
719 'a. ('self_type -> 'a -> 'self_type) -> 'a list -> 'self_type
721 method meta_bool : meta_bool -> 'self_type
725 ('self_type -> 'a -> 'self_type) ->
726 'a meta_option -> 'self_type
730 ('self_type -> 'a -> 'self_type) ->
731 'a meta_list -> 'self_type
733 method loc : loc -> 'self_type
735 method expr : expr -> 'self_type
737 method patt : patt -> 'self_type
739 method ctyp : ctyp -> 'self_type
741 method str_item : str_item -> 'self_type
743 method sig_item : sig_item -> 'self_type
745 method module_expr : module_expr -> 'self_type
747 method module_type : module_type -> 'self_type
749 method class_expr : class_expr -> 'self_type
751 method class_type : class_type -> 'self_type
753 method class_sig_item : class_sig_item -> 'self_type
755 method class_str_item : class_str_item -> 'self_type
757 method with_constr : with_constr -> 'self_type
759 method binding : binding -> 'self_type
761 method rec_binding : rec_binding -> 'self_type
763 method module_binding : module_binding -> 'self_type
765 method match_case : match_case -> 'self_type
767 method ident : ident -> 'self_type
769 method unknown : 'a. 'a -> 'self_type
775 (** Signature for OCaml syntax trees. *)
777 This signature is an extension of {!Ast}
779 - Types for all kinds of structure.
780 - Map: A base class for map traversals.
781 - Map classes and functions for common kinds.
784 ctyp :: Representaion of types
785 patt :: The type of patterns
786 expr :: The type of expressions
787 match_case :: The type of cases for match/function/try constructions
788 ident :: The type of identifiers (including path like Foo(X).Bar.y)
789 binding :: The type of let bindings
790 rec_binding :: The type of record definitions
793 module_type :: The type of module types
794 sig_item :: The type of signature items
795 str_item :: The type of structure items
796 module_expr :: The type of module expressions
797 module_binding :: The type of recursive module definitions
798 with_constr :: The type of `with' constraints
801 class_type :: The type of class types
802 class_sig_item :: The type of class signature items
803 class_expr :: The type of class expressions
804 class_str_item :: The type of class structure items
806 module type Camlp4Ast =
808 (** The inner module for locations *)
815 | BTrue | BFalse | BAnt of string
817 | ONone | OSome of 'a | OAnt of string
819 | LNil | LCons of 'a * 'a meta_list | LAnt of string
821 | IdAcc of loc * ident * ident
823 IdApp of loc * ident * ident
825 IdLid of loc * string
827 IdUid of loc * string
829 IdAnt of loc * string
833 | TyAli of loc * ctyp * ctyp
838 TyApp of loc * ctyp * ctyp
841 TyArr of loc * ctyp * ctyp
847 TyLab of loc * string * ctyp
852 TyMan of loc * ctyp * ctyp
854 (* type t = [ A | B ] == Foo.t *)
855 (* type t 'a 'b 'c = t constraint t = t constraint t = t *)
856 TyDcl of loc * string * ctyp list * ctyp * (ctyp * ctyp) list
857 | (* < (t)? (..)? > *)
858 (* < move : int -> 'a .. > as 'a *)
859 TyObj of loc * ctyp * meta_bool
860 | TyOlb of loc * string * ctyp
862 TyPol of loc * ctyp * ctyp
864 (* ! 'a . list 'a -> 'a *)
865 TyQuo of loc * string
867 TyQuP of loc * string
869 TyQuM of loc * string
871 TyVrn of loc * string
875 (* { foo : int ; bar : mutable string } *)
876 TyCol of loc * ctyp * ctyp
878 TySem of loc * ctyp * ctyp
880 TyCom of loc * ctyp * ctyp
884 (* [ A of int and string | B ] *)
885 TyOf of loc * ctyp * ctyp
888 TyAnd of loc * ctyp * ctyp
890 TyOr of loc * ctyp * ctyp
899 TySta of loc * ctyp * ctyp
901 TyVrnEq of loc * ctyp
903 TyVrnSup of loc * ctyp
905 TyVrnInf of loc * ctyp
907 TyVrnInfSup of loc * ctyp * ctyp
909 TyAmp of loc * ctyp * ctyp
911 TyOfAmp of loc * ctyp * ctyp
913 TyAnt of loc * string
917 | PaId of loc * ident
919 PaAli of loc * patt * patt
921 (* (Node x y as n) *)
922 PaAnt of loc * string
926 PaApp of loc * patt * patt
931 PaCom of loc * patt * patt
933 PaSem of loc * patt * patt
935 PaChr of loc * string
938 PaInt of loc * string
939 | PaInt32 of loc * string
940 | PaInt64 of loc * string
941 | PaNativeInt of loc * string
942 | PaFlo of loc * string
943 | PaLab of loc * string * patt
946 PaOlb of loc * string * patt
947 | (* ?s:(p = e) or ?(p = e) *)
948 PaOlbi of loc * string * patt * expr
949 | PaOrp of loc * patt * patt
951 PaRng of loc * patt * patt
955 PaEq of loc * ident * patt
957 PaStr of loc * string
961 PaTyc of loc * patt * ctyp
965 PaVrn of loc * string
971 | ExId of loc * ident
973 ExAcc of loc * expr * expr
975 ExAnt of loc * string
977 ExApp of loc * expr * expr
979 ExAre of loc * expr * expr
983 ExSem of loc * expr * expr
989 ExAss of loc * expr * expr
991 ExChr of loc * string
993 ExCoe of loc * expr * ctyp * ctyp
994 | (* (e : t) or (e : t :> t) *)
995 ExFlo of loc * string
997 (* for s = e to/downto e do { e } *)
998 ExFor of loc * string * expr * expr * meta_bool * expr
999 | ExFun of loc * match_case
1001 ExIfe of loc * expr * expr * expr
1002 | (* if e then e else e *)
1003 ExInt of loc * string
1005 ExInt32 of loc * string
1006 | ExInt64 of loc * string
1007 | ExNativeInt of loc * string
1008 | ExLab of loc * string * expr
1012 (* let b in e or let rec b in e *)
1013 ExLet of loc * meta_bool * binding * expr
1014 | (* let module s = me in e *)
1015 ExLmd of loc * string * module_expr * expr
1016 | (* match e with [ mc ] *)
1017 ExMat of loc * expr * match_case
1019 ExNew of loc * ident
1020 | (* object ((p))? (cst)? end *)
1021 ExObj of loc * patt * class_str_item
1023 ExOlb of loc * string * expr
1025 ExOvr of loc * rec_binding
1026 | (* { rb } or { (e) with rb } *)
1027 ExRec of loc * rec_binding * expr
1031 ExSnd of loc * expr * string
1033 ExSte of loc * expr * expr
1036 ExStr of loc * string
1037 | (* try e with [ mc ] *)
1038 ExTry of loc * expr * match_case
1042 ExCom of loc * expr * expr
1044 ExTyc of loc * expr * ctyp
1046 ExVrn of loc * string
1047 | (* while e do { e } *)
1048 ExWhi of loc * expr * expr
1054 | (* functor (s : mt) -> mt *)
1055 MtFun of loc * string * module_type * module_type
1057 MtQuo of loc * string
1059 MtSig of loc * sig_item
1061 MtWit of loc * module_type * with_constr
1062 | MtAnt of loc * string
1067 SgCls of loc * class_type
1068 | (* class type cict *)
1069 SgClt of loc * class_type
1071 SgSem of loc * sig_item * sig_item
1072 | (* # s or # s e *)
1073 SgDir of loc * string * expr
1076 | (* external s : t = s ... s *)
1077 SgExt of loc * string * ctyp * string meta_list
1079 SgInc of loc * module_type
1080 | (* module s : mt *)
1081 SgMod of loc * string * module_type
1082 | (* module rec mb *)
1083 SgRecMod of loc * module_binding
1084 | (* module type s = mt *)
1085 SgMty of loc * string * module_type
1087 SgOpn of loc * ident
1091 SgVal of loc * string * ctyp
1092 | SgAnt of loc * string
1097 WcTyp of loc * ctyp * ctyp
1098 | (* module i = i *)
1099 WcMod of loc * ident * ident
1101 WcAnd of loc * with_constr * with_constr
1102 | WcAnt of loc * string
1107 (* let a = 42 and c = 43 *)
1108 BiAnd of loc * binding * binding
1110 (* let patt = expr *)
1111 BiEq of loc * patt * expr
1112 | BiAnt of loc * string
1117 RbSem of loc * rec_binding * rec_binding
1119 RbEq of loc * ident * expr
1120 | RbAnt of loc * string
1125 (* module rec (s : mt) = me and (s : mt) = me *)
1126 MbAnd of loc * module_binding * module_binding
1128 MbColEq of loc * string * module_type * module_expr
1130 MbCol of loc * string * module_type
1131 | MbAnt of loc * string
1136 McOr of loc * match_case * match_case
1137 | (* p (when e)? -> e *)
1138 McArr of loc * patt * expr * expr
1139 | McAnt of loc * string
1146 MeApp of loc * module_expr * module_expr
1147 | (* functor (s : mt) -> me *)
1148 MeFun of loc * string * module_type * module_expr
1149 | (* struct st end *)
1150 MeStr of loc * str_item
1152 MeTyc of loc * module_expr * module_type
1153 | MeAnt of loc * string
1158 StCls of loc * class_expr
1159 | (* class type cict *)
1160 StClt of loc * class_type
1162 StSem of loc * str_item * str_item
1163 | (* # s or # s e *)
1164 StDir of loc * string * expr
1165 | (* exception t or exception t = i *)
1166 StExc of loc * ctyp * (*FIXME*) ident meta_option
1169 | (* external s : t = s ... s *)
1170 StExt of loc * string * ctyp * string meta_list
1172 StInc of loc * module_expr
1173 | (* module s = me *)
1174 StMod of loc * string * module_expr
1175 | (* module rec mb *)
1176 StRecMod of loc * module_binding
1177 | (* module type s = mt *)
1178 StMty of loc * string * module_type
1180 StOpn of loc * ident
1183 | (* value (rec)? bi *)
1184 StVal of loc * meta_bool * binding
1185 | StAnt of loc * string
1189 | (* (virtual)? i ([ t ])? *)
1190 CtCon of loc * meta_bool * ident * ctyp
1192 CtFun of loc * ctyp * class_type
1193 | (* object ((t))? (csg)? end *)
1194 CtSig of loc * ctyp * class_sig_item
1196 CtAnd of loc * class_type * class_type
1198 CtCol of loc * class_type * class_type
1200 CtEq of loc * class_type * class_type
1202 CtAnt of loc * string
1203 and class_sig_item =
1206 CgCtr of loc * ctyp * ctyp
1208 CgSem of loc * class_sig_item * class_sig_item
1210 CgInh of loc * class_type
1211 | (* method s : t or method private s : t *)
1212 CgMth of loc * string * meta_bool * ctyp
1213 | (* value (virtual)? (mutable)? s : t *)
1214 CgVal of loc * string * meta_bool * meta_bool * ctyp
1215 | (* method virtual (mutable)? s : t *)
1216 CgVir of loc * string * meta_bool * ctyp
1217 | CgAnt of loc * string
1222 CeApp of loc * class_expr * expr
1223 | (* (virtual)? i ([ t ])? *)
1224 CeCon of loc * meta_bool * ident * ctyp
1226 CeFun of loc * patt * class_expr
1227 | (* let (rec)? bi in ce *)
1228 CeLet of loc * meta_bool * binding * class_expr
1229 | (* object ((p))? (cst)? end *)
1230 CeStr of loc * patt * class_str_item
1232 CeTyc of loc * class_expr * class_type
1234 CeAnd of loc * class_expr * class_expr
1236 CeEq of loc * class_expr * class_expr
1238 CeAnt of loc * string
1239 and class_str_item =
1242 CrSem of loc * class_str_item * class_str_item
1244 CrCtr of loc * ctyp * ctyp
1245 | (* inherit ce or inherit ce as s *)
1246 CrInh of loc * class_expr * string
1247 | (* initializer e *)
1249 | (* method (private)? s : t = e or method (private)? s = e *)
1250 CrMth of loc * string * meta_bool * expr * ctyp
1251 | (* value (mutable)? s = e *)
1252 CrVal of loc * string * meta_bool * expr
1253 | (* method virtual (private)? s : t *)
1254 CrVir of loc * string * meta_bool * ctyp
1255 | (* value virtual (private)? s : t *)
1256 CrVvr of loc * string * meta_bool * ctyp
1257 | CrAnt of loc * string
1259 val loc_of_ctyp : ctyp -> loc
1261 val loc_of_patt : patt -> loc
1263 val loc_of_expr : expr -> loc
1265 val loc_of_module_type : module_type -> loc
1267 val loc_of_module_expr : module_expr -> loc
1269 val loc_of_sig_item : sig_item -> loc
1271 val loc_of_str_item : str_item -> loc
1273 val loc_of_class_type : class_type -> loc
1275 val loc_of_class_sig_item : class_sig_item -> loc
1277 val loc_of_class_expr : class_expr -> loc
1279 val loc_of_class_str_item : class_str_item -> loc
1281 val loc_of_with_constr : with_constr -> loc
1283 val loc_of_binding : binding -> loc
1285 val loc_of_rec_binding : rec_binding -> loc
1287 val loc_of_module_binding : module_binding -> loc
1289 val loc_of_match_case : match_case -> loc
1291 val loc_of_ident : ident -> loc
1295 module type META_LOC =
1297 val meta_loc_patt : loc -> loc -> patt
1299 val meta_loc_expr : loc -> loc -> expr
1305 val meta_loc_patt : loc -> loc -> patt
1307 val meta_loc_expr : loc -> loc -> expr
1311 module MetaGhostLoc :
1313 val meta_loc_patt : loc -> 'a -> patt
1315 val meta_loc_expr : loc -> 'a -> expr
1321 val meta_loc_patt : loc -> 'a -> patt
1323 val meta_loc_expr : loc -> 'a -> expr
1327 module Make (MetaLoc : META_LOC) :
1331 val meta_string : loc -> string -> expr
1333 val meta_int : loc -> string -> expr
1335 val meta_float : loc -> string -> expr
1337 val meta_char : loc -> string -> expr
1339 val meta_bool : loc -> bool -> expr
1342 (loc -> 'a -> expr) -> loc -> 'a list -> expr
1344 val meta_binding : loc -> binding -> expr
1346 val meta_rec_binding : loc -> rec_binding -> expr
1348 val meta_class_expr : loc -> class_expr -> expr
1350 val meta_class_sig_item : loc -> class_sig_item -> expr
1352 val meta_class_str_item : loc -> class_str_item -> expr
1354 val meta_class_type : loc -> class_type -> expr
1356 val meta_ctyp : loc -> ctyp -> expr
1358 val meta_expr : loc -> expr -> expr
1360 val meta_ident : loc -> ident -> expr
1362 val meta_match_case : loc -> match_case -> expr
1364 val meta_module_binding : loc -> module_binding -> expr
1366 val meta_module_expr : loc -> module_expr -> expr
1368 val meta_module_type : loc -> module_type -> expr
1370 val meta_patt : loc -> patt -> expr
1372 val meta_sig_item : loc -> sig_item -> expr
1374 val meta_str_item : loc -> str_item -> expr
1376 val meta_with_constr : loc -> with_constr -> expr
1382 val meta_string : loc -> string -> patt
1384 val meta_int : loc -> string -> patt
1386 val meta_float : loc -> string -> patt
1388 val meta_char : loc -> string -> patt
1390 val meta_bool : loc -> bool -> patt
1393 (loc -> 'a -> patt) -> loc -> 'a list -> patt
1395 val meta_binding : loc -> binding -> patt
1397 val meta_rec_binding : loc -> rec_binding -> patt
1399 val meta_class_expr : loc -> class_expr -> patt
1401 val meta_class_sig_item : loc -> class_sig_item -> patt
1403 val meta_class_str_item : loc -> class_str_item -> patt
1405 val meta_class_type : loc -> class_type -> patt
1407 val meta_ctyp : loc -> ctyp -> patt
1409 val meta_expr : loc -> expr -> patt
1411 val meta_ident : loc -> ident -> patt
1413 val meta_match_case : loc -> match_case -> patt
1415 val meta_module_binding : loc -> module_binding -> patt
1417 val meta_module_expr : loc -> module_expr -> patt
1419 val meta_module_type : loc -> module_type -> patt
1421 val meta_patt : loc -> patt -> patt
1423 val meta_sig_item : loc -> sig_item -> patt
1425 val meta_str_item : loc -> str_item -> patt
1427 val meta_with_constr : loc -> with_constr -> patt
1437 method string : string -> string
1440 'a 'b. ('self_type -> 'a -> 'b) -> 'a list -> 'b list
1442 method meta_bool : meta_bool -> meta_bool
1444 method meta_option :
1446 ('self_type -> 'a -> 'b) -> 'a meta_option -> 'b meta_option
1449 'a 'b. ('self_type -> 'a -> 'b) -> 'a meta_list -> 'b meta_list
1451 method loc : loc -> loc
1453 method expr : expr -> expr
1455 method patt : patt -> patt
1457 method ctyp : ctyp -> ctyp
1459 method str_item : str_item -> str_item
1461 method sig_item : sig_item -> sig_item
1463 method module_expr : module_expr -> module_expr
1465 method module_type : module_type -> module_type
1467 method class_expr : class_expr -> class_expr
1469 method class_type : class_type -> class_type
1471 method class_sig_item : class_sig_item -> class_sig_item
1473 method class_str_item : class_str_item -> class_str_item
1475 method with_constr : with_constr -> with_constr
1477 method binding : binding -> binding
1479 method rec_binding : rec_binding -> rec_binding
1481 method module_binding : module_binding -> module_binding
1483 method match_case : match_case -> match_case
1485 method ident : ident -> ident
1487 method unknown : 'a. 'a -> 'a
1493 method string : string -> 'self_type
1496 'a. ('self_type -> 'a -> 'self_type) -> 'a list -> 'self_type
1498 method meta_bool : meta_bool -> 'self_type
1500 method meta_option :
1502 ('self_type -> 'a -> 'self_type) ->
1503 'a meta_option -> 'self_type
1507 ('self_type -> 'a -> 'self_type) ->
1508 'a meta_list -> 'self_type
1510 method loc : loc -> 'self_type
1512 method expr : expr -> 'self_type
1514 method patt : patt -> 'self_type
1516 method ctyp : ctyp -> 'self_type
1518 method str_item : str_item -> 'self_type
1520 method sig_item : sig_item -> 'self_type
1522 method module_expr : module_expr -> 'self_type
1524 method module_type : module_type -> 'self_type
1526 method class_expr : class_expr -> 'self_type
1528 method class_type : class_type -> 'self_type
1530 method class_sig_item : class_sig_item -> 'self_type
1532 method class_str_item : class_str_item -> 'self_type
1534 method with_constr : with_constr -> 'self_type
1536 method binding : binding -> 'self_type
1538 method rec_binding : rec_binding -> 'self_type
1540 method module_binding : module_binding -> 'self_type
1542 method match_case : match_case -> 'self_type
1544 method ident : ident -> 'self_type
1546 method unknown : 'a. 'a -> 'self_type
1550 val map_expr : (expr -> expr) -> map
1552 val map_patt : (patt -> patt) -> map
1554 val map_ctyp : (ctyp -> ctyp) -> map
1556 val map_str_item : (str_item -> str_item) -> map
1558 val map_sig_item : (sig_item -> sig_item) -> map
1560 val map_loc : (loc -> loc) -> map
1562 val ident_of_expr : expr -> ident
1564 val ident_of_patt : patt -> ident
1566 val ident_of_ctyp : ctyp -> ident
1568 val biAnd_of_list : binding list -> binding
1570 val rbSem_of_list : rec_binding list -> rec_binding
1572 val paSem_of_list : patt list -> patt
1574 val paCom_of_list : patt list -> patt
1576 val tyOr_of_list : ctyp list -> ctyp
1578 val tyAnd_of_list : ctyp list -> ctyp
1580 val tyAmp_of_list : ctyp list -> ctyp
1582 val tySem_of_list : ctyp list -> ctyp
1584 val tyCom_of_list : ctyp list -> ctyp
1586 val tySta_of_list : ctyp list -> ctyp
1588 val stSem_of_list : str_item list -> str_item
1590 val sgSem_of_list : sig_item list -> sig_item
1592 val crSem_of_list : class_str_item list -> class_str_item
1594 val cgSem_of_list : class_sig_item list -> class_sig_item
1596 val ctAnd_of_list : class_type list -> class_type
1598 val ceAnd_of_list : class_expr list -> class_expr
1600 val wcAnd_of_list : with_constr list -> with_constr
1602 val meApp_of_list : module_expr list -> module_expr
1604 val mbAnd_of_list : module_binding list -> module_binding
1606 val mcOr_of_list : match_case list -> match_case
1608 val idAcc_of_list : ident list -> ident
1610 val idApp_of_list : ident list -> ident
1612 val exSem_of_list : expr list -> expr
1614 val exCom_of_list : expr list -> expr
1616 val list_of_ctyp : ctyp -> ctyp list -> ctyp list
1618 val list_of_binding : binding -> binding list -> binding list
1620 val list_of_rec_binding :
1621 rec_binding -> rec_binding list -> rec_binding list
1623 val list_of_with_constr :
1624 with_constr -> with_constr list -> with_constr list
1626 val list_of_patt : patt -> patt list -> patt list
1628 val list_of_expr : expr -> expr list -> expr list
1630 val list_of_str_item : str_item -> str_item list -> str_item list
1632 val list_of_sig_item : sig_item -> sig_item list -> sig_item list
1634 val list_of_class_sig_item :
1635 class_sig_item -> class_sig_item list -> class_sig_item list
1637 val list_of_class_str_item :
1638 class_str_item -> class_str_item list -> class_str_item list
1640 val list_of_class_type :
1641 class_type -> class_type list -> class_type list
1643 val list_of_class_expr :
1644 class_expr -> class_expr list -> class_expr list
1646 val list_of_module_expr :
1647 module_expr -> module_expr list -> module_expr list
1649 val list_of_module_binding :
1650 module_binding -> module_binding list -> module_binding list
1652 val list_of_match_case :
1653 match_case -> match_case list -> match_case list
1655 val list_of_ident : ident -> ident list -> ident list
1657 val safe_string_escaped : string -> string
1659 val is_irrefut_patt : patt -> bool
1661 val is_constructor : ident -> bool
1663 val is_patt_constructor : patt -> bool
1665 val is_expr_constructor : expr -> bool
1667 val ty_of_stl : (Loc.t * string * (ctyp list)) -> ctyp
1669 val ty_of_sbt : (Loc.t * string * bool * ctyp) -> ctyp
1671 val bi_of_pe : (patt * expr) -> binding
1673 val pel_of_binding : binding -> (patt * expr) list
1675 val binding_of_pel : (patt * expr) list -> binding
1677 val sum_type_of_list : (Loc.t * string * (ctyp list)) list -> ctyp
1679 val record_type_of_list : (Loc.t * string * bool * ctyp) list -> ctyp
1683 module Camlp4AstToAst (M : Camlp4Ast) : Ast with type loc = M.loc
1684 and type meta_bool = M.meta_bool
1685 and type 'a meta_option = 'a M.meta_option
1686 and type 'a meta_list = 'a M.meta_list and type ctyp = M.ctyp
1687 and type patt = M.patt and type expr = M.expr
1688 and type module_type = M.module_type and type sig_item = M.sig_item
1689 and type with_constr = M.with_constr
1690 and type module_expr = M.module_expr and type str_item = M.str_item
1691 and type class_type = M.class_type
1692 and type class_sig_item = M.class_sig_item
1693 and type class_expr = M.class_expr
1694 and type class_str_item = M.class_str_item and type binding = M.binding
1695 and type rec_binding = M.rec_binding
1696 and type module_binding = M.module_binding
1697 and type match_case = M.match_case and type ident = M.ident = M
1699 module MakeCamlp4Ast (Loc : Type) =
1705 | BTrue | BFalse | BAnt of string
1706 and 'a meta_option =
1707 | ONone | OSome of 'a | OAnt of string
1709 | LNil | LCons of 'a * 'a meta_list | LAnt of string
1711 | IdAcc of loc * ident * ident
1712 | IdApp of loc * ident * ident
1713 | IdLid of loc * string
1714 | IdUid of loc * string
1715 | IdAnt of loc * string
1718 | TyAli of loc * ctyp * ctyp
1720 | TyApp of loc * ctyp * ctyp
1721 | TyArr of loc * ctyp * ctyp
1722 | TyCls of loc * ident
1723 | TyLab of loc * string * ctyp
1724 | TyId of loc * ident
1725 | TyMan of loc * ctyp * ctyp
1726 | TyDcl of loc * string * ctyp list * ctyp * (ctyp * ctyp) list
1727 | TyObj of loc * ctyp * meta_bool
1728 | TyOlb of loc * string * ctyp
1729 | TyPol of loc * ctyp * ctyp
1730 | TyQuo of loc * string
1731 | TyQuP of loc * string
1732 | TyQuM of loc * string
1733 | TyVrn of loc * string
1734 | TyRec of loc * ctyp
1735 | TyCol of loc * ctyp * ctyp
1736 | TySem of loc * ctyp * ctyp
1737 | TyCom of loc * ctyp * ctyp
1738 | TySum of loc * ctyp
1739 | TyOf of loc * ctyp * ctyp
1740 | TyAnd of loc * ctyp * ctyp
1741 | TyOr of loc * ctyp * ctyp
1742 | TyPrv of loc * ctyp
1743 | TyMut of loc * ctyp
1744 | TyTup of loc * ctyp
1745 | TySta of loc * ctyp * ctyp
1746 | TyVrnEq of loc * ctyp
1747 | TyVrnSup of loc * ctyp
1748 | TyVrnInf of loc * ctyp
1749 | TyVrnInfSup of loc * ctyp * ctyp
1750 | TyAmp of loc * ctyp * ctyp
1751 | TyOfAmp of loc * ctyp * ctyp
1752 | TyAnt of loc * string
1755 | PaId of loc * ident
1756 | PaAli of loc * patt * patt
1757 | PaAnt of loc * string
1759 | PaApp of loc * patt * patt
1760 | PaArr of loc * patt
1761 | PaCom of loc * patt * patt
1762 | PaSem of loc * patt * patt
1763 | PaChr of loc * string
1764 | PaInt of loc * string
1765 | PaInt32 of loc * string
1766 | PaInt64 of loc * string
1767 | PaNativeInt of loc * string
1768 | PaFlo of loc * string
1769 | PaLab of loc * string * patt
1770 | PaOlb of loc * string * patt
1771 | PaOlbi of loc * string * patt * expr
1772 | PaOrp of loc * patt * patt
1773 | PaRng of loc * patt * patt
1774 | PaRec of loc * patt
1775 | PaEq of loc * ident * patt
1776 | PaStr of loc * string
1777 | PaTup of loc * patt
1778 | PaTyc of loc * patt * ctyp
1779 | PaTyp of loc * ident
1780 | PaVrn of loc * string
1781 | PaLaz of loc * patt
1784 | ExId of loc * ident
1785 | ExAcc of loc * expr * expr
1786 | ExAnt of loc * string
1787 | ExApp of loc * expr * expr
1788 | ExAre of loc * expr * expr
1789 | ExArr of loc * expr
1790 | ExSem of loc * expr * expr
1792 | ExAsr of loc * expr
1793 | ExAss of loc * expr * expr
1794 | ExChr of loc * string
1795 | ExCoe of loc * expr * ctyp * ctyp
1796 | ExFlo of loc * string
1797 | ExFor of loc * string * expr * expr * meta_bool * expr
1798 | ExFun of loc * match_case
1799 | ExIfe of loc * expr * expr * expr
1800 | ExInt of loc * string
1801 | ExInt32 of loc * string
1802 | ExInt64 of loc * string
1803 | ExNativeInt of loc * string
1804 | ExLab of loc * string * expr
1805 | ExLaz of loc * expr
1806 | ExLet of loc * meta_bool * binding * expr
1807 | ExLmd of loc * string * module_expr * expr
1808 | ExMat of loc * expr * match_case
1809 | ExNew of loc * ident
1810 | ExObj of loc * patt * class_str_item
1811 | ExOlb of loc * string * expr
1812 | ExOvr of loc * rec_binding
1813 | ExRec of loc * rec_binding * expr
1814 | ExSeq of loc * expr
1815 | ExSnd of loc * expr * string
1816 | ExSte of loc * expr * expr
1817 | ExStr of loc * string
1818 | ExTry of loc * expr * match_case
1819 | ExTup of loc * expr
1820 | ExCom of loc * expr * expr
1821 | ExTyc of loc * expr * ctyp
1822 | ExVrn of loc * string
1823 | ExWhi of loc * expr * expr
1826 | MtId of loc * ident
1827 | MtFun of loc * string * module_type * module_type
1828 | MtQuo of loc * string
1829 | MtSig of loc * sig_item
1830 | MtWit of loc * module_type * with_constr
1831 | MtAnt of loc * string
1834 | SgCls of loc * class_type
1835 | SgClt of loc * class_type
1836 | SgSem of loc * sig_item * sig_item
1837 | SgDir of loc * string * expr
1838 | SgExc of loc * ctyp
1839 | SgExt of loc * string * ctyp * string meta_list
1840 | SgInc of loc * module_type
1841 | SgMod of loc * string * module_type
1842 | SgRecMod of loc * module_binding
1843 | SgMty of loc * string * module_type
1844 | SgOpn of loc * ident
1845 | SgTyp of loc * ctyp
1846 | SgVal of loc * string * ctyp
1847 | SgAnt of loc * string
1850 | WcTyp of loc * ctyp * ctyp
1851 | WcMod of loc * ident * ident
1852 | WcAnd of loc * with_constr * with_constr
1853 | WcAnt of loc * string
1856 | BiAnd of loc * binding * binding
1857 | BiEq of loc * patt * expr
1858 | BiAnt of loc * string
1861 | RbSem of loc * rec_binding * rec_binding
1862 | RbEq of loc * ident * expr
1863 | RbAnt of loc * string
1864 and module_binding =
1866 | MbAnd of loc * module_binding * module_binding
1867 | MbColEq of loc * string * module_type * module_expr
1868 | MbCol of loc * string * module_type
1869 | MbAnt of loc * string
1872 | McOr of loc * match_case * match_case
1873 | McArr of loc * patt * expr * expr
1874 | McAnt of loc * string
1877 | MeId of loc * ident
1878 | MeApp of loc * module_expr * module_expr
1879 | MeFun of loc * string * module_type * module_expr
1880 | MeStr of loc * str_item
1881 | MeTyc of loc * module_expr * module_type
1882 | MeAnt of loc * string
1885 | StCls of loc * class_expr
1886 | StClt of loc * class_type
1887 | StSem of loc * str_item * str_item
1888 | StDir of loc * string * expr
1889 | StExc of loc * ctyp * ident meta_option
1890 | StExp of loc * expr
1891 | StExt of loc * string * ctyp * string meta_list
1892 | StInc of loc * module_expr
1893 | StMod of loc * string * module_expr
1894 | StRecMod of loc * module_binding
1895 | StMty of loc * string * module_type
1896 | StOpn of loc * ident
1897 | StTyp of loc * ctyp
1898 | StVal of loc * meta_bool * binding
1899 | StAnt of loc * string
1902 | CtCon of loc * meta_bool * ident * ctyp
1903 | CtFun of loc * ctyp * class_type
1904 | CtSig of loc * ctyp * class_sig_item
1905 | CtAnd of loc * class_type * class_type
1906 | CtCol of loc * class_type * class_type
1907 | CtEq of loc * class_type * class_type
1908 | CtAnt of loc * string
1909 and class_sig_item =
1911 | CgCtr of loc * ctyp * ctyp
1912 | CgSem of loc * class_sig_item * class_sig_item
1913 | CgInh of loc * class_type
1914 | CgMth of loc * string * meta_bool * ctyp
1915 | CgVal of loc * string * meta_bool * meta_bool * ctyp
1916 | CgVir of loc * string * meta_bool * ctyp
1917 | CgAnt of loc * string
1920 | CeApp of loc * class_expr * expr
1921 | CeCon of loc * meta_bool * ident * ctyp
1922 | CeFun of loc * patt * class_expr
1923 | CeLet of loc * meta_bool * binding * class_expr
1924 | CeStr of loc * patt * class_str_item
1925 | CeTyc of loc * class_expr * class_type
1926 | CeAnd of loc * class_expr * class_expr
1927 | CeEq of loc * class_expr * class_expr
1928 | CeAnt of loc * string
1929 and class_str_item =
1931 | CrSem of loc * class_str_item * class_str_item
1932 | CrCtr of loc * ctyp * ctyp
1933 | CrInh of loc * class_expr * string
1934 | CrIni of loc * expr
1935 | CrMth of loc * string * meta_bool * expr * ctyp
1936 | CrVal of loc * string * meta_bool * expr
1937 | CrVir of loc * string * meta_bool * ctyp
1938 | CrVvr of loc * string * meta_bool * ctyp
1939 | CrAnt of loc * string
1943 type ('a, 'loc) stream_filter =
1944 ('a * 'loc) Stream.t -> ('a * 'loc) Stream.t
1946 module type AstFilters =
1948 module Ast : Camlp4Ast
1950 type 'a filter = 'a -> 'a
1952 val register_sig_item_filter : Ast.sig_item filter -> unit
1954 val register_str_item_filter : Ast.str_item filter -> unit
1956 val register_topphrase_filter : Ast.str_item filter -> unit
1958 val fold_interf_filters :
1959 ('a -> Ast.sig_item filter -> 'a) -> 'a -> 'a
1961 val fold_implem_filters :
1962 ('a -> Ast.str_item filter -> 'a) -> 'a -> 'a
1964 val fold_topphrase_filters :
1965 ('a -> Ast.str_item filter -> 'a) -> 'a -> 'a
1969 module type DynAst =
1975 val ctyp_tag : Ast.ctyp tag
1977 val patt_tag : Ast.patt tag
1979 val expr_tag : Ast.expr tag
1981 val module_type_tag : Ast.module_type tag
1983 val sig_item_tag : Ast.sig_item tag
1985 val with_constr_tag : Ast.with_constr tag
1987 val module_expr_tag : Ast.module_expr tag
1989 val str_item_tag : Ast.str_item tag
1991 val class_type_tag : Ast.class_type tag
1993 val class_sig_item_tag : Ast.class_sig_item tag
1995 val class_expr_tag : Ast.class_expr tag
1997 val class_str_item_tag : Ast.class_str_item tag
1999 val match_case_tag : Ast.match_case tag
2001 val ident_tag : Ast.ident tag
2003 val binding_tag : Ast.binding tag
2005 val rec_binding_tag : Ast.rec_binding tag
2007 val module_binding_tag : Ast.module_binding tag
2009 val string_of_tag : 'a tag -> string
2011 module Pack (X : sig type 'a t
2016 val pack : 'a tag -> 'a X.t -> pack
2018 val unpack : 'a tag -> pack -> 'a X.t
2020 val print_tag : Format.formatter -> pack -> unit
2027 { q_name : string; q_loc : string; q_shift : int; q_contents : string
2030 module type Quotation =
2034 module DynAst : DynAst with module Ast = Ast
2038 type 'a expand_fun = loc -> string option -> string -> 'a
2040 val add : string -> 'a DynAst.tag -> 'a expand_fun -> unit
2042 val find : string -> 'a DynAst.tag -> 'a expand_fun
2044 val default : string ref
2046 val parse_quotation_result :
2047 (loc -> string -> 'a) -> loc -> quotation -> string -> string -> 'a
2049 val translate : (string -> string) ref
2051 val expand : loc -> quotation -> 'a DynAst.tag -> 'a
2053 val dump_file : (string option) ref
2055 module Error : Error
2065 val to_string : t -> string
2067 val print : Format.formatter -> t -> unit
2069 val match_keyword : string -> t -> bool
2071 val extract_string : t -> string
2075 type token_filter = (t, Loc.t) stream_filter
2079 val mk : (string -> bool) -> t
2081 val define_filter : t -> (token_filter -> token_filter) -> unit
2083 val filter : t -> token_filter
2085 val keyword_added : t -> string -> bool -> unit
2087 val keyword_removed : t -> string -> unit
2091 module Error : Error
2100 | ESCAPED_IDENT of string
2101 | INT of int * string
2102 | INT32 of int32 * string
2103 | INT64 of int64 * string
2104 | NATIVEINT of nativeint * string
2105 | FLOAT of float * string
2106 | CHAR of char * string
2107 | STRING of string * string
2109 | OPTLABEL of string
2110 | QUOTATION of quotation
2111 | ANTIQUOT of string * string
2115 | LINE_DIRECTIVE of int * string option
2118 module type Camlp4Token = Token with type t = camlp4_token
2120 module type DynLoader =
2124 exception Error of string * string
2126 val mk : ?ocaml_stdlib: bool -> ?camlp4_stdlib: bool -> unit -> t
2128 val fold_load_path : t -> (string -> 'a -> 'a) -> 'a -> 'a
2130 val load : t -> string -> unit
2132 val include_dir : t -> string -> unit
2134 val find_in_path : t -> string -> string
2136 val is_native : bool
2142 module type Action =
2150 val getf : t -> 'a -> 'b
2152 val getf2 : t -> 'a -> 'b -> 'c
2156 type assoc = | NonA | RightA | LeftA
2165 module type Structure =
2169 module Action : Action
2171 module Token : Token with module Loc = Loc
2179 type token_pattern = ((Token.t -> bool) * string)
2182 | Smeta of string * symbol list * Action.t
2183 | Snterm of internal_entry
2184 | Snterml of internal_entry * string
2186 | Slist0sep of symbol * symbol
2188 | Slist1sep of symbol * symbol
2192 | Stoken of token_pattern
2193 | Skeyword of string
2196 type production_rule = ((symbol list) * Action.t)
2198 type single_extend_statment =
2199 ((string option) * (assoc option) * (production_rule list))
2201 type extend_statment =
2202 ((position option) * (single_extend_statment list))
2204 type delete_statment = symbol list
2206 type ('a, 'b, 'c) fold =
2208 symbol list -> ('a Stream.t -> 'b) -> 'a Stream.t -> 'c
2210 type ('a, 'b, 'c) foldsep =
2213 ('a Stream.t -> 'b) ->
2214 ('a Stream.t -> unit) -> 'a Stream.t -> 'c
2218 module type Dynamic =
2222 val mk : unit -> gram
2228 val mk : gram -> string -> 'a t
2232 string -> ((Token.t * Loc.t) Stream.t -> 'a) -> 'a t
2235 'a t -> ((Token.t * Loc.t) Stream.t -> 'a) -> unit
2237 val name : 'a t -> string
2239 val print : Format.formatter -> 'a t -> unit
2241 val dump : Format.formatter -> 'a t -> unit
2243 val obj : 'a t -> internal_entry
2245 val clear : 'a t -> unit
2249 val get_filter : gram -> Token.Filter.t
2251 type 'a not_filtered
2253 val extend : 'a Entry.t -> extend_statment -> unit
2255 val delete_rule : 'a Entry.t -> delete_statment -> unit
2258 'a Entry.t -> ((symbol list) * Action.t) list -> symbol
2260 val sfold0 : ('a -> 'b -> 'b) -> 'b -> (_, 'a, 'b) fold
2262 val sfold1 : ('a -> 'b -> 'b) -> 'b -> (_, 'a, 'b) fold
2264 val sfold0sep : ('a -> 'b -> 'b) -> 'b -> (_, 'a, 'b) foldsep
2269 char Stream.t -> ((Token.t * Loc.t) Stream.t) not_filtered
2273 Loc.t -> string -> ((Token.t * Loc.t) Stream.t) not_filtered
2277 ((Token.t * Loc.t) Stream.t) not_filtered ->
2278 (Token.t * Loc.t) Stream.t
2280 val parse : 'a Entry.t -> Loc.t -> char Stream.t -> 'a
2282 val parse_string : 'a Entry.t -> Loc.t -> string -> 'a
2284 val parse_tokens_before_filter :
2285 'a Entry.t -> ((Token.t * Loc.t) Stream.t) not_filtered -> 'a
2287 val parse_tokens_after_filter :
2288 'a Entry.t -> (Token.t * Loc.t) Stream.t -> 'a
2292 module type Static =
2300 val mk : string -> 'a t
2303 string -> ((Token.t * Loc.t) Stream.t -> 'a) -> 'a t
2306 'a t -> ((Token.t * Loc.t) Stream.t -> 'a) -> unit
2308 val name : 'a t -> string
2310 val print : Format.formatter -> 'a t -> unit
2312 val dump : Format.formatter -> 'a t -> unit
2314 val obj : 'a t -> internal_entry
2316 val clear : 'a t -> unit
2320 val get_filter : unit -> Token.Filter.t
2322 type 'a not_filtered
2324 val extend : 'a Entry.t -> extend_statment -> unit
2326 val delete_rule : 'a Entry.t -> delete_statment -> unit
2329 'a Entry.t -> ((symbol list) * Action.t) list -> symbol
2331 val sfold0 : ('a -> 'b -> 'b) -> 'b -> (_, 'a, 'b) fold
2333 val sfold1 : ('a -> 'b -> 'b) -> 'b -> (_, 'a, 'b) fold
2335 val sfold0sep : ('a -> 'b -> 'b) -> 'b -> (_, 'a, 'b) foldsep
2339 char Stream.t -> ((Token.t * Loc.t) Stream.t) not_filtered
2342 Loc.t -> string -> ((Token.t * Loc.t) Stream.t) not_filtered
2345 ((Token.t * Loc.t) Stream.t) not_filtered ->
2346 (Token.t * Loc.t) Stream.t
2348 val parse : 'a Entry.t -> Loc.t -> char Stream.t -> 'a
2350 val parse_string : 'a Entry.t -> Loc.t -> string -> 'a
2352 val parse_tokens_before_filter :
2353 'a Entry.t -> ((Token.t * Loc.t) Stream.t) not_filtered -> 'a
2355 val parse_tokens_after_filter :
2356 'a Entry.t -> (Token.t * Loc.t) Stream.t -> 'a
2366 module Token : Token with module Loc = Loc
2368 module Error : Error
2370 val mk : unit -> Loc.t -> char Stream.t -> (Token.t * Loc.t) Stream.t
2374 module Parser (Ast : Ast) =
2376 module type SIMPLE =
2378 val parse_expr : Ast.loc -> string -> Ast.expr
2380 val parse_patt : Ast.loc -> string -> Ast.patt
2387 ?directive_handler: (Ast.str_item -> Ast.str_item option) ->
2388 Ast.loc -> char Stream.t -> Ast.str_item
2391 ?directive_handler: (Ast.sig_item -> Ast.sig_item option) ->
2392 Ast.loc -> char Stream.t -> Ast.sig_item
2398 module Printer (Ast : Ast) =
2403 ?input_file: string ->
2404 ?output_file: string -> Ast.sig_item -> unit
2407 ?input_file: string ->
2408 ?output_file: string -> Ast.str_item -> unit
2414 module type Syntax =
2418 module Ast : Ast with type loc = Loc.t
2420 module Token : Token with module Loc = Loc
2422 module Gram : Grammar.Static with module Loc = Loc
2423 and module Token = Token
2425 module Quotation : Quotation with module Ast = Ast
2427 module AntiquotSyntax : Parser(Ast).SIMPLE
2429 include Warning(Loc).S
2431 include Parser(Ast).S
2433 include Printer(Ast).S
2437 module type Camlp4Syntax =
2441 module Ast : Camlp4Ast with module Loc = Loc
2443 module Token : Camlp4Token with module Loc = Loc
2445 module Gram : Grammar.Static with module Loc = Loc
2446 and module Token = Token
2448 module Quotation : Quotation with module Ast = Camlp4AstToAst(Ast)
2450 module AntiquotSyntax : Parser(Ast).SIMPLE
2452 include Warning(Loc).S
2454 include Parser(Ast).S
2456 include Printer(Ast).S
2458 val interf : ((Ast.sig_item list) * (Loc.t option)) Gram.Entry.t
2460 val implem : ((Ast.str_item list) * (Loc.t option)) Gram.Entry.t
2462 val top_phrase : (Ast.str_item option) Gram.Entry.t
2464 val use_file : ((Ast.str_item list) * (Loc.t option)) Gram.Entry.t
2466 val a_CHAR : string Gram.Entry.t
2468 val a_FLOAT : string Gram.Entry.t
2470 val a_INT : string Gram.Entry.t
2472 val a_INT32 : string Gram.Entry.t
2474 val a_INT64 : string Gram.Entry.t
2476 val a_LABEL : string Gram.Entry.t
2478 val a_LIDENT : string Gram.Entry.t
2480 val a_NATIVEINT : string Gram.Entry.t
2482 val a_OPTLABEL : string Gram.Entry.t
2484 val a_STRING : string Gram.Entry.t
2486 val a_UIDENT : string Gram.Entry.t
2488 val a_ident : string Gram.Entry.t
2490 val amp_ctyp : Ast.ctyp Gram.Entry.t
2492 val and_ctyp : Ast.ctyp Gram.Entry.t
2494 val match_case : Ast.match_case Gram.Entry.t
2496 val match_case0 : Ast.match_case Gram.Entry.t
2498 val match_case_quot : Ast.match_case Gram.Entry.t
2500 val binding : Ast.binding Gram.Entry.t
2502 val binding_quot : Ast.binding Gram.Entry.t
2504 val rec_binding_quot : Ast.rec_binding Gram.Entry.t
2506 val class_declaration : Ast.class_expr Gram.Entry.t
2508 val class_description : Ast.class_type Gram.Entry.t
2510 val class_expr : Ast.class_expr Gram.Entry.t
2512 val class_expr_quot : Ast.class_expr Gram.Entry.t
2514 val class_fun_binding : Ast.class_expr Gram.Entry.t
2516 val class_fun_def : Ast.class_expr Gram.Entry.t
2518 val class_info_for_class_expr : Ast.class_expr Gram.Entry.t
2520 val class_info_for_class_type : Ast.class_type Gram.Entry.t
2522 val class_longident : Ast.ident Gram.Entry.t
2524 val class_longident_and_param : Ast.class_expr Gram.Entry.t
2526 val class_name_and_param : (string * Ast.ctyp) Gram.Entry.t
2528 val class_sig_item : Ast.class_sig_item Gram.Entry.t
2530 val class_sig_item_quot : Ast.class_sig_item Gram.Entry.t
2532 val class_signature : Ast.class_sig_item Gram.Entry.t
2534 val class_str_item : Ast.class_str_item Gram.Entry.t
2536 val class_str_item_quot : Ast.class_str_item Gram.Entry.t
2538 val class_structure : Ast.class_str_item Gram.Entry.t
2540 val class_type : Ast.class_type Gram.Entry.t
2542 val class_type_declaration : Ast.class_type Gram.Entry.t
2544 val class_type_longident : Ast.ident Gram.Entry.t
2546 val class_type_longident_and_param : Ast.class_type Gram.Entry.t
2548 val class_type_plus : Ast.class_type Gram.Entry.t
2550 val class_type_quot : Ast.class_type Gram.Entry.t
2552 val comma_ctyp : Ast.ctyp Gram.Entry.t
2554 val comma_expr : Ast.expr Gram.Entry.t
2556 val comma_ipatt : Ast.patt Gram.Entry.t
2558 val comma_patt : Ast.patt Gram.Entry.t
2560 val comma_type_parameter : Ast.ctyp Gram.Entry.t
2562 val constrain : (Ast.ctyp * Ast.ctyp) Gram.Entry.t
2564 val constructor_arg_list : Ast.ctyp Gram.Entry.t
2566 val constructor_declaration : Ast.ctyp Gram.Entry.t
2568 val constructor_declarations : Ast.ctyp Gram.Entry.t
2570 val ctyp : Ast.ctyp Gram.Entry.t
2572 val ctyp_quot : Ast.ctyp Gram.Entry.t
2574 val cvalue_binding : Ast.expr Gram.Entry.t
2576 val direction_flag : Ast.meta_bool Gram.Entry.t
2578 val dummy : unit Gram.Entry.t
2580 val eq_expr : (string -> Ast.patt -> Ast.patt) Gram.Entry.t
2582 val expr : Ast.expr Gram.Entry.t
2584 val expr_eoi : Ast.expr Gram.Entry.t
2586 val expr_quot : Ast.expr Gram.Entry.t
2588 val field_expr : Ast.rec_binding Gram.Entry.t
2590 val field_expr_list : Ast.rec_binding Gram.Entry.t
2592 val fun_binding : Ast.expr Gram.Entry.t
2594 val fun_def : Ast.expr Gram.Entry.t
2596 val ident : Ast.ident Gram.Entry.t
2598 val ident_quot : Ast.ident Gram.Entry.t
2600 val ipatt : Ast.patt Gram.Entry.t
2602 val ipatt_tcon : Ast.patt Gram.Entry.t
2604 val label : string Gram.Entry.t
2606 val label_declaration : Ast.ctyp Gram.Entry.t
2608 val label_declaration_list : Ast.ctyp Gram.Entry.t
2610 val label_expr : Ast.rec_binding Gram.Entry.t
2612 val label_expr_list : Ast.rec_binding Gram.Entry.t
2614 val label_ipatt : Ast.patt Gram.Entry.t
2616 val label_ipatt_list : Ast.patt Gram.Entry.t
2618 val label_longident : Ast.ident Gram.Entry.t
2620 val label_patt : Ast.patt Gram.Entry.t
2622 val label_patt_list : Ast.patt Gram.Entry.t
2624 val labeled_ipatt : Ast.patt Gram.Entry.t
2626 val let_binding : Ast.binding Gram.Entry.t
2628 val meth_list : (Ast.ctyp * Ast.meta_bool) Gram.Entry.t
2630 val meth_decl : Ast.ctyp Gram.Entry.t
2632 val module_binding : Ast.module_binding Gram.Entry.t
2634 val module_binding0 : Ast.module_expr Gram.Entry.t
2636 val module_binding_quot : Ast.module_binding Gram.Entry.t
2638 val module_declaration : Ast.module_type Gram.Entry.t
2640 val module_expr : Ast.module_expr Gram.Entry.t
2642 val module_expr_quot : Ast.module_expr Gram.Entry.t
2644 val module_longident : Ast.ident Gram.Entry.t
2646 val module_longident_with_app : Ast.ident Gram.Entry.t
2648 val module_rec_declaration : Ast.module_binding Gram.Entry.t
2650 val module_type : Ast.module_type Gram.Entry.t
2652 val module_type_quot : Ast.module_type Gram.Entry.t
2654 val more_ctyp : Ast.ctyp Gram.Entry.t
2656 val name_tags : Ast.ctyp Gram.Entry.t
2658 val opt_as_lident : string Gram.Entry.t
2660 val opt_class_self_patt : Ast.patt Gram.Entry.t
2662 val opt_class_self_type : Ast.ctyp Gram.Entry.t
2664 val opt_comma_ctyp : Ast.ctyp Gram.Entry.t
2666 val opt_dot_dot : Ast.meta_bool Gram.Entry.t
2668 val opt_eq_ctyp : Ast.ctyp Gram.Entry.t
2670 val opt_expr : Ast.expr Gram.Entry.t
2672 val opt_meth_list : Ast.ctyp Gram.Entry.t
2674 val opt_mutable : Ast.meta_bool Gram.Entry.t
2676 val opt_polyt : Ast.ctyp Gram.Entry.t
2678 val opt_private : Ast.meta_bool Gram.Entry.t
2680 val opt_rec : Ast.meta_bool Gram.Entry.t
2682 val opt_virtual : Ast.meta_bool Gram.Entry.t
2684 val opt_when_expr : Ast.expr Gram.Entry.t
2686 val patt : Ast.patt Gram.Entry.t
2688 val patt_as_patt_opt : Ast.patt Gram.Entry.t
2690 val patt_eoi : Ast.patt Gram.Entry.t
2692 val patt_quot : Ast.patt Gram.Entry.t
2694 val patt_tcon : Ast.patt Gram.Entry.t
2696 val phrase : Ast.str_item Gram.Entry.t
2698 val poly_type : Ast.ctyp Gram.Entry.t
2700 val row_field : Ast.ctyp Gram.Entry.t
2702 val sem_expr : Ast.expr Gram.Entry.t
2704 val sem_expr_for_list : (Ast.expr -> Ast.expr) Gram.Entry.t
2706 val sem_patt : Ast.patt Gram.Entry.t
2708 val sem_patt_for_list : (Ast.patt -> Ast.patt) Gram.Entry.t
2710 val semi : unit Gram.Entry.t
2712 val sequence : Ast.expr Gram.Entry.t
2714 val do_sequence : Ast.expr Gram.Entry.t
2716 val sig_item : Ast.sig_item Gram.Entry.t
2718 val sig_item_quot : Ast.sig_item Gram.Entry.t
2720 val sig_items : Ast.sig_item Gram.Entry.t
2722 val star_ctyp : Ast.ctyp Gram.Entry.t
2724 val str_item : Ast.str_item Gram.Entry.t
2726 val str_item_quot : Ast.str_item Gram.Entry.t
2728 val str_items : Ast.str_item Gram.Entry.t
2730 val type_constraint : unit Gram.Entry.t
2732 val type_declaration : Ast.ctyp Gram.Entry.t
2734 val type_ident_and_parameters :
2735 (string * (Ast.ctyp list)) Gram.Entry.t
2737 val type_kind : Ast.ctyp Gram.Entry.t
2739 val type_longident : Ast.ident Gram.Entry.t
2741 val type_longident_and_parameters : Ast.ctyp Gram.Entry.t
2743 val type_parameter : Ast.ctyp Gram.Entry.t
2745 val type_parameters : (Ast.ctyp -> Ast.ctyp) Gram.Entry.t
2747 val typevars : Ast.ctyp Gram.Entry.t
2749 val val_longident : Ast.ident Gram.Entry.t
2751 val value_let : unit Gram.Entry.t
2753 val value_val : unit Gram.Entry.t
2755 val with_constr : Ast.with_constr Gram.Entry.t
2757 val with_constr_quot : Ast.with_constr Gram.Entry.t
2759 val prefixop : Ast.expr Gram.Entry.t
2761 val infixop0 : Ast.expr Gram.Entry.t
2763 val infixop1 : Ast.expr Gram.Entry.t
2765 val infixop2 : Ast.expr Gram.Entry.t
2767 val infixop3 : Ast.expr Gram.Entry.t
2769 val infixop4 : Ast.expr Gram.Entry.t
2773 module type SyntaxExtension =
2774 functor (Syn : Syntax) -> Syntax with module Loc = Syn.Loc
2775 and module Ast = Syn.Ast and module Token = Syn.Token
2776 and module Gram = Syn.Gram and module Quotation = Syn.Quotation
2780 module ErrorHandler :
2782 val print : Format.formatter -> exn -> unit
2784 val try_print : Format.formatter -> exn -> unit
2786 val to_string : exn -> string
2788 val try_to_string : exn -> string
2790 val register : (Format.formatter -> exn -> unit) -> unit
2792 module Register (Error : Sig.Error) : sig end
2796 val print : Format.formatter -> Obj.t -> unit
2798 val print_desc : Format.formatter -> Obj.t -> unit
2800 val to_string : Obj.t -> string
2802 val desc : Obj.t -> string
2814 then "tag = " ^ (string_of_int (Obj.tag obj))
2815 else "int_val = " ^ (string_of_int (Obj.obj obj))
2817 let rec to_string r =
2820 (let i : int = Obj.magic r
2821 in (string_of_int i) ^ (" | CstTag" ^ (string_of_int (i + 1))))
2823 (let rec get_fields acc =
2826 | n -> let n = n - 1 in get_fields ((Obj.field r n) :: acc) n in
2829 then r = (Obj.repr 0)
2833 in (t = 0) && ((s = 2) && (is_list (Obj.field r 1)))) in
2834 let rec get_list r =
2838 (let h = Obj.field r 0
2839 and t = get_list (Obj.field r 1)
2841 let opaque name = "<" ^ (name ^ ">") in
2846 | _ when is_list r ->
2847 let fields = get_list r
2850 ((String.concat "; " (List.map to_string fields)) ^
2853 let fields = get_fields [] s
2856 ((String.concat ", " (List.map to_string fields)) ^
2858 | x when x = Obj.lazy_tag -> opaque "lazy"
2859 | x when x = Obj.closure_tag -> opaque "closure"
2860 | x when x = Obj.object_tag ->
2861 let fields = get_fields [] s in
2862 let (_class, id, slots) =
2864 | h :: h' :: t -> (h, h', t)
2865 | _ -> assert false)
2870 ((String.concat ", " (List.map to_string slots))
2872 | x when x = Obj.infix_tag -> opaque "infix"
2873 | x when x = Obj.forward_tag -> opaque "forward"
2874 | x when x < Obj.no_scan_tag ->
2875 let fields = get_fields [] s
2878 ((string_of_int t) ^
2880 ((String.concat ", " (List.map to_string fields))
2882 | x when x = Obj.string_tag ->
2883 "\"" ^ ((String.escaped (Obj.magic r : string)) ^ "\"")
2884 | x when x = Obj.double_tag ->
2885 string_of_float (Obj.magic r : float)
2886 | x when x = Obj.abstract_tag -> opaque "abstract"
2887 | x when x = Obj.custom_tag -> opaque "custom"
2888 | x when x = Obj.final_tag -> opaque "final"
2891 ("ObjTools.to_string: unknown tag (" ^
2892 ((string_of_int t) ^ ")")))
2894 let print ppf x = fprintf ppf "%s" (to_string x)
2896 let print_desc ppf x = fprintf ppf "%s" (desc x)
2900 let default_handler ppf x =
2903 (fprintf ppf "Camlp4: Uncaught exception: %s"
2904 (Obj.obj (Obj.field (Obj.field x 0) 0) : string);
2907 (pp_print_string ppf " (";
2908 for i = 1 to (Obj.size x) - 1 do
2909 if i > 1 then pp_print_string ppf ", " else ();
2910 ObjTools.print ppf (Obj.field x i)
2912 pp_print_char ppf ')')
2917 ref (fun ppf default_handler exn -> default_handler ppf exn)
2920 let current_handler = !handler
2923 fun ppf default_handler exn ->
2925 with | exn -> current_handler ppf default_handler exn
2927 module Register (Error : Sig.Error) =
2930 let current_handler = !handler
2933 fun ppf default_handler ->
2935 | Error.E x -> Error.print ppf x
2936 | x -> current_handler ppf default_handler x
2940 let gen_print ppf default_handler =
2942 | Out_of_memory -> fprintf ppf "Out of memory"
2943 | Assert_failure ((file, line, char)) ->
2944 fprintf ppf "Assertion failed, file %S, line %d, char %d" file line
2946 | Match_failure ((file, line, char)) ->
2947 fprintf ppf "Pattern matching failed, file %S, line %d, char %d"
2949 | Failure str -> fprintf ppf "Failure: %S" str
2950 | Invalid_argument str -> fprintf ppf "Invalid argument: %S" str
2951 | Sys_error str -> fprintf ppf "I/O error: %S" str
2952 | Stream.Failure -> fprintf ppf "Parse failure"
2953 | Stream.Error str -> fprintf ppf "Parse error: %s" str
2954 | x -> !handler ppf default_handler x
2956 let print ppf = gen_print ppf default_handler
2958 let try_print ppf = gen_print ppf (fun _ -> raise)
2961 let buf = Buffer.create 128 in
2962 let () = bprintf buf "%a" print exn in Buffer.contents buf
2964 let try_to_string exn =
2965 let buf = Buffer.create 128 in
2966 let () = bprintf buf "%a" try_print exn in Buffer.contents buf
2972 module Loc : sig include Sig.Loc
2977 type pos = { line : int; bol : int; off : int }
2980 { file_name : string; start : pos; stop : pos; ghost : bool
2986 | `start -> "`start"
2989 | _ -> "<not-printable>"
2990 in pp_print_string f s
2993 fprintf f "@[<hov 2>{ line = %d ;@ bol = %d ;@ off = %d } : pos@]"
2998 "@[<hov 2>{ file_name = %s ;@ start = %a (%d-%d);@ stop = %a (%d);@ ghost = %b@ } : Loc.t@]"
2999 x.file_name dump_pos x.start (x.start.off - x.start.bol)
3000 (x.stop.off - x.start.bol) dump_pos x.stop
3001 (x.stop.off - x.stop.bol) x.ghost
3004 fprintf f "[%S: %d:%d-%d %d:%d%t]" x.file_name x.start.line
3005 (x.start.off - x.start.bol) (x.stop.off - x.start.bol)
3006 x.stop.line (x.stop.off - x.stop.bol)
3007 (fun o -> if x.ghost then fprintf o " (ghost)" else ())
3009 let start_pos = { line = 1; bol = 0; off = 0; }
3013 file_name = "ghost-location";
3021 file_name = file_name;
3027 let of_tuple (file_name, start_line, start_bol, start_off, stop_line,
3028 stop_bol, stop_off, ghost)
3031 file_name = file_name;
3032 start = { line = start_line; bol = start_bol; off = start_off; };
3033 stop = { line = stop_line; bol = stop_bol; off = stop_off; };
3038 file_name = file_name;
3046 { line = stop_line; bol = stop_bol; off = stop_off };
3049 (file_name, start_line, start_bol, start_off, stop_line, stop_bol,
3052 let pos_of_lexing_position p =
3055 line = p.Lexing.pos_lnum;
3056 bol = p.Lexing.pos_bol;
3057 off = p.Lexing.pos_cnum;
3061 let pos_to_lexing_position p file_name =
3063 Lexing.pos_fname = file_name;
3069 let better_file_name a b =
3079 let start = Lexing.lexeme_start_p lb
3080 and stop = Lexing.lexeme_end_p lb in
3084 better_file_name start.Lexing.pos_fname stop.Lexing.pos_fname;
3085 start = pos_of_lexing_position start;
3086 stop = pos_of_lexing_position stop;
3091 let of_lexing_position pos =
3094 file_name = pos.Lexing.pos_fname;
3095 start = pos_of_lexing_position pos;
3096 stop = pos_of_lexing_position pos;
3101 let to_ocaml_location x =
3103 Camlp4_import.Location.loc_start =
3104 pos_to_lexing_position x.start x.file_name;
3105 loc_end = pos_to_lexing_position x.stop x.file_name;
3106 loc_ghost = x.ghost;
3109 let of_ocaml_location {
3110 Camlp4_import.Location.loc_start = a;
3117 better_file_name a.Lexing.pos_fname b.Lexing.pos_fname;
3118 start = pos_of_lexing_position a;
3119 stop = pos_of_lexing_position b;
3124 let start_pos x = pos_to_lexing_position x.start x.file_name
3126 let stop_pos x = pos_to_lexing_position x.stop x.file_name
3133 match ((a.ghost), (b.ghost)) with
3134 | (false, false) -> { (a) with stop = b.stop; }
3135 | (true, true) -> { (a) with stop = b.stop; }
3136 | (true, _) -> { (a) with stop = b.stop; }
3137 | (_, true) -> { (b) with start = a.start; }
3140 let join x = { (x) with stop = x.start; }
3142 let map f start_stop_both x =
3143 match start_stop_both with
3144 | `start -> { (x) with start = f x.start; }
3145 | `stop -> { (x) with stop = f x.stop; }
3146 | `both -> { (x) with start = f x.start; stop = f x.stop; }
3148 let move_pos chars x = { (x) with off = x.off + chars; }
3150 let move s chars x = map (move_pos chars) s x
3152 let move_line lines x =
3153 let move_line_pos x =
3154 { (x) with line = x.line + lines; bol = x.off; }
3155 in map move_line_pos `both x
3158 { (x) with start = x.stop; stop = move_pos width x.stop; }
3160 let file_name x = x.file_name
3162 let start_line x = x.start.line
3164 let stop_line x = x.stop.line
3166 let start_bol x = x.start.bol
3168 let stop_bol x = x.stop.bol
3170 let start_off x = x.start.off
3172 let stop_off x = x.stop.off
3174 let is_ghost x = x.ghost
3176 let set_file_name s x = { (x) with file_name = s; }
3178 let ghostify x = { (x) with ghost = true; }
3180 let make_absolute x =
3181 let pwd = Sys.getcwd ()
3183 if Filename.is_relative x.file_name
3184 then { (x) with file_name = Filename.concat pwd x.file_name; }
3187 let strictly_before x y =
3188 let b = (x.stop.off < y.start.off) && (x.file_name = y.file_name)
3192 let (a, b) = ((x.start), (x.stop)) in
3194 sprintf "File \"%s\", line %d, characters %d-%d" x.file_name
3195 a.line (a.off - a.bol) (b.off - a.bol)
3197 if x.start.line <> x.stop.line
3199 sprintf "%s (end at line %d, character %d)" res x.stop.line
3203 let print out x = pp_print_string out (to_string x)
3207 ((start_line x) > (stop_line x)) ||
3208 (((start_bol x) > (stop_bol x)) ||
3209 (((start_off x) > (stop_off x)) ||
3210 (((start_line x) < 0) ||
3211 (((stop_line x) < 0) ||
3212 (((start_bol x) < 0) ||
3213 (((stop_bol x) < 0) ||
3214 (((start_off x) < 0) || ((stop_off x) < 0))))))))
3216 (eprintf "*** Warning: (%s) strange positions ***\n%a@\n" msg
3221 exception Exc_located of t * exn
3224 ErrorHandler.register
3227 | Exc_located (loc, exn) ->
3228 fprintf ppf "%a:@\n%a" print loc ErrorHandler.print exn
3231 let name = ref "_loc"
3235 | Exc_located (_, _) -> raise exc
3236 | _ -> raise (Exc_located (loc, exc))
3242 module Make (Loc : Sig.Loc) : Sig.Camlp4Token with module Loc = Loc
3246 val char : string -> char
3248 val string : ?strict: unit -> string -> string
3256 module Make (Loc : Sig.Loc) : Sig.Camlp4Token with module Loc = Loc =
3262 type t = camlp4_token
3268 | KEYWORD s -> sprintf "KEYWORD %S" s
3269 | SYMBOL s -> sprintf "SYMBOL %S" s
3270 | LIDENT s -> sprintf "LIDENT %S" s
3271 | UIDENT s -> sprintf "UIDENT %S" s
3272 | INT (_, s) -> sprintf "INT %s" s
3273 | INT32 (_, s) -> sprintf "INT32 %sd" s
3274 | INT64 (_, s) -> sprintf "INT64 %sd" s
3275 | NATIVEINT (_, s) -> sprintf "NATIVEINT %sd" s
3276 | FLOAT (_, s) -> sprintf "FLOAT %s" s
3277 | CHAR (_, s) -> sprintf "CHAR '%s'" s
3278 | STRING (_, s) -> sprintf "STRING \"%s\"" s
3279 | LABEL s -> sprintf "LABEL %S" s
3280 | OPTLABEL s -> sprintf "OPTLABEL %S" s
3281 | ANTIQUOT (n, s) -> sprintf "ANTIQUOT %s: %S" n s
3284 "QUOTATION { q_name=%S; q_loc=%S; q_shift=%d; q_contents=%S }"
3285 x.q_name x.q_loc x.q_shift x.q_contents
3286 | COMMENT s -> sprintf "COMMENT %S" s
3287 | BLANKS s -> sprintf "BLANKS %S" s
3288 | NEWLINE -> sprintf "NEWLINE"
3289 | EOI -> sprintf "EOI"
3290 | ESCAPED_IDENT s -> sprintf "ESCAPED_IDENT %S" s
3291 | LINE_DIRECTIVE (i, None) -> sprintf "LINE_DIRECTIVE %d" i
3292 | LINE_DIRECTIVE (i, (Some s)) ->
3293 sprintf "LINE_DIRECTIVE %d %S" i s
3295 let print ppf x = pp_print_string ppf (to_string x)
3297 let match_keyword kwd =
3298 function | KEYWORD kwd' when kwd = kwd' -> true | _ -> false
3300 let extract_string =
3302 | KEYWORD s | SYMBOL s | LIDENT s | UIDENT s | INT (_, s) |
3303 INT32 (_, s) | INT64 (_, s) | NATIVEINT (_, s) |
3304 FLOAT (_, s) | CHAR (_, s) | STRING (_, s) | LABEL s |
3305 OPTLABEL s | COMMENT s | BLANKS s | ESCAPED_IDENT s -> s
3308 ("Cannot extract a string from this token: " ^
3314 | Illegal_token of string
3315 | Keyword_as_label of string
3316 | Illegal_token_pattern of string * string
3317 | Illegal_constructor of string
3323 | Illegal_token s -> fprintf ppf "Illegal token (%s)" s
3324 | Keyword_as_label kwd ->
3326 "`%s' is a keyword, it cannot be used as label name"
3328 | Illegal_token_pattern (p_con, p_prm) ->
3329 fprintf ppf "Illegal token pattern: %s %S" p_con p_prm
3330 | Illegal_constructor con ->
3331 fprintf ppf "Illegal constructor %S" con
3334 let b = Buffer.create 50 in
3335 let () = bprintf b "%a" print x in Buffer.contents b
3339 let _ = let module M = ErrorHandler.Register(Error) in ()
3343 type token_filter = (t, Loc.t) stream_filter
3346 { is_kwd : string -> bool; mutable filter : token_filter
3350 raise (Loc.Exc_located (loc, Error.E error))
3352 let keyword_conversion tok is_kwd =
3354 | SYMBOL s | LIDENT s | UIDENT s when is_kwd s -> KEYWORD s
3355 | ESCAPED_IDENT s -> LIDENT s
3358 let check_keyword_as_label tok loc is_kwd =
3360 match tok with | LABEL s -> s | OPTLABEL s -> s | _ -> ""
3362 if (s <> "") && (is_kwd s)
3363 then err (Error.Keyword_as_label s) loc
3366 let check_unknown_keywords tok loc =
3368 | SYMBOL s -> err (Error.Illegal_token s) loc
3371 let error_no_respect_rules p_con p_prm =
3373 (Error.E (Error.Illegal_token_pattern (p_con, p_prm)))
3375 let check_keyword _ = true
3377 let error_on_unknown_keywords = ref false
3379 let rec ignore_layout (__strm : _ Stream.t) =
3380 match Stream.peek __strm with
3382 (((COMMENT _ | BLANKS _ | NEWLINE |
3383 LINE_DIRECTIVE (_, _)),
3385 -> (Stream.junk __strm; ignore_layout __strm)
3387 (Stream.junk __strm;
3391 (Stream.slazy (fun _ -> ignore_layout s)))
3392 | _ -> Stream.sempty
3394 let mk is_kwd = { is_kwd = is_kwd; filter = ignore_layout; }
3398 let tok = keyword_conversion tok x.is_kwd
3400 (check_keyword_as_label tok loc x.is_kwd;
3401 if !error_on_unknown_keywords
3402 then check_unknown_keywords tok loc
3405 let rec filter (__strm : _ Stream.t) =
3406 match Stream.peek __strm with
3407 | Some ((tok, loc)) ->
3408 (Stream.junk __strm;
3411 Stream.lcons (fun _ -> f tok loc)
3412 (Stream.slazy (fun _ -> filter s)))
3413 | _ -> Stream.sempty in
3414 let rec tracer (__strm : _ Stream.t) =
3415 match Stream.peek __strm with
3416 | Some (((_tok, _loc) as x)) ->
3417 (Stream.junk __strm;
3420 Stream.icons x (Stream.slazy (fun _ -> tracer xs)))
3421 | _ -> Stream.sempty
3422 in fun strm -> tracer (x.filter (filter strm))
3424 let define_filter x f = x.filter <- f x.filter
3426 let keyword_added _ _ _ = ()
3428 let keyword_removed _ _ = ()
3436 let valch x = (Char.code x) - (Char.code '0')
3443 else if d >= 65 then d - 55 else d - 48
3445 let rec skip_indent (__strm : _ Stream.t) =
3446 match Stream.peek __strm with
3447 | Some (' ' | '\t') -> (Stream.junk __strm; skip_indent __strm)
3450 let skip_opt_linefeed (__strm : _ Stream.t) =
3451 match Stream.peek __strm with
3452 | Some '\010' -> (Stream.junk __strm; ())
3456 if (c < 0) || (c > 255)
3457 then failwith "invalid char token"
3460 let rec backslash (__strm : _ Stream.t) =
3461 match Stream.peek __strm with
3462 | Some '\010' -> (Stream.junk __strm; '\010')
3463 | Some '\013' -> (Stream.junk __strm; '\013')
3464 | Some 'n' -> (Stream.junk __strm; '\n')
3465 | Some 'r' -> (Stream.junk __strm; '\r')
3466 | Some 't' -> (Stream.junk __strm; '\t')
3467 | Some 'b' -> (Stream.junk __strm; '\b')
3468 | Some '\\' -> (Stream.junk __strm; '\\')
3469 | Some '"' -> (Stream.junk __strm; '"')
3470 | Some '\'' -> (Stream.junk __strm; '\'')
3471 | Some ' ' -> (Stream.junk __strm; ' ')
3472 | Some (('0' .. '9' as c1)) ->
3473 (Stream.junk __strm;
3474 (match Stream.peek __strm with
3475 | Some (('0' .. '9' as c2)) ->
3476 (Stream.junk __strm;
3477 (match Stream.peek __strm with
3478 | Some (('0' .. '9' as c3)) ->
3479 (Stream.junk __strm;
3481 (((100 * (valch c1)) + (10 * (valch c2))) +
3483 | _ -> raise (Stream.Error "")))
3484 | _ -> raise (Stream.Error "")))
3486 (Stream.junk __strm;
3487 (match Stream.peek __strm with
3488 | Some (('0' .. '9' | 'a' .. 'f' | 'A' .. 'F' as c1)) ->
3489 (Stream.junk __strm;
3490 (match Stream.peek __strm with
3492 (('0' .. '9' | 'a' .. 'f' | 'A' .. 'F' as c2))
3494 (Stream.junk __strm;
3495 chr ((16 * (valch_hex c1)) + (valch_hex c2)))
3496 | _ -> raise (Stream.Error "")))
3497 | _ -> raise (Stream.Error "")))
3498 | _ -> raise Stream.Failure
3500 let rec backslash_in_string strict store (__strm : _ Stream.t) =
3501 match Stream.peek __strm with
3502 | Some '\010' -> (Stream.junk __strm; skip_indent __strm)
3504 (Stream.junk __strm;
3505 let s = __strm in (skip_opt_linefeed s; skip_indent s))
3507 (match try Some (backslash __strm)
3508 with | Stream.Failure -> None
3512 (match Stream.peek __strm with
3513 | Some c when not strict ->
3514 (Stream.junk __strm; store '\\'; store c)
3515 | _ -> failwith "invalid string token"))
3518 if (String.length s) = 1
3521 if (String.length s) = 0
3522 then failwith "invalid char token"
3524 (let (__strm : _ Stream.t) = Stream.of_string s
3526 match Stream.peek __strm with
3528 (Stream.junk __strm;
3529 (try backslash __strm
3530 with | Stream.Failure -> raise (Stream.Error "")))
3531 | _ -> failwith "invalid char token")
3533 let string ?strict s =
3534 let buf = Buffer.create 23 in
3535 let store = Buffer.add_char buf in
3536 let rec parse (__strm : _ Stream.t) =
3537 match Stream.peek __strm with
3539 (Stream.junk __strm;
3541 (try backslash_in_string (strict <> None) store __strm
3542 with | Stream.Failure -> raise (Stream.Error ""))
3545 (Stream.junk __strm;
3546 let s = __strm in (store c; parse s))
3547 | _ -> Buffer.contents buf
3548 in parse (Stream.of_string s)
3556 module TokenEval = Token.Eval
3558 module Make (Token : Sig.Camlp4Token) =
3560 module Loc = Token.Loc
3562 module Token = Token
3571 | Illegal_character of char
3572 | Illegal_escape of string
3573 | Unterminated_comment
3574 | Unterminated_string
3575 | Unterminated_quotation
3576 | Unterminated_antiquot
3577 | Unterminated_string_in_comment
3580 | Literal_overflow of string
3588 | Illegal_character c ->
3589 fprintf ppf "Illegal character (%s)" (Char.escaped c)
3590 | Illegal_escape s ->
3592 "Illegal backslash escape in string or character (%s)"
3594 | Unterminated_comment ->
3595 fprintf ppf "Comment not terminated"
3596 | Unterminated_string ->
3597 fprintf ppf "String literal not terminated"
3598 | Unterminated_string_in_comment ->
3600 "This comment contains an unterminated string literal"
3601 | Unterminated_quotation ->
3602 fprintf ppf "Quotation not terminated"
3603 | Unterminated_antiquot ->
3604 fprintf ppf "Antiquotation not terminated"
3605 | Literal_overflow ty ->
3607 "Integer literal exceeds the range of representable integers of type %s"
3610 fprintf ppf "this is the start of a comment"
3611 | Comment_not_end ->
3612 fprintf ppf "this is not the end of a comment"
3615 let b = Buffer.create 50 in
3616 let () = bprintf b "%a" print x in Buffer.contents b
3620 let _ = let module M = ErrorHandler.Register(Error) in ()
3625 { loc : Loc.t; in_comment : bool; quotations : bool;
3626 antiquots : bool; lexbuf : lexbuf; buffer : Buffer.t
3629 let default_context lb =
3636 buffer = Buffer.create 256;
3639 let store c = Buffer.add_string c.buffer (Lexing.lexeme c.lexbuf)
3641 let istore_char c i =
3642 Buffer.add_char c.buffer (Lexing.lexeme_char c.lexbuf i)
3644 let buff_contents c =
3645 let contents = Buffer.contents c.buffer
3646 in (Buffer.reset c.buffer; contents)
3648 let loc c = Loc.merge c.loc (Loc.of_lexbuf c.lexbuf)
3650 let quotations c = c.quotations
3652 let antiquots c = c.antiquots
3654 let is_in_comment c = c.in_comment
3656 let in_comment c = { (c) with in_comment = true; }
3658 let set_start_p c = c.lexbuf.lex_start_p <- Loc.start_pos c.loc
3660 let move_start_p shift c =
3661 let p = c.lexbuf.lex_start_p
3663 c.lexbuf.lex_start_p <-
3664 { (p) with pos_cnum = p.pos_cnum + shift; }
3666 let update_loc c = { (c) with loc = Loc.of_lexbuf c.lexbuf; }
3668 let with_curr_loc f c = f (update_loc c) c.lexbuf
3670 let parse_nested f c =
3671 (with_curr_loc f c; set_start_p c; buff_contents c)
3673 let shift n c = { (c) with loc = Loc.move `both n c.loc; }
3675 let store_parse f c = (store c; f c c.lexbuf)
3677 let parse f c = f c c.lexbuf
3679 let mk_quotation quotation c name loc shift =
3680 let s = parse_nested quotation (update_loc c) in
3681 let contents = String.sub s 0 ((String.length s) - 2)
3688 q_contents = contents;
3691 let update_loc c file line absolute chars =
3692 let lexbuf = c.lexbuf in
3693 let pos = lexbuf.lex_curr_p in
3695 match file with | None -> pos.pos_fname | Some s -> s
3697 lexbuf.lex_curr_p <-
3701 pos_fname = new_file;
3702 pos_lnum = if absolute then line else pos.pos_lnum + line;
3703 pos_bol = pos.pos_cnum - chars;
3706 let err error loc = raise (Loc.Exc_located (loc, Error.E error))
3708 let warn error loc =
3709 Format.eprintf "Warning: %a: %a@." Loc.print loc Error.print
3712 let __ocaml_lex_tables =
3715 "\000\000\223\255\224\255\224\000\226\255\253\000\035\001\072\001\
3716 \109\001\146\001\091\000\183\001\068\000\190\001\218\001\227\255\
3717 \122\000\002\002\071\002\110\002\176\000\244\255\129\002\162\002\
3718 \235\002\187\003\154\004\246\004\124\000\001\000\255\255\198\005\
3719 \253\255\150\006\252\255\245\255\246\255\247\255\253\000\224\000\
3720 \086\000\091\000\054\003\006\004\029\002\237\001\182\004\109\000\
3721 \118\007\091\000\253\000\093\000\243\255\242\255\241\255\106\005\
3722 \077\003\108\000\087\003\017\006\151\007\218\007\001\008\068\008\
3723 \107\008\107\000\239\255\126\008\075\001\210\008\249\008\060\009\
3724 \232\255\231\255\230\255\099\009\166\009\205\009\016\010\055\010\
3725 \249\001\228\255\229\255\238\255\090\010\127\010\164\010\201\010\
3726 \238\010\019\011\056\011\091\011\128\011\165\011\202\011\239\011\
3727 \020\012\057\012\094\012\011\007\136\005\004\000\233\255\008\000\
3728 \054\001\245\002\009\000\005\000\233\255\131\012\138\012\175\012\
3729 \212\012\249\012\000\013\037\013\068\013\096\013\133\013\138\013\
3730 \205\013\242\013\023\014\085\014\241\255\006\000\242\255\243\255\
3731 \148\002\251\255\047\015\123\000\109\000\125\000\255\255\254\255\
3732 \253\255\111\015\046\016\254\016\206\017\174\018\129\000\017\001\
3733 \130\000\141\000\249\255\248\255\247\255\237\006\109\003\143\000\
3734 \246\255\035\004\145\000\245\255\160\014\149\000\244\255\086\004\
3735 \247\255\248\255\007\000\249\255\201\018\255\255\250\255\121\016\
3736 \154\004\253\255\091\001\057\001\171\004\252\255\073\017\251\255\
3737 \240\018\051\019\018\020\048\020\255\255\015\021\238\021\015\022\
3738 \079\022\255\255\031\023\254\255\164\001\251\255\010\000\252\255\
3739 \253\255\128\000\079\001\255\255\095\023\030\024\238\024\190\025\
3740 \254\255\154\026\253\255\254\255\201\000\116\027\077\028\255\255\
3741 \028\001\029\029\206\001\251\255\080\001\013\000\253\255\254\255\
3742 \255\255\252\255\093\029\028\030\236\030\188\031";
3743 Lexing.lex_backtrk =
3744 "\255\255\255\255\255\255\030\000\255\255\028\000\030\000\030\000\
3745 \030\000\030\000\028\000\028\000\028\000\028\000\028\000\255\255\
3746 \028\000\030\000\030\000\028\000\028\000\255\255\006\000\006\000\
3747 \005\000\004\000\030\000\030\000\001\000\000\000\255\255\255\255\
3748 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\007\000\
3749 \255\255\255\255\255\255\006\000\006\000\006\000\007\000\255\255\
3750 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\014\000\
3751 \014\000\014\000\255\255\255\255\255\255\255\255\255\255\028\000\
3752 \028\000\015\000\255\255\028\000\255\255\255\255\028\000\255\255\
3753 \255\255\255\255\255\255\028\000\028\000\255\255\255\255\255\255\
3754 \255\255\255\255\255\255\255\255\255\255\030\000\021\000\020\000\
3755 \018\000\030\000\018\000\018\000\018\000\018\000\028\000\018\000\
3756 \255\255\019\000\030\000\255\255\255\255\022\000\255\255\255\255\
3757 \255\255\255\255\255\255\022\000\255\255\255\255\255\255\255\255\
3758 \028\000\255\255\028\000\255\255\028\000\028\000\028\000\028\000\
3759 \030\000\030\000\030\000\255\255\255\255\013\000\255\255\255\255\
3760 \014\000\255\255\003\000\014\000\014\000\014\000\255\255\255\255\
3761 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
3762 \255\255\005\000\255\255\255\255\255\255\255\255\255\255\255\255\
3763 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
3764 \255\255\255\255\006\000\255\255\008\000\255\255\255\255\005\000\
3765 \005\000\255\255\001\000\001\000\255\255\255\255\255\255\255\255\
3766 \000\000\001\000\001\000\255\255\255\255\002\000\002\000\255\255\
3767 \255\255\255\255\255\255\255\255\255\255\255\255\003\000\255\255\
3768 \255\255\004\000\004\000\255\255\255\255\255\255\255\255\255\255\
3769 \255\255\255\255\255\255\255\255\002\000\002\000\002\000\255\255\
3770 \255\255\255\255\255\255\255\255\004\000\002\000\255\255\255\255\
3771 \255\255\255\255\255\255\255\255\255\255\255\255";
3772 Lexing.lex_default =
3773 "\001\000\000\000\000\000\255\255\000\000\255\255\255\255\255\255\
3774 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\000\000\
3775 \255\255\255\255\255\255\255\255\049\000\000\000\255\255\255\255\
3776 \255\255\255\255\255\255\255\255\255\255\255\255\000\000\255\255\
3777 \000\000\255\255\000\000\000\000\000\000\000\000\255\255\255\255\
3778 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
3779 \054\000\255\255\255\255\255\255\000\000\000\000\000\000\255\255\
3780 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
3781 \255\255\255\255\000\000\255\255\255\255\255\255\255\255\255\255\
3782 \000\000\000\000\000\000\255\255\255\255\255\255\255\255\255\255\
3783 \255\255\000\000\000\000\000\000\255\255\255\255\255\255\255\255\
3784 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
3785 \255\255\255\255\255\255\103\000\255\255\255\255\000\000\103\000\
3786 \104\000\103\000\106\000\255\255\000\000\255\255\255\255\255\255\
3787 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
3788 \255\255\255\255\255\255\124\000\000\000\255\255\000\000\000\000\
3789 \142\000\000\000\255\255\255\255\255\255\255\255\000\000\000\000\
3790 \000\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
3791 \255\255\255\255\000\000\000\000\000\000\255\255\255\255\255\255\
3792 \000\000\255\255\255\255\000\000\255\255\255\255\000\000\160\000\
3793 \000\000\000\000\255\255\000\000\166\000\000\000\000\000\255\255\
3794 \255\255\000\000\255\255\255\255\255\255\000\000\255\255\000\000\
3795 \255\255\255\255\255\255\255\255\000\000\255\255\255\255\255\255\
3796 \255\255\000\000\255\255\000\000\189\000\000\000\255\255\000\000\
3797 \000\000\255\255\255\255\000\000\255\255\255\255\255\255\255\255\
3798 \000\000\202\000\000\000\000\000\255\255\255\255\255\255\000\000\
3799 \255\255\255\255\211\000\000\000\255\255\255\255\000\000\000\000\
3800 \000\000\000\000\255\255\255\255\255\255\255\255";
3802 "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
3803 \000\000\028\000\030\000\030\000\028\000\029\000\102\000\108\000\
3804 \126\000\163\000\102\000\108\000\191\000\101\000\107\000\214\000\
3805 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
3806 \028\000\003\000\021\000\016\000\004\000\009\000\009\000\020\000\
3807 \019\000\005\000\018\000\003\000\015\000\003\000\014\000\009\000\
3808 \023\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
3809 \022\000\022\000\013\000\012\000\017\000\006\000\007\000\026\000\
3810 \009\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
3811 \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
3812 \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
3813 \024\000\024\000\024\000\011\000\003\000\005\000\009\000\025\000\
3814 \015\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
3815 \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
3816 \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
3817 \025\000\025\000\025\000\010\000\008\000\005\000\027\000\015\000\
3818 \117\000\117\000\053\000\100\000\052\000\028\000\045\000\045\000\
3819 \028\000\115\000\117\000\044\000\044\000\044\000\044\000\044\000\
3820 \044\000\044\000\044\000\053\000\066\000\118\000\135\000\116\000\
3821 \115\000\115\000\100\000\117\000\028\000\046\000\046\000\046\000\
3822 \046\000\046\000\046\000\046\000\046\000\046\000\046\000\134\000\
3823 \148\000\147\000\099\000\099\000\099\000\099\000\099\000\099\000\
3824 \099\000\099\000\099\000\099\000\146\000\138\000\152\000\136\000\
3825 \155\000\117\000\051\000\137\000\158\000\050\000\200\000\000\000\
3826 \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
3827 \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
3828 \024\000\024\000\024\000\024\000\024\000\024\000\024\000\118\000\
3829 \024\000\024\000\024\000\024\000\024\000\024\000\024\000\025\000\
3830 \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
3831 \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
3832 \025\000\025\000\025\000\025\000\025\000\025\000\025\000\208\000\
3833 \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
3834 \002\000\003\000\000\000\203\000\003\000\003\000\003\000\051\000\
3835 \255\255\255\255\003\000\003\000\048\000\003\000\003\000\003\000\
3836 \039\000\039\000\039\000\039\000\039\000\039\000\039\000\039\000\
3837 \039\000\039\000\003\000\144\000\003\000\003\000\003\000\003\000\
3838 \003\000\000\000\096\000\096\000\052\000\038\000\084\000\000\000\
3839 \047\000\000\000\047\000\084\000\096\000\046\000\046\000\046\000\
3840 \046\000\046\000\046\000\046\000\046\000\046\000\046\000\084\000\
3841 \147\000\084\000\084\000\084\000\003\000\096\000\003\000\039\000\
3842 \102\000\000\000\171\000\101\000\003\000\038\000\000\000\003\000\
3843 \009\000\009\000\208\000\000\000\084\000\003\000\003\000\000\000\
3844 \003\000\006\000\009\000\000\000\068\000\000\000\203\000\068\000\
3845 \106\000\171\000\084\000\096\000\003\000\085\000\003\000\006\000\
3846 \006\000\006\000\003\000\009\000\171\000\171\000\000\000\000\000\
3847 \000\000\003\000\000\000\068\000\003\000\121\000\121\000\000\000\
3848 \000\000\084\000\003\000\003\000\074\000\003\000\007\000\121\000\
3849 \000\000\084\000\084\000\171\000\000\000\000\000\000\000\003\000\
3850 \084\000\009\000\120\000\000\000\007\000\007\000\007\000\003\000\
3851 \121\000\197\000\219\000\195\000\217\000\000\000\003\000\196\000\
3852 \218\000\003\000\009\000\009\000\000\000\000\000\005\000\003\000\
3853 \003\000\000\000\003\000\006\000\009\000\000\000\000\000\085\000\
3854 \084\000\003\000\000\000\000\000\003\000\005\000\121\000\085\000\
3855 \000\000\006\000\006\000\006\000\003\000\009\000\191\000\000\000\
3856 \255\255\190\000\000\000\003\000\000\000\000\000\003\000\009\000\
3857 \009\000\000\000\000\000\094\000\003\000\003\000\000\000\003\000\
3858 \009\000\009\000\000\000\000\000\120\000\005\000\003\000\000\000\
3859 \000\000\003\000\005\000\009\000\098\000\000\000\009\000\009\000\
3860 \009\000\003\000\009\000\000\000\000\000\000\000\000\000\000\000\
3861 \214\000\000\000\000\000\213\000\117\000\117\000\000\000\000\000\
3862 \194\000\000\000\193\000\111\000\111\000\115\000\117\000\005\000\
3863 \000\000\085\000\005\000\003\000\109\000\111\000\003\000\094\000\
3864 \009\000\116\000\216\000\116\000\115\000\115\000\000\000\117\000\
3865 \114\000\000\000\109\000\112\000\112\000\000\000\111\000\111\000\
3866 \111\000\000\000\080\000\084\000\000\000\080\000\000\000\000\000\
3867 \112\000\111\000\212\000\000\000\000\000\000\000\098\000\094\000\
3868 \003\000\000\000\000\000\000\000\110\000\117\000\109\000\109\000\
3869 \109\000\080\000\111\000\005\000\111\000\045\000\045\000\000\000\
3870 \000\000\000\000\081\000\003\000\000\000\000\000\003\000\009\000\
3871 \009\000\000\000\000\000\084\000\003\000\003\000\000\000\003\000\
3872 \006\000\009\000\000\000\116\000\000\000\000\000\255\255\084\000\
3873 \111\000\036\000\110\000\005\000\086\000\000\000\088\000\006\000\
3874 \006\000\003\000\087\000\000\000\000\000\000\000\000\000\000\000\
3875 \000\000\000\000\000\000\000\000\045\000\044\000\044\000\044\000\
3876 \044\000\044\000\044\000\044\000\044\000\000\000\110\000\084\000\
3877 \000\000\037\000\000\000\035\000\000\000\000\000\003\000\084\000\
3878 \009\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
3879 \003\000\036\000\000\000\003\000\003\000\003\000\000\000\000\000\
3880 \083\000\003\000\003\000\000\000\003\000\003\000\003\000\060\000\
3881 \000\000\000\000\060\000\000\000\044\000\000\000\085\000\084\000\
3882 \003\000\003\000\000\000\003\000\003\000\003\000\003\000\003\000\
3883 \000\000\037\000\000\000\035\000\000\000\000\000\060\000\061\000\
3884 \000\000\000\000\061\000\064\000\064\000\000\000\000\000\000\000\
3885 \065\000\061\000\000\000\061\000\062\000\064\000\144\000\000\000\
3886 \000\000\143\000\000\000\003\000\192\000\003\000\000\000\000\000\
3887 \063\000\000\000\062\000\062\000\062\000\061\000\064\000\039\000\
3888 \000\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
3889 \022\000\022\000\022\000\145\000\000\000\000\000\000\000\000\000\
3890 \000\000\000\000\000\000\003\000\000\000\003\000\038\000\000\000\
3891 \000\000\000\000\061\000\000\000\064\000\036\000\215\000\000\000\
3892 \039\000\000\000\022\000\022\000\022\000\022\000\022\000\022\000\
3893 \022\000\022\000\022\000\022\000\000\000\000\000\000\000\000\000\
3894 \022\000\000\000\000\000\000\000\040\000\000\000\038\000\038\000\
3895 \000\000\000\000\063\000\000\000\061\000\037\000\036\000\035\000\
3896 \141\000\041\000\000\000\000\000\000\000\000\000\000\000\000\000\
3897 \000\000\000\000\042\000\000\000\000\000\000\000\105\000\102\000\
3898 \000\000\022\000\101\000\000\000\040\000\000\000\000\000\038\000\
3899 \000\000\000\000\000\000\000\000\000\000\000\000\037\000\000\000\
3900 \035\000\041\000\024\000\000\000\000\000\105\000\000\000\104\000\
3901 \000\000\000\000\042\000\024\000\024\000\024\000\024\000\024\000\
3902 \024\000\024\000\024\000\024\000\024\000\000\000\000\000\000\000\
3903 \000\000\000\000\000\000\000\000\024\000\024\000\024\000\024\000\
3904 \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
3905 \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
3906 \024\000\024\000\024\000\024\000\024\000\024\000\000\000\000\000\
3907 \000\000\000\000\024\000\000\000\024\000\024\000\024\000\024\000\
3908 \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
3909 \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
3910 \024\000\024\000\024\000\024\000\024\000\024\000\043\000\043\000\
3911 \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\
3912 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\043\000\
3913 \043\000\043\000\043\000\043\000\043\000\058\000\058\000\058\000\
3914 \058\000\058\000\058\000\058\000\058\000\058\000\058\000\049\000\
3915 \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\
3916 \049\000\000\000\000\000\000\000\255\255\000\000\000\000\043\000\
3917 \043\000\043\000\043\000\043\000\043\000\153\000\153\000\153\000\
3918 \153\000\153\000\153\000\153\000\153\000\153\000\153\000\000\000\
3919 \000\000\000\000\000\000\024\000\024\000\024\000\024\000\024\000\
3920 \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
3921 \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
3922 \024\000\024\000\000\000\024\000\024\000\024\000\024\000\024\000\
3923 \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
3924 \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
3925 \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
3926 \024\000\024\000\025\000\024\000\024\000\024\000\024\000\024\000\
3927 \024\000\024\000\024\000\025\000\025\000\025\000\025\000\025\000\
3928 \025\000\025\000\025\000\025\000\025\000\255\255\000\000\000\000\
3929 \000\000\000\000\000\000\000\000\025\000\025\000\025\000\025\000\
3930 \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
3931 \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
3932 \025\000\025\000\025\000\025\000\025\000\025\000\000\000\000\000\
3933 \000\000\000\000\025\000\000\000\025\000\025\000\025\000\025\000\
3934 \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
3935 \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
3936 \025\000\025\000\025\000\025\000\025\000\025\000\043\000\043\000\
3937 \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\
3938 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\043\000\
3939 \043\000\043\000\043\000\043\000\043\000\000\000\000\000\000\000\
3940 \000\000\000\000\036\000\154\000\154\000\154\000\154\000\154\000\
3941 \154\000\154\000\154\000\154\000\154\000\000\000\000\000\000\000\
3942 \163\000\000\000\000\000\162\000\000\000\043\000\000\000\043\000\
3943 \043\000\043\000\043\000\043\000\043\000\000\000\000\000\000\000\
3944 \000\000\000\000\037\000\000\000\035\000\000\000\000\000\000\000\
3945 \165\000\000\000\000\000\025\000\025\000\025\000\025\000\025\000\
3946 \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
3947 \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
3948 \025\000\025\000\000\000\025\000\025\000\025\000\025\000\025\000\
3949 \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
3950 \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
3951 \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
3952 \025\000\025\000\164\000\025\000\025\000\025\000\025\000\025\000\
3953 \025\000\025\000\025\000\003\000\000\000\000\000\003\000\003\000\
3954 \003\000\000\000\000\000\000\000\003\000\003\000\000\000\003\000\
3955 \003\000\003\000\172\000\172\000\172\000\172\000\172\000\172\000\
3956 \172\000\172\000\172\000\172\000\003\000\000\000\003\000\003\000\
3957 \003\000\003\000\003\000\173\000\173\000\173\000\173\000\173\000\
3958 \173\000\173\000\173\000\173\000\173\000\000\000\046\000\046\000\
3959 \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
3960 \000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\
3961 \003\000\033\000\000\000\033\000\033\000\033\000\033\000\033\000\
3962 \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
3963 \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
3964 \033\000\033\000\033\000\033\000\033\000\046\000\003\000\003\000\
3965 \003\000\000\000\003\000\003\000\003\000\000\000\000\000\000\000\
3966 \003\000\003\000\000\000\003\000\003\000\003\000\000\000\000\000\
3967 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
3968 \003\000\000\000\003\000\003\000\003\000\003\000\003\000\000\000\
3969 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
3970 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
3971 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
3972 \000\000\000\000\003\000\000\000\003\000\031\000\161\000\031\000\
3973 \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
3974 \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
3975 \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
3976 \031\000\000\000\003\000\000\000\003\000\000\000\000\000\000\000\
3977 \000\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
3978 \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
3979 \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
3980 \033\000\100\000\033\000\033\000\033\000\033\000\033\000\033\000\
3981 \033\000\033\000\059\000\059\000\059\000\059\000\059\000\059\000\
3982 \059\000\059\000\059\000\059\000\000\000\000\000\000\000\000\000\
3983 \100\000\000\000\000\000\059\000\059\000\059\000\059\000\059\000\
3984 \059\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
3985 \099\000\099\000\099\000\099\000\099\000\099\000\099\000\099\000\
3986 \099\000\099\000\000\000\000\000\000\000\000\000\000\000\000\000\
3987 \000\000\000\000\000\000\059\000\059\000\059\000\059\000\059\000\
3988 \059\000\000\000\000\000\000\000\000\000\031\000\031\000\031\000\
3989 \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
3990 \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
3991 \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
3992 \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
3993 \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
3994 \032\000\000\000\000\000\000\000\000\000\000\000\000\000\031\000\
3995 \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
3996 \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
3997 \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
3998 \031\000\000\000\000\000\000\000\000\000\031\000\000\000\031\000\
3999 \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
4000 \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
4001 \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
4002 \031\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\
4003 \049\000\049\000\049\000\000\000\000\000\000\000\000\000\000\000\
4004 \000\000\000\000\049\000\049\000\049\000\049\000\049\000\049\000\
4005 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4006 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4007 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4008 \000\000\000\000\049\000\049\000\049\000\049\000\049\000\049\000\
4009 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4010 \000\000\000\000\000\000\000\000\000\000\000\000\031\000\031\000\
4011 \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
4012 \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
4013 \031\000\031\000\031\000\031\000\031\000\000\000\031\000\031\000\
4014 \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
4015 \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
4016 \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
4017 \031\000\031\000\031\000\031\000\031\000\033\000\031\000\031\000\
4018 \031\000\031\000\031\000\031\000\031\000\031\000\033\000\033\000\
4019 \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
4020 \034\000\000\000\000\000\000\000\000\000\000\000\000\000\033\000\
4021 \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
4022 \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
4023 \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
4024 \033\000\000\000\000\000\000\000\000\000\033\000\000\000\033\000\
4025 \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
4026 \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
4027 \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
4028 \033\000\000\000\000\000\000\000\105\000\102\000\000\000\000\000\
4029 \101\000\000\000\000\000\000\000\000\000\156\000\156\000\156\000\
4030 \156\000\156\000\156\000\156\000\156\000\156\000\156\000\000\000\
4031 \000\000\000\000\000\000\105\000\000\000\104\000\156\000\156\000\
4032 \156\000\156\000\156\000\156\000\000\000\000\000\000\000\000\000\
4033 \000\000\000\000\000\000\099\000\099\000\099\000\099\000\099\000\
4034 \099\000\099\000\099\000\099\000\099\000\000\000\000\000\000\000\
4035 \000\000\000\000\000\000\000\000\000\000\000\000\156\000\156\000\
4036 \156\000\156\000\156\000\156\000\000\000\000\000\033\000\033\000\
4037 \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
4038 \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
4039 \033\000\033\000\033\000\033\000\033\000\000\000\033\000\033\000\
4040 \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
4041 \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
4042 \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
4043 \033\000\033\000\033\000\033\000\033\000\000\000\033\000\033\000\
4044 \033\000\033\000\033\000\033\000\033\000\033\000\057\000\000\000\
4045 \057\000\000\000\000\000\000\000\000\000\057\000\000\000\000\000\
4046 \060\000\000\000\000\000\060\000\000\000\000\000\056\000\056\000\
4047 \056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\
4048 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\060\000\
4049 \078\000\000\000\000\000\078\000\078\000\078\000\000\000\000\000\
4050 \000\000\079\000\078\000\000\000\078\000\078\000\078\000\000\000\
4051 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4052 \000\000\078\000\057\000\078\000\078\000\078\000\078\000\078\000\
4053 \057\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4054 \000\000\000\000\000\000\068\000\057\000\000\000\068\000\000\000\
4055 \057\000\000\000\057\000\000\000\000\000\000\000\055\000\000\000\
4056 \000\000\000\000\000\000\078\000\000\000\078\000\000\000\000\000\
4057 \000\000\000\000\068\000\069\000\000\000\000\000\069\000\069\000\
4058 \069\000\000\000\000\000\072\000\071\000\069\000\000\000\069\000\
4059 \069\000\069\000\068\000\255\255\000\000\068\000\000\000\000\000\
4060 \000\000\000\000\000\000\078\000\069\000\078\000\069\000\069\000\
4061 \069\000\069\000\069\000\000\000\000\000\000\000\000\000\000\000\
4062 \000\000\068\000\069\000\000\000\000\000\069\000\070\000\070\000\
4063 \000\000\000\000\072\000\071\000\069\000\000\000\069\000\077\000\
4064 \070\000\000\000\000\000\000\000\000\000\000\000\069\000\000\000\
4065 \069\000\000\000\000\000\077\000\000\000\077\000\077\000\077\000\
4066 \069\000\070\000\000\000\000\000\000\000\000\000\000\000\000\000\
4067 \000\000\000\000\000\000\000\000\000\000\068\000\000\000\000\000\
4068 \068\000\000\000\000\000\000\000\000\000\000\000\069\000\000\000\
4069 \069\000\000\000\000\000\000\000\000\000\069\000\000\000\070\000\
4070 \000\000\000\000\000\000\000\000\068\000\069\000\000\000\000\000\
4071 \069\000\076\000\076\000\000\000\000\000\072\000\071\000\069\000\
4072 \000\000\069\000\075\000\076\000\068\000\000\000\255\255\068\000\
4073 \000\000\000\000\000\000\000\000\000\000\077\000\075\000\069\000\
4074 \075\000\075\000\075\000\069\000\076\000\000\000\000\000\000\000\
4075 \000\000\000\000\000\000\068\000\069\000\000\000\000\000\069\000\
4076 \070\000\070\000\000\000\067\000\072\000\071\000\069\000\000\000\
4077 \069\000\070\000\070\000\000\000\000\000\000\000\000\000\000\000\
4078 \069\000\000\000\076\000\067\000\067\000\070\000\067\000\070\000\
4079 \070\000\070\000\069\000\070\000\067\000\067\000\000\000\000\000\
4080 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4081 \067\000\000\000\067\000\067\000\067\000\000\000\067\000\000\000\
4082 \075\000\000\000\069\000\000\000\000\000\000\000\067\000\069\000\
4083 \000\000\070\000\000\000\000\000\000\000\000\000\000\000\000\000\
4084 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4085 \000\000\067\000\000\000\068\000\067\000\000\000\068\000\000\000\
4086 \000\000\000\000\000\000\000\000\000\000\000\000\067\000\070\000\
4087 \000\000\069\000\000\000\000\000\000\000\000\000\000\000\000\000\
4088 \000\000\000\000\068\000\069\000\000\000\000\000\069\000\069\000\
4089 \069\000\067\000\067\000\073\000\071\000\069\000\000\000\069\000\
4090 \069\000\069\000\068\000\000\000\000\000\068\000\000\000\000\000\
4091 \000\000\000\000\000\000\000\000\069\000\000\000\069\000\069\000\
4092 \069\000\069\000\069\000\000\000\000\000\000\000\000\000\000\000\
4093 \000\000\068\000\069\000\000\000\000\000\069\000\070\000\070\000\
4094 \000\000\067\000\073\000\071\000\069\000\000\000\069\000\070\000\
4095 \070\000\000\000\000\000\000\000\000\000\000\000\069\000\000\000\
4096 \069\000\000\000\000\000\070\000\000\000\070\000\070\000\070\000\
4097 \069\000\070\000\000\000\000\000\000\000\000\000\000\000\000\000\
4098 \000\000\000\000\000\000\000\000\000\000\068\000\000\000\000\000\
4099 \068\000\000\000\000\000\000\000\000\000\000\000\069\000\000\000\
4100 \069\000\000\000\000\000\000\000\067\000\069\000\000\000\070\000\
4101 \000\000\000\000\000\000\000\000\068\000\069\000\000\000\000\000\
4102 \069\000\069\000\069\000\000\000\000\000\000\000\071\000\069\000\
4103 \000\000\069\000\069\000\069\000\068\000\000\000\000\000\068\000\
4104 \000\000\000\000\000\000\000\000\067\000\070\000\069\000\069\000\
4105 \069\000\069\000\069\000\069\000\069\000\000\000\000\000\000\000\
4106 \000\000\000\000\000\000\068\000\069\000\000\000\000\000\069\000\
4107 \076\000\076\000\000\000\000\000\073\000\071\000\069\000\000\000\
4108 \069\000\075\000\076\000\000\000\000\000\000\000\000\000\000\000\
4109 \069\000\000\000\069\000\000\000\000\000\075\000\000\000\075\000\
4110 \075\000\075\000\069\000\076\000\000\000\000\000\000\000\000\000\
4111 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\068\000\
4112 \000\000\000\000\068\000\000\000\000\000\000\000\000\000\000\000\
4113 \069\000\000\000\069\000\000\000\000\000\000\000\000\000\069\000\
4114 \000\000\076\000\000\000\000\000\000\000\000\000\068\000\069\000\
4115 \000\000\000\000\069\000\076\000\076\000\000\000\067\000\073\000\
4116 \071\000\069\000\000\000\069\000\076\000\076\000\068\000\000\000\
4117 \000\000\068\000\000\000\000\000\000\000\000\000\000\000\075\000\
4118 \076\000\069\000\076\000\076\000\076\000\069\000\076\000\000\000\
4119 \000\000\000\000\000\000\000\000\000\000\068\000\069\000\000\000\
4120 \000\000\069\000\070\000\070\000\000\000\000\000\073\000\071\000\
4121 \069\000\000\000\069\000\077\000\070\000\000\000\000\000\000\000\
4122 \000\000\067\000\069\000\000\000\076\000\000\000\000\000\077\000\
4123 \000\000\077\000\077\000\077\000\069\000\070\000\000\000\000\000\
4124 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4125 \000\000\080\000\000\000\000\000\080\000\000\000\000\000\000\000\
4126 \000\000\067\000\076\000\000\000\069\000\000\000\000\000\000\000\
4127 \000\000\069\000\000\000\070\000\000\000\000\000\000\000\000\000\
4128 \080\000\078\000\000\000\000\000\078\000\078\000\078\000\000\000\
4129 \000\000\082\000\079\000\078\000\000\000\078\000\078\000\078\000\
4130 \080\000\000\000\000\000\080\000\000\000\000\000\000\000\000\000\
4131 \000\000\077\000\078\000\069\000\078\000\078\000\078\000\078\000\
4132 \078\000\000\000\000\000\000\000\000\000\000\000\000\000\080\000\
4133 \078\000\000\000\000\000\078\000\078\000\078\000\000\000\000\000\
4134 \000\000\079\000\078\000\000\000\078\000\078\000\078\000\000\000\
4135 \000\000\000\000\000\000\000\000\078\000\000\000\078\000\000\000\
4136 \000\000\078\000\000\000\078\000\078\000\078\000\078\000\078\000\
4137 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\096\000\
4138 \096\000\000\000\000\000\084\000\000\000\000\000\000\000\000\000\
4139 \084\000\096\000\000\000\000\000\078\000\000\000\078\000\000\000\
4140 \000\000\000\000\000\000\078\000\084\000\078\000\084\000\084\000\
4141 \084\000\000\000\096\000\000\000\000\000\000\000\000\000\000\000\
4142 \003\000\000\000\000\000\003\000\009\000\009\000\000\000\000\000\
4143 \005\000\003\000\003\000\000\000\003\000\006\000\009\000\000\000\
4144 \000\000\000\000\000\000\078\000\000\000\078\000\000\000\084\000\
4145 \096\000\085\000\000\000\006\000\006\000\006\000\003\000\009\000\
4146 \000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\
4147 \003\000\009\000\009\000\000\000\000\000\005\000\003\000\003\000\
4148 \000\000\003\000\006\000\009\000\000\000\000\000\084\000\084\000\
4149 \000\000\000\000\000\000\003\000\084\000\009\000\085\000\000\000\
4150 \006\000\006\000\006\000\003\000\009\000\000\000\000\000\000\000\
4151 \000\000\000\000\003\000\000\000\000\000\003\000\009\000\009\000\
4152 \000\000\000\000\094\000\003\000\003\000\000\000\003\000\009\000\
4153 \009\000\000\000\000\000\085\000\005\000\003\000\000\000\000\000\
4154 \003\000\084\000\009\000\098\000\000\000\009\000\009\000\009\000\
4155 \003\000\009\000\000\000\000\000\000\000\000\000\000\000\090\000\
4156 \000\000\000\000\003\000\093\000\093\000\000\000\000\000\084\000\
4157 \090\000\090\000\000\000\090\000\091\000\093\000\000\000\000\000\
4158 \085\000\005\000\003\000\000\000\000\000\003\000\094\000\009\000\
4159 \092\000\000\000\006\000\091\000\089\000\090\000\093\000\000\000\
4160 \000\000\000\000\000\000\000\000\003\000\000\000\000\000\003\000\
4161 \009\000\009\000\000\000\000\000\084\000\003\000\003\000\000\000\
4162 \003\000\006\000\009\000\000\000\000\000\098\000\094\000\003\000\
4163 \000\000\000\000\090\000\084\000\093\000\085\000\000\000\006\000\
4164 \006\000\097\000\003\000\009\000\000\000\000\000\000\000\000\000\
4165 \000\000\090\000\000\000\000\000\003\000\090\000\090\000\000\000\
4166 \000\000\000\000\090\000\090\000\000\000\090\000\090\000\090\000\
4167 \000\000\000\000\092\000\084\000\090\000\000\000\000\000\003\000\
4168 \084\000\009\000\090\000\000\000\003\000\090\000\003\000\090\000\
4169 \090\000\000\000\000\000\000\000\090\000\000\000\000\000\003\000\
4170 \093\000\093\000\000\000\000\000\084\000\090\000\090\000\000\000\
4171 \090\000\091\000\093\000\000\000\000\000\000\000\000\000\085\000\
4172 \084\000\003\000\000\000\000\000\090\000\092\000\090\000\006\000\
4173 \091\000\006\000\090\000\093\000\000\000\000\000\000\000\000\000\
4174 \000\000\090\000\000\000\000\000\003\000\093\000\093\000\000\000\
4175 \000\000\005\000\090\000\090\000\000\000\090\000\091\000\093\000\
4176 \000\000\000\000\000\000\000\000\090\000\000\000\090\000\090\000\
4177 \084\000\093\000\092\000\000\000\006\000\091\000\006\000\090\000\
4178 \093\000\000\000\000\000\000\000\000\000\000\000\090\000\000\000\
4179 \000\000\003\000\093\000\093\000\000\000\000\000\094\000\090\000\
4180 \090\000\000\000\090\000\093\000\093\000\000\000\000\000\092\000\
4181 \084\000\090\000\000\000\000\000\090\000\084\000\093\000\095\000\
4182 \000\000\009\000\093\000\009\000\090\000\093\000\000\000\000\000\
4183 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\096\000\
4184 \096\000\000\000\000\000\094\000\000\000\000\000\000\000\000\000\
4185 \096\000\096\000\000\000\000\000\092\000\005\000\090\000\000\000\
4186 \000\000\090\000\094\000\093\000\096\000\000\000\096\000\096\000\
4187 \096\000\000\000\096\000\000\000\000\000\000\000\000\000\000\000\
4188 \090\000\000\000\000\000\003\000\093\000\093\000\000\000\000\000\
4189 \094\000\090\000\090\000\000\000\090\000\093\000\093\000\000\000\
4190 \000\000\095\000\094\000\090\000\000\000\000\000\000\000\094\000\
4191 \096\000\095\000\000\000\009\000\093\000\009\000\090\000\093\000\
4192 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4193 \000\000\096\000\096\000\000\000\000\000\094\000\000\000\000\000\
4194 \000\000\000\000\096\000\096\000\000\000\000\000\096\000\094\000\
4195 \000\000\000\000\000\000\090\000\094\000\093\000\096\000\000\000\
4196 \096\000\096\000\096\000\000\000\096\000\000\000\000\000\000\000\
4197 \000\000\000\000\003\000\000\000\000\000\003\000\009\000\009\000\
4198 \000\000\000\000\084\000\003\000\003\000\000\000\003\000\006\000\
4199 \009\000\000\000\000\000\095\000\094\000\090\000\000\000\000\000\
4200 \000\000\094\000\096\000\085\000\000\000\006\000\006\000\006\000\
4201 \003\000\009\000\000\000\000\000\000\000\000\000\000\000\003\000\
4202 \000\000\000\000\003\000\009\000\009\000\000\000\000\000\094\000\
4203 \003\000\003\000\000\000\003\000\009\000\009\000\000\000\000\000\
4204 \096\000\094\000\000\000\000\000\000\000\003\000\084\000\009\000\
4205 \098\000\000\000\009\000\009\000\009\000\003\000\009\000\000\000\
4206 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4207 \111\000\111\000\000\000\000\000\084\000\000\000\000\000\111\000\
4208 \111\000\109\000\111\000\005\000\000\000\085\000\084\000\003\000\
4209 \109\000\111\000\003\000\094\000\009\000\110\000\000\000\109\000\
4210 \109\000\109\000\000\000\111\000\110\000\000\000\109\000\109\000\
4211 \109\000\000\000\111\000\000\000\000\000\000\000\000\000\000\000\
4212 \000\000\000\000\000\000\000\000\111\000\111\000\000\000\000\000\
4213 \094\000\000\000\098\000\094\000\003\000\111\000\111\000\000\000\
4214 \084\000\111\000\000\000\000\000\000\000\000\000\000\000\084\000\
4215 \111\000\113\000\000\000\111\000\111\000\111\000\000\000\111\000\
4216 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4217 \000\000\111\000\111\000\000\000\000\000\084\000\000\000\110\000\
4218 \084\000\000\000\109\000\111\000\000\000\000\000\110\000\005\000\
4219 \000\000\000\000\000\000\000\000\094\000\111\000\110\000\000\000\
4220 \109\000\109\000\109\000\000\000\111\000\000\000\000\000\000\000\
4221 \000\000\000\000\000\000\000\000\000\000\000\000\111\000\111\000\
4222 \000\000\000\000\094\000\000\000\000\000\111\000\111\000\111\000\
4223 \111\000\005\000\000\000\113\000\094\000\000\000\109\000\111\000\
4224 \000\000\084\000\111\000\113\000\000\000\111\000\111\000\111\000\
4225 \000\000\111\000\110\000\000\000\109\000\109\000\109\000\000\000\
4226 \111\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4227 \000\000\000\000\117\000\117\000\000\000\000\000\000\000\000\000\
4228 \110\000\084\000\000\000\115\000\117\000\000\000\094\000\111\000\
4229 \000\000\000\000\000\000\000\000\000\000\084\000\111\000\115\000\
4230 \000\000\116\000\115\000\115\000\000\000\117\000\000\000\000\000\
4231 \000\000\117\000\117\000\000\000\000\000\000\000\000\000\000\000\
4232 \000\000\000\000\115\000\117\000\000\000\113\000\094\000\000\000\
4233 \000\000\000\000\000\000\000\000\110\000\005\000\115\000\000\000\
4234 \116\000\115\000\115\000\117\000\117\000\117\000\117\000\000\000\
4235 \067\000\000\000\000\000\000\000\000\000\000\000\117\000\117\000\
4236 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4237 \000\000\000\000\117\000\000\000\117\000\117\000\117\000\000\000\
4238 \117\000\115\000\117\000\000\000\000\000\000\000\000\000\000\000\
4239 \000\000\000\000\119\000\119\000\000\000\000\000\000\000\119\000\
4240 \119\000\000\000\067\000\118\000\119\000\000\000\000\000\000\000\
4241 \119\000\119\000\000\000\067\000\000\000\000\000\117\000\118\000\
4242 \115\000\118\000\118\000\118\000\119\000\119\000\119\000\119\000\
4243 \119\000\000\000\119\000\000\000\000\000\000\000\000\000\000\000\
4244 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4245 \000\000\000\000\000\000\067\000\117\000\000\000\000\000\000\000\
4246 \000\000\000\000\000\000\119\000\000\000\067\000\000\000\000\000\
4247 \119\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\
4248 \000\000\003\000\121\000\121\000\000\000\000\000\005\000\003\000\
4249 \003\000\000\000\003\000\007\000\121\000\000\000\000\000\000\000\
4250 \000\000\118\000\000\000\000\000\000\000\067\000\119\000\120\000\
4251 \000\000\007\000\007\000\007\000\003\000\121\000\000\000\000\000\
4252 \000\000\000\000\000\000\003\000\000\000\000\000\003\000\121\000\
4253 \121\000\000\000\000\000\094\000\003\000\003\000\000\000\003\000\
4254 \121\000\121\000\000\000\000\000\000\000\000\000\000\000\000\000\
4255 \000\000\003\000\005\000\121\000\122\000\000\000\121\000\121\000\
4256 \121\000\003\000\121\000\000\000\000\000\000\000\000\000\000\000\
4257 \003\000\000\000\000\000\003\000\121\000\121\000\000\000\000\000\
4258 \094\000\003\000\003\000\000\000\003\000\121\000\121\000\000\000\
4259 \000\000\120\000\005\000\003\000\000\000\000\000\003\000\094\000\
4260 \121\000\122\000\000\000\121\000\121\000\121\000\003\000\121\000\
4261 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\126\000\
4262 \000\000\000\000\125\000\000\000\000\000\000\000\000\000\000\000\
4263 \000\000\000\000\000\000\000\000\000\000\000\000\122\000\094\000\
4264 \003\000\000\000\000\000\003\000\094\000\121\000\000\000\129\000\
4265 \000\000\000\000\000\000\000\000\128\000\133\000\000\000\132\000\
4266 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4267 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4268 \000\000\131\000\000\000\122\000\094\000\003\000\130\000\130\000\
4269 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
4270 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
4271 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
4272 \000\000\000\000\000\000\000\000\130\000\000\000\130\000\130\000\
4273 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
4274 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
4275 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
4276 \157\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\
4277 \157\000\157\000\000\000\000\000\000\000\000\000\000\000\000\000\
4278 \000\000\157\000\157\000\157\000\157\000\157\000\157\000\000\000\
4279 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4280 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4281 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4282 \000\000\157\000\157\000\157\000\157\000\157\000\157\000\000\000\
4283 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4284 \000\000\000\000\000\000\000\000\000\000\130\000\130\000\130\000\
4285 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
4286 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
4287 \130\000\130\000\130\000\130\000\000\000\130\000\130\000\130\000\
4288 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
4289 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
4290 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
4291 \130\000\130\000\130\000\130\000\000\000\130\000\130\000\130\000\
4292 \130\000\130\000\130\000\130\000\130\000\127\000\130\000\000\000\
4293 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\130\000\
4294 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
4295 \130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4296 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
4297 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
4298 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
4299 \130\000\130\000\000\000\000\000\000\000\000\000\130\000\000\000\
4300 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
4301 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
4302 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
4303 \130\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\
4304 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
4305 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
4306 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
4307 \140\000\140\000\000\000\000\000\000\000\000\000\140\000\000\000\
4308 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
4309 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
4310 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
4311 \140\000\140\000\000\000\000\000\000\000\000\000\000\000\130\000\
4312 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
4313 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
4314 \130\000\130\000\130\000\130\000\130\000\130\000\000\000\130\000\
4315 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
4316 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
4317 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
4318 \130\000\130\000\130\000\130\000\130\000\130\000\000\000\130\000\
4319 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\140\000\
4320 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
4321 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
4322 \140\000\140\000\140\000\140\000\140\000\140\000\000\000\140\000\
4323 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
4324 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
4325 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
4326 \140\000\140\000\140\000\140\000\140\000\140\000\000\000\140\000\
4327 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\139\000\
4328 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
4329 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
4330 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
4331 \139\000\000\000\000\000\000\000\000\000\139\000\000\000\139\000\
4332 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
4333 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
4334 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
4335 \139\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
4336 \174\000\174\000\174\000\000\000\000\000\000\000\000\000\000\000\
4337 \000\000\000\000\174\000\174\000\174\000\174\000\174\000\174\000\
4338 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4339 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4340 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4341 \000\000\000\000\174\000\174\000\174\000\174\000\174\000\174\000\
4342 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4343 \000\000\000\000\000\000\000\000\000\000\000\000\139\000\139\000\
4344 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
4345 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
4346 \139\000\139\000\139\000\139\000\139\000\000\000\139\000\139\000\
4347 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
4348 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
4349 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
4350 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
4351 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
4352 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
4353 \000\000\000\000\136\000\000\000\000\000\000\000\137\000\139\000\
4354 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
4355 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
4356 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
4357 \139\000\000\000\000\000\000\000\000\000\139\000\000\000\139\000\
4358 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
4359 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
4360 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
4361 \139\000\175\000\175\000\175\000\175\000\175\000\175\000\175\000\
4362 \175\000\175\000\175\000\000\000\000\000\000\000\000\000\000\000\
4363 \000\000\000\000\175\000\175\000\175\000\175\000\175\000\175\000\
4364 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4365 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4366 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4367 \000\000\000\000\175\000\175\000\175\000\175\000\175\000\175\000\
4368 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4369 \000\000\000\000\000\000\000\000\000\000\000\000\139\000\139\000\
4370 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
4371 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
4372 \139\000\139\000\139\000\139\000\139\000\000\000\139\000\139\000\
4373 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
4374 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
4375 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
4376 \139\000\139\000\139\000\139\000\139\000\140\000\139\000\139\000\
4377 \139\000\139\000\139\000\139\000\139\000\139\000\140\000\140\000\
4378 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
4379 \000\000\000\000\136\000\000\000\000\000\000\000\000\000\140\000\
4380 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
4381 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
4382 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
4383 \140\000\000\000\000\000\000\000\000\000\140\000\000\000\140\000\
4384 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
4385 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
4386 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
4387 \140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4388 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4389 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4390 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4391 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4392 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4393 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4394 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4395 \000\000\000\000\000\000\000\000\000\000\000\000\140\000\140\000\
4396 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
4397 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
4398 \140\000\140\000\140\000\140\000\140\000\000\000\140\000\140\000\
4399 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
4400 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
4401 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
4402 \140\000\140\000\140\000\140\000\140\000\000\000\140\000\140\000\
4403 \140\000\140\000\140\000\140\000\140\000\140\000\151\000\000\000\
4404 \151\000\000\000\000\000\171\000\000\000\151\000\170\000\000\000\
4405 \000\000\000\000\000\000\000\000\000\000\000\000\150\000\150\000\
4406 \150\000\150\000\150\000\150\000\150\000\150\000\150\000\150\000\
4407 \000\000\169\000\000\000\169\000\000\000\000\000\000\000\000\000\
4408 \169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4409 \000\000\168\000\168\000\168\000\168\000\168\000\168\000\168\000\
4410 \168\000\168\000\168\000\000\000\000\000\000\000\000\000\000\000\
4411 \000\000\000\000\151\000\000\000\000\000\000\000\000\000\000\000\
4412 \151\000\176\000\000\000\000\000\176\000\176\000\176\000\000\000\
4413 \000\000\000\000\176\000\176\000\151\000\176\000\176\000\176\000\
4414 \151\000\000\000\151\000\000\000\000\000\169\000\149\000\000\000\
4415 \000\000\000\000\176\000\169\000\176\000\176\000\176\000\176\000\
4416 \176\000\000\000\000\000\000\000\000\000\000\000\000\000\169\000\
4417 \000\000\000\000\000\000\169\000\000\000\169\000\000\000\000\000\
4418 \000\000\167\000\000\000\000\000\000\000\000\000\000\000\000\000\
4419 \000\000\000\000\000\000\000\000\176\000\000\000\176\000\000\000\
4420 \000\000\000\000\000\000\000\000\178\000\000\000\000\000\178\000\
4421 \178\000\178\000\000\000\000\000\000\000\178\000\178\000\000\000\
4422 \178\000\178\000\178\000\000\000\000\000\000\000\000\000\000\000\
4423 \000\000\000\000\000\000\000\000\176\000\178\000\176\000\178\000\
4424 \178\000\178\000\178\000\178\000\179\000\179\000\179\000\179\000\
4425 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
4426 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
4427 \179\000\179\000\179\000\179\000\179\000\179\000\000\000\178\000\
4428 \000\000\178\000\179\000\000\000\179\000\179\000\179\000\179\000\
4429 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
4430 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
4431 \179\000\179\000\179\000\179\000\179\000\179\000\000\000\178\000\
4432 \000\000\178\000\000\000\000\000\000\000\000\000\000\000\000\000\
4433 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4434 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4435 \000\000\255\255\000\000\000\000\000\000\000\000\000\000\000\000\
4436 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4437 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4438 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4439 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4440 \000\000\000\000\000\000\179\000\179\000\179\000\179\000\179\000\
4441 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
4442 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
4443 \179\000\179\000\000\000\179\000\179\000\179\000\179\000\179\000\
4444 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
4445 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
4446 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
4447 \179\000\179\000\000\000\179\000\179\000\179\000\179\000\179\000\
4448 \179\000\179\000\179\000\178\000\000\000\000\000\178\000\178\000\
4449 \178\000\000\000\000\000\000\000\178\000\178\000\000\000\178\000\
4450 \178\000\178\000\000\000\000\000\000\000\000\000\000\000\000\000\
4451 \000\000\000\000\000\000\000\000\178\000\000\000\178\000\178\000\
4452 \178\000\178\000\178\000\000\000\000\000\000\000\000\000\179\000\
4453 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4454 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
4455 \179\000\179\000\000\000\000\000\180\000\000\000\178\000\000\000\
4456 \178\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
4457 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
4458 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
4459 \179\000\179\000\179\000\000\000\000\000\000\000\178\000\179\000\
4460 \178\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
4461 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
4462 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
4463 \179\000\179\000\179\000\000\000\000\000\000\000\000\000\000\000\
4464 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4465 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4466 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4467 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4468 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4469 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4470 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4471 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4472 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
4473 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
4474 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\000\000\
4475 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
4476 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
4477 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
4478 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\000\000\
4479 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
4480 \182\000\000\000\000\000\182\000\182\000\182\000\000\000\000\000\
4481 \000\000\182\000\182\000\000\000\182\000\182\000\182\000\000\000\
4482 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4483 \000\000\182\000\000\000\182\000\182\000\182\000\182\000\182\000\
4484 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
4485 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
4486 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
4487 \183\000\183\000\000\000\182\000\000\000\182\000\183\000\000\000\
4488 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
4489 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
4490 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
4491 \183\000\183\000\000\000\182\000\000\000\182\000\000\000\000\000\
4492 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4493 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4494 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4495 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4496 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4497 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4498 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4499 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\183\000\
4500 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
4501 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
4502 \183\000\183\000\183\000\183\000\183\000\183\000\000\000\183\000\
4503 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
4504 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
4505 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
4506 \183\000\183\000\183\000\183\000\183\000\183\000\000\000\183\000\
4507 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\182\000\
4508 \000\000\000\000\182\000\182\000\182\000\000\000\000\000\000\000\
4509 \182\000\182\000\000\000\182\000\182\000\182\000\000\000\000\000\
4510 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4511 \182\000\000\000\182\000\182\000\182\000\182\000\182\000\000\000\
4512 \000\000\000\000\000\000\000\000\000\000\000\000\183\000\000\000\
4513 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\183\000\
4514 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
4515 \183\000\000\000\182\000\185\000\182\000\000\000\000\000\184\000\
4516 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
4517 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
4518 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
4519 \183\000\183\000\182\000\000\000\182\000\000\000\183\000\000\000\
4520 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
4521 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
4522 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
4523 \183\000\183\000\000\000\000\000\000\000\000\000\000\000\000\000\
4524 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
4525 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
4526 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
4527 \186\000\186\000\000\000\000\000\000\000\000\000\186\000\000\000\
4528 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
4529 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
4530 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
4531 \186\000\186\000\000\000\000\000\000\000\000\000\000\000\183\000\
4532 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
4533 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
4534 \183\000\183\000\183\000\183\000\183\000\183\000\000\000\183\000\
4535 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
4536 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
4537 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
4538 \183\000\183\000\183\000\183\000\183\000\183\000\000\000\183\000\
4539 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\186\000\
4540 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
4541 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
4542 \186\000\186\000\186\000\186\000\186\000\186\000\000\000\186\000\
4543 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
4544 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
4545 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
4546 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
4547 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
4548 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
4549 \186\000\000\000\000\000\187\000\000\000\000\000\000\000\000\000\
4550 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
4551 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
4552 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
4553 \186\000\186\000\000\000\000\000\000\000\000\000\186\000\000\000\
4554 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
4555 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
4556 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
4557 \186\000\186\000\000\000\000\000\000\000\000\000\000\000\000\000\
4558 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
4559 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
4560 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
4561 \199\000\199\000\000\000\000\000\000\000\000\000\199\000\000\000\
4562 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
4563 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
4564 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
4565 \199\000\199\000\000\000\000\000\000\000\000\000\000\000\186\000\
4566 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
4567 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
4568 \186\000\186\000\186\000\186\000\186\000\186\000\000\000\186\000\
4569 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
4570 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
4571 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
4572 \186\000\186\000\186\000\186\000\186\000\186\000\000\000\186\000\
4573 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\199\000\
4574 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
4575 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
4576 \199\000\199\000\199\000\199\000\199\000\199\000\000\000\199\000\
4577 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
4578 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
4579 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
4580 \199\000\199\000\199\000\199\000\199\000\199\000\000\000\199\000\
4581 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\198\000\
4582 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
4583 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
4584 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
4585 \198\000\000\000\000\000\000\000\000\000\198\000\000\000\198\000\
4586 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
4587 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
4588 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
4589 \198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4590 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4591 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4592 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4593 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4594 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4595 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4596 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4597 \000\000\000\000\000\000\000\000\000\000\000\000\198\000\198\000\
4598 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
4599 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
4600 \198\000\198\000\198\000\198\000\198\000\000\000\198\000\198\000\
4601 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
4602 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
4603 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
4604 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
4605 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
4606 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
4607 \000\000\000\000\195\000\000\000\000\000\000\000\196\000\198\000\
4608 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
4609 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
4610 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
4611 \198\000\000\000\000\000\000\000\000\000\198\000\000\000\198\000\
4612 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
4613 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
4614 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
4615 \198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4616 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4617 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4618 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4619 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4620 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4621 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4622 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4623 \000\000\000\000\000\000\000\000\000\000\000\000\198\000\198\000\
4624 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
4625 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
4626 \198\000\198\000\198\000\198\000\198\000\000\000\198\000\198\000\
4627 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
4628 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
4629 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
4630 \198\000\198\000\198\000\198\000\198\000\199\000\198\000\198\000\
4631 \198\000\198\000\198\000\198\000\198\000\198\000\199\000\199\000\
4632 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
4633 \000\000\000\000\195\000\000\000\000\000\000\000\000\000\199\000\
4634 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
4635 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
4636 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
4637 \199\000\000\000\000\000\000\000\000\000\199\000\000\000\199\000\
4638 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
4639 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
4640 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
4641 \199\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4642 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4643 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4644 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4645 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4646 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4647 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4648 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4649 \000\000\000\000\000\000\000\000\000\000\000\000\199\000\199\000\
4650 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
4651 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
4652 \199\000\199\000\199\000\199\000\199\000\000\000\199\000\199\000\
4653 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
4654 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
4655 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
4656 \199\000\199\000\199\000\199\000\199\000\000\000\199\000\199\000\
4657 \199\000\199\000\199\000\199\000\199\000\199\000\207\000\000\000\
4658 \000\000\205\000\000\000\000\000\000\000\000\000\000\000\000\000\
4659 \204\000\000\000\205\000\205\000\205\000\205\000\205\000\205\000\
4660 \205\000\205\000\205\000\205\000\203\000\000\000\000\000\000\000\
4661 \000\000\000\000\000\000\205\000\205\000\205\000\205\000\205\000\
4662 \205\000\205\000\205\000\205\000\205\000\205\000\205\000\205\000\
4663 \205\000\205\000\205\000\205\000\205\000\205\000\205\000\205\000\
4664 \205\000\205\000\205\000\205\000\205\000\000\000\000\000\000\000\
4665 \000\000\205\000\206\000\205\000\205\000\205\000\205\000\205\000\
4666 \205\000\205\000\205\000\205\000\205\000\205\000\205\000\205\000\
4667 \205\000\205\000\205\000\205\000\205\000\205\000\205\000\205\000\
4668 \205\000\205\000\205\000\205\000\205\000\000\000\000\000\000\000\
4669 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4670 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4671 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4672 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4673 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4674 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4675 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4676 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4677 \000\000\000\000\205\000\205\000\205\000\205\000\205\000\205\000\
4678 \205\000\205\000\205\000\205\000\205\000\205\000\205\000\205\000\
4679 \205\000\205\000\205\000\205\000\205\000\205\000\205\000\205\000\
4680 \205\000\000\000\205\000\205\000\205\000\205\000\205\000\205\000\
4681 \205\000\205\000\205\000\205\000\205\000\205\000\205\000\205\000\
4682 \205\000\205\000\205\000\205\000\205\000\205\000\205\000\205\000\
4683 \205\000\205\000\205\000\205\000\205\000\205\000\205\000\205\000\
4684 \205\000\000\000\205\000\205\000\205\000\205\000\205\000\205\000\
4685 \205\000\205\000\255\255\209\000\000\000\000\000\000\000\000\000\
4686 \000\000\000\000\000\000\000\000\209\000\209\000\209\000\209\000\
4687 \209\000\209\000\209\000\209\000\209\000\209\000\203\000\000\000\
4688 \000\000\000\000\000\000\000\000\000\000\209\000\209\000\209\000\
4689 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4690 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4691 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\000\000\
4692 \000\000\000\000\000\000\209\000\000\000\209\000\209\000\209\000\
4693 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4694 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4695 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\000\000\
4696 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4697 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4698 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4699 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4700 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4701 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4702 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4703 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4704 \000\000\000\000\000\000\000\000\209\000\209\000\209\000\209\000\
4705 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4706 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4707 \209\000\209\000\209\000\000\000\209\000\209\000\209\000\209\000\
4708 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4709 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4710 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4711 \209\000\209\000\209\000\000\000\209\000\209\000\209\000\209\000\
4712 \209\000\209\000\209\000\209\000\209\000\000\000\000\000\000\000\
4713 \000\000\000\000\000\000\208\000\000\000\209\000\209\000\209\000\
4714 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\203\000\
4715 \000\000\000\000\000\000\000\000\000\000\000\000\209\000\209\000\
4716 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4717 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4718 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4719 \000\000\000\000\000\000\000\000\209\000\000\000\209\000\209\000\
4720 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4721 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4722 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4723 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4724 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4725 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4726 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4727 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4728 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4729 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4730 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4731 \000\000\000\000\000\000\000\000\000\000\209\000\209\000\209\000\
4732 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4733 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4734 \209\000\209\000\209\000\209\000\000\000\209\000\209\000\209\000\
4735 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4736 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4737 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4738 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4739 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4740 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\203\000\
4741 \000\000\000\000\000\000\000\000\000\000\000\000\209\000\209\000\
4742 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4743 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4744 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4745 \000\000\000\000\000\000\000\000\209\000\000\000\209\000\209\000\
4746 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4747 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4748 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4749 \000\000\000\000\000\000\000\000\000\000\000\000\221\000\221\000\
4750 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\221\000\
4751 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\221\000\
4752 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\221\000\
4753 \000\000\000\000\000\000\000\000\221\000\000\000\221\000\221\000\
4754 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\221\000\
4755 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\221\000\
4756 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\221\000\
4757 \000\000\000\000\000\000\000\000\000\000\209\000\209\000\209\000\
4758 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4759 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4760 \209\000\209\000\209\000\209\000\000\000\209\000\209\000\209\000\
4761 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4762 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4763 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
4764 \209\000\209\000\209\000\209\000\000\000\209\000\209\000\209\000\
4765 \209\000\209\000\209\000\209\000\209\000\221\000\221\000\221\000\
4766 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\221\000\
4767 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\221\000\
4768 \221\000\221\000\221\000\221\000\000\000\221\000\221\000\221\000\
4769 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\221\000\
4770 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\221\000\
4771 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\221\000\
4772 \221\000\221\000\221\000\221\000\000\000\221\000\221\000\221\000\
4773 \221\000\221\000\221\000\221\000\221\000\220\000\220\000\220\000\
4774 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\
4775 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\
4776 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\000\000\
4777 \000\000\000\000\000\000\220\000\000\000\220\000\220\000\220\000\
4778 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\
4779 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\
4780 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\000\000\
4781 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4782 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4783 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4784 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4785 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4786 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4787 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4788 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4789 \000\000\000\000\000\000\000\000\220\000\220\000\220\000\220\000\
4790 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\
4791 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\
4792 \220\000\220\000\220\000\000\000\220\000\220\000\220\000\220\000\
4793 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\
4794 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\
4795 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\
4796 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\
4797 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\
4798 \220\000\220\000\220\000\220\000\220\000\220\000\000\000\000\000\
4799 \217\000\000\000\000\000\000\000\218\000\220\000\220\000\220\000\
4800 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\
4801 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\
4802 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\000\000\
4803 \000\000\000\000\000\000\220\000\000\000\220\000\220\000\220\000\
4804 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\
4805 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\
4806 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\000\000\
4807 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4808 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4809 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4810 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4811 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4812 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4813 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4814 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4815 \000\000\000\000\000\000\000\000\220\000\220\000\220\000\220\000\
4816 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\
4817 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\
4818 \220\000\220\000\220\000\000\000\220\000\220\000\220\000\220\000\
4819 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\
4820 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\
4821 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\
4822 \220\000\220\000\220\000\221\000\220\000\220\000\220\000\220\000\
4823 \220\000\220\000\220\000\220\000\221\000\221\000\221\000\221\000\
4824 \221\000\221\000\221\000\221\000\221\000\221\000\000\000\000\000\
4825 \217\000\000\000\000\000\000\000\000\000\221\000\221\000\221\000\
4826 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\221\000\
4827 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\221\000\
4828 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\000\000\
4829 \000\000\000\000\000\000\221\000\000\000\221\000\221\000\221\000\
4830 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\221\000\
4831 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\221\000\
4832 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\000\000\
4833 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4834 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4835 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4836 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4837 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4838 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4839 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4840 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4841 \000\000\000\000\000\000\000\000\221\000\221\000\221\000\221\000\
4842 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\221\000\
4843 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\221\000\
4844 \221\000\221\000\221\000\000\000\221\000\221\000\221\000\221\000\
4845 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\221\000\
4846 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\221\000\
4847 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\221\000\
4848 \221\000\221\000\221\000\000\000\221\000\221\000\221\000\221\000\
4849 \221\000\221\000\221\000\221\000\000\000";
4851 "\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
4852 \255\255\000\000\000\000\029\000\000\000\000\000\101\000\107\000\
4853 \125\000\162\000\103\000\106\000\190\000\103\000\106\000\213\000\
4854 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
4855 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4856 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4857 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4858 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4859 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4860 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4861 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4862 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4863 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4864 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4865 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4866 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\
4867 \010\000\010\000\049\000\016\000\051\000\028\000\040\000\040\000\
4868 \028\000\010\000\010\000\041\000\041\000\041\000\041\000\041\000\
4869 \041\000\041\000\041\000\057\000\065\000\010\000\132\000\010\000\
4870 \010\000\010\000\016\000\010\000\028\000\047\000\047\000\047\000\
4871 \047\000\047\000\047\000\047\000\047\000\047\000\047\000\133\000\
4872 \142\000\144\000\016\000\016\000\016\000\016\000\016\000\016\000\
4873 \016\000\016\000\016\000\016\000\145\000\131\000\151\000\131\000\
4874 \154\000\010\000\020\000\131\000\157\000\020\000\193\000\255\255\
4875 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4876 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4877 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\
4878 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4879 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4880 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4881 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\204\000\
4882 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
4883 \000\000\003\000\255\255\204\000\003\000\003\000\003\000\050\000\
4884 \103\000\106\000\003\000\003\000\020\000\003\000\003\000\003\000\
4885 \039\000\039\000\039\000\039\000\039\000\039\000\039\000\039\000\
4886 \039\000\039\000\003\000\143\000\003\000\003\000\003\000\003\000\
4887 \003\000\255\255\005\000\005\000\050\000\039\000\005\000\255\255\
4888 \038\000\255\255\038\000\005\000\005\000\038\000\038\000\038\000\
4889 \038\000\038\000\038\000\038\000\038\000\038\000\038\000\005\000\
4890 \143\000\005\000\005\000\005\000\003\000\005\000\003\000\039\000\
4891 \104\000\255\255\171\000\104\000\006\000\039\000\255\255\006\000\
4892 \006\000\006\000\208\000\255\255\006\000\006\000\006\000\255\255\
4893 \006\000\006\000\006\000\255\255\068\000\255\255\208\000\068\000\
4894 \104\000\171\000\005\000\005\000\003\000\006\000\003\000\006\000\
4895 \006\000\006\000\006\000\006\000\170\000\170\000\255\255\255\255\
4896 \255\255\007\000\255\255\068\000\007\000\007\000\007\000\255\255\
4897 \255\255\007\000\007\000\007\000\068\000\007\000\007\000\007\000\
4898 \255\255\005\000\005\000\170\000\255\255\255\255\255\255\006\000\
4899 \006\000\006\000\007\000\255\255\007\000\007\000\007\000\007\000\
4900 \007\000\194\000\212\000\194\000\212\000\255\255\008\000\194\000\
4901 \212\000\008\000\008\000\008\000\255\255\255\255\008\000\008\000\
4902 \008\000\255\255\008\000\008\000\008\000\255\255\255\255\006\000\
4903 \006\000\006\000\255\255\255\255\007\000\007\000\007\000\008\000\
4904 \255\255\008\000\008\000\008\000\008\000\008\000\188\000\255\255\
4905 \020\000\188\000\255\255\009\000\255\255\255\255\009\000\009\000\
4906 \009\000\255\255\255\255\009\000\009\000\009\000\255\255\009\000\
4907 \009\000\009\000\255\255\255\255\007\000\007\000\007\000\255\255\
4908 \255\255\008\000\008\000\008\000\009\000\255\255\009\000\009\000\
4909 \009\000\009\000\009\000\255\255\255\255\255\255\255\255\255\255\
4910 \210\000\255\255\255\255\210\000\011\000\011\000\255\255\255\255\
4911 \188\000\255\255\188\000\013\000\013\000\011\000\011\000\013\000\
4912 \255\255\008\000\008\000\008\000\013\000\013\000\009\000\009\000\
4913 \009\000\011\000\210\000\011\000\011\000\011\000\255\255\011\000\
4914 \013\000\255\255\013\000\013\000\013\000\255\255\013\000\014\000\
4915 \014\000\255\255\080\000\014\000\255\255\080\000\255\255\255\255\
4916 \014\000\014\000\210\000\255\255\255\255\255\255\009\000\009\000\
4917 \009\000\255\255\255\255\255\255\014\000\011\000\014\000\014\000\
4918 \014\000\080\000\014\000\013\000\013\000\045\000\045\000\255\255\
4919 \255\255\255\255\080\000\017\000\255\255\255\255\017\000\017\000\
4920 \017\000\255\255\255\255\017\000\017\000\017\000\255\255\017\000\
4921 \017\000\017\000\255\255\011\000\255\255\255\255\104\000\014\000\
4922 \014\000\045\000\013\000\013\000\017\000\255\255\017\000\017\000\
4923 \017\000\017\000\017\000\255\255\255\255\255\255\255\255\255\255\
4924 \255\255\255\255\255\255\255\255\045\000\044\000\044\000\044\000\
4925 \044\000\044\000\044\000\044\000\044\000\255\255\014\000\014\000\
4926 \255\255\045\000\255\255\045\000\255\255\255\255\017\000\017\000\
4927 \017\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
4928 \018\000\044\000\255\255\018\000\018\000\018\000\255\255\255\255\
4929 \018\000\018\000\018\000\255\255\018\000\018\000\018\000\019\000\
4930 \255\255\255\255\019\000\255\255\044\000\255\255\017\000\017\000\
4931 \017\000\018\000\255\255\018\000\018\000\018\000\018\000\018\000\
4932 \255\255\044\000\255\255\044\000\255\255\255\255\019\000\019\000\
4933 \255\255\255\255\019\000\019\000\019\000\255\255\255\255\255\255\
4934 \019\000\019\000\255\255\019\000\019\000\019\000\128\000\255\255\
4935 \255\255\128\000\255\255\018\000\188\000\018\000\255\255\255\255\
4936 \019\000\255\255\019\000\019\000\019\000\019\000\019\000\022\000\
4937 \255\255\022\000\022\000\022\000\022\000\022\000\022\000\022\000\
4938 \022\000\022\000\022\000\128\000\255\255\255\255\255\255\255\255\
4939 \255\255\255\255\255\255\018\000\255\255\018\000\022\000\255\255\
4940 \255\255\255\255\019\000\255\255\019\000\022\000\210\000\255\255\
4941 \023\000\255\255\023\000\023\000\023\000\023\000\023\000\023\000\
4942 \023\000\023\000\023\000\023\000\255\255\255\255\255\255\255\255\
4943 \022\000\255\255\255\255\255\255\023\000\255\255\022\000\023\000\
4944 \255\255\255\255\019\000\255\255\019\000\022\000\023\000\022\000\
4945 \128\000\023\000\255\255\255\255\255\255\255\255\255\255\255\255\
4946 \255\255\255\255\023\000\255\255\255\255\255\255\105\000\105\000\
4947 \255\255\023\000\105\000\255\255\023\000\255\255\255\255\023\000\
4948 \255\255\255\255\255\255\255\255\255\255\255\255\023\000\255\255\
4949 \023\000\023\000\024\000\255\255\255\255\105\000\255\255\105\000\
4950 \255\255\255\255\023\000\024\000\024\000\024\000\024\000\024\000\
4951 \024\000\024\000\024\000\024\000\024\000\255\255\255\255\255\255\
4952 \255\255\255\255\255\255\255\255\024\000\024\000\024\000\024\000\
4953 \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
4954 \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
4955 \024\000\024\000\024\000\024\000\024\000\024\000\255\255\255\255\
4956 \255\255\255\255\024\000\255\255\024\000\024\000\024\000\024\000\
4957 \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
4958 \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
4959 \024\000\024\000\024\000\024\000\024\000\024\000\042\000\042\000\
4960 \042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\
4961 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\042\000\
4962 \042\000\042\000\042\000\042\000\042\000\056\000\056\000\056\000\
4963 \056\000\056\000\056\000\056\000\056\000\056\000\056\000\058\000\
4964 \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
4965 \058\000\255\255\255\255\255\255\128\000\255\255\255\255\042\000\
4966 \042\000\042\000\042\000\042\000\042\000\150\000\150\000\150\000\
4967 \150\000\150\000\150\000\150\000\150\000\150\000\150\000\255\255\
4968 \255\255\255\255\255\255\024\000\024\000\024\000\024\000\024\000\
4969 \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
4970 \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
4971 \024\000\024\000\255\255\024\000\024\000\024\000\024\000\024\000\
4972 \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
4973 \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
4974 \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\
4975 \024\000\024\000\025\000\024\000\024\000\024\000\024\000\024\000\
4976 \024\000\024\000\024\000\025\000\025\000\025\000\025\000\025\000\
4977 \025\000\025\000\025\000\025\000\025\000\105\000\255\255\255\255\
4978 \255\255\255\255\255\255\255\255\025\000\025\000\025\000\025\000\
4979 \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
4980 \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
4981 \025\000\025\000\025\000\025\000\025\000\025\000\255\255\255\255\
4982 \255\255\255\255\025\000\255\255\025\000\025\000\025\000\025\000\
4983 \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
4984 \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
4985 \025\000\025\000\025\000\025\000\025\000\025\000\043\000\043\000\
4986 \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\
4987 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\043\000\
4988 \043\000\043\000\043\000\043\000\043\000\255\255\255\255\255\255\
4989 \255\255\255\255\043\000\153\000\153\000\153\000\153\000\153\000\
4990 \153\000\153\000\153\000\153\000\153\000\255\255\255\255\255\255\
4991 \159\000\255\255\255\255\159\000\255\255\043\000\255\255\043\000\
4992 \043\000\043\000\043\000\043\000\043\000\255\255\255\255\255\255\
4993 \255\255\255\255\043\000\255\255\043\000\255\255\255\255\255\255\
4994 \159\000\255\255\255\255\025\000\025\000\025\000\025\000\025\000\
4995 \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
4996 \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
4997 \025\000\025\000\255\255\025\000\025\000\025\000\025\000\025\000\
4998 \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
4999 \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
5000 \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\
5001 \025\000\025\000\159\000\025\000\025\000\025\000\025\000\025\000\
5002 \025\000\025\000\025\000\026\000\255\255\255\255\026\000\026\000\
5003 \026\000\255\255\255\255\255\255\026\000\026\000\255\255\026\000\
5004 \026\000\026\000\168\000\168\000\168\000\168\000\168\000\168\000\
5005 \168\000\168\000\168\000\168\000\026\000\255\255\026\000\026\000\
5006 \026\000\026\000\026\000\172\000\172\000\172\000\172\000\172\000\
5007 \172\000\172\000\172\000\172\000\172\000\255\255\046\000\046\000\
5008 \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\
5009 \255\255\255\255\255\255\255\255\255\255\255\255\026\000\255\255\
5010 \026\000\026\000\255\255\026\000\026\000\026\000\026\000\026\000\
5011 \026\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\
5012 \026\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\
5013 \026\000\026\000\026\000\026\000\026\000\046\000\026\000\027\000\
5014 \026\000\255\255\027\000\027\000\027\000\255\255\255\255\255\255\
5015 \027\000\027\000\255\255\027\000\027\000\027\000\255\255\255\255\
5016 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5017 \027\000\255\255\027\000\027\000\027\000\027\000\027\000\255\255\
5018 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5019 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5020 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5021 \255\255\255\255\027\000\255\255\027\000\027\000\159\000\027\000\
5022 \027\000\027\000\027\000\027\000\027\000\027\000\027\000\027\000\
5023 \027\000\027\000\027\000\027\000\027\000\027\000\027\000\027\000\
5024 \027\000\027\000\027\000\027\000\027\000\027\000\027\000\027\000\
5025 \027\000\255\255\027\000\255\255\027\000\255\255\255\255\255\255\
5026 \255\255\026\000\026\000\026\000\026\000\026\000\026\000\026\000\
5027 \026\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\
5028 \026\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\
5029 \026\000\100\000\026\000\026\000\026\000\026\000\026\000\026\000\
5030 \026\000\026\000\055\000\055\000\055\000\055\000\055\000\055\000\
5031 \055\000\055\000\055\000\055\000\255\255\255\255\255\255\255\255\
5032 \100\000\255\255\255\255\055\000\055\000\055\000\055\000\055\000\
5033 \055\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5034 \100\000\100\000\100\000\100\000\100\000\100\000\100\000\100\000\
5035 \100\000\100\000\255\255\255\255\255\255\255\255\255\255\255\255\
5036 \255\255\255\255\255\255\055\000\055\000\055\000\055\000\055\000\
5037 \055\000\255\255\255\255\255\255\255\255\027\000\027\000\027\000\
5038 \027\000\027\000\027\000\027\000\027\000\027\000\027\000\027\000\
5039 \027\000\027\000\027\000\027\000\027\000\027\000\027\000\027\000\
5040 \027\000\027\000\027\000\027\000\027\000\031\000\027\000\027\000\
5041 \027\000\027\000\027\000\027\000\027\000\027\000\031\000\031\000\
5042 \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
5043 \031\000\255\255\255\255\255\255\255\255\255\255\255\255\031\000\
5044 \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
5045 \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
5046 \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
5047 \031\000\255\255\255\255\255\255\255\255\031\000\255\255\031\000\
5048 \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
5049 \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
5050 \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
5051 \031\000\059\000\059\000\059\000\059\000\059\000\059\000\059\000\
5052 \059\000\059\000\059\000\255\255\255\255\255\255\255\255\255\255\
5053 \255\255\255\255\059\000\059\000\059\000\059\000\059\000\059\000\
5054 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5055 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5056 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5057 \255\255\255\255\059\000\059\000\059\000\059\000\059\000\059\000\
5058 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5059 \255\255\255\255\255\255\255\255\255\255\255\255\031\000\031\000\
5060 \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
5061 \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
5062 \031\000\031\000\031\000\031\000\031\000\255\255\031\000\031\000\
5063 \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
5064 \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
5065 \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\
5066 \031\000\031\000\031\000\031\000\031\000\033\000\031\000\031\000\
5067 \031\000\031\000\031\000\031\000\031\000\031\000\033\000\033\000\
5068 \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
5069 \033\000\255\255\255\255\255\255\255\255\255\255\255\255\033\000\
5070 \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
5071 \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
5072 \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
5073 \033\000\255\255\255\255\255\255\255\255\033\000\255\255\033\000\
5074 \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
5075 \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
5076 \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
5077 \033\000\255\255\255\255\255\255\099\000\099\000\255\255\255\255\
5078 \099\000\255\255\255\255\255\255\255\255\149\000\149\000\149\000\
5079 \149\000\149\000\149\000\149\000\149\000\149\000\149\000\255\255\
5080 \255\255\255\255\255\255\099\000\255\255\099\000\149\000\149\000\
5081 \149\000\149\000\149\000\149\000\255\255\255\255\255\255\255\255\
5082 \255\255\255\255\255\255\099\000\099\000\099\000\099\000\099\000\
5083 \099\000\099\000\099\000\099\000\099\000\255\255\255\255\255\255\
5084 \255\255\255\255\255\255\255\255\255\255\255\255\149\000\149\000\
5085 \149\000\149\000\149\000\149\000\255\255\255\255\033\000\033\000\
5086 \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
5087 \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
5088 \033\000\033\000\033\000\033\000\033\000\255\255\033\000\033\000\
5089 \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
5090 \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
5091 \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\
5092 \033\000\033\000\033\000\033\000\033\000\255\255\033\000\033\000\
5093 \033\000\033\000\033\000\033\000\033\000\033\000\048\000\255\255\
5094 \048\000\255\255\255\255\255\255\255\255\048\000\255\255\255\255\
5095 \060\000\255\255\255\255\060\000\255\255\255\255\048\000\048\000\
5096 \048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\
5097 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\060\000\
5098 \060\000\255\255\255\255\060\000\060\000\060\000\255\255\255\255\
5099 \255\255\060\000\060\000\255\255\060\000\060\000\060\000\255\255\
5100 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5101 \255\255\060\000\048\000\060\000\060\000\060\000\060\000\060\000\
5102 \048\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5103 \255\255\255\255\255\255\061\000\048\000\255\255\061\000\255\255\
5104 \048\000\255\255\048\000\255\255\255\255\255\255\048\000\255\255\
5105 \255\255\255\255\255\255\060\000\255\255\060\000\255\255\255\255\
5106 \255\255\255\255\061\000\061\000\255\255\255\255\061\000\061\000\
5107 \061\000\255\255\255\255\061\000\061\000\061\000\255\255\061\000\
5108 \061\000\061\000\062\000\099\000\255\255\062\000\255\255\255\255\
5109 \255\255\255\255\255\255\060\000\061\000\060\000\061\000\061\000\
5110 \061\000\061\000\061\000\255\255\255\255\255\255\255\255\255\255\
5111 \255\255\062\000\062\000\255\255\255\255\062\000\062\000\062\000\
5112 \255\255\255\255\062\000\062\000\062\000\255\255\062\000\062\000\
5113 \062\000\255\255\255\255\255\255\255\255\255\255\061\000\255\255\
5114 \061\000\255\255\255\255\062\000\255\255\062\000\062\000\062\000\
5115 \062\000\062\000\255\255\255\255\255\255\255\255\255\255\255\255\
5116 \255\255\255\255\255\255\255\255\255\255\063\000\255\255\255\255\
5117 \063\000\255\255\255\255\255\255\255\255\255\255\061\000\255\255\
5118 \061\000\255\255\255\255\255\255\255\255\062\000\255\255\062\000\
5119 \255\255\255\255\255\255\255\255\063\000\063\000\255\255\255\255\
5120 \063\000\063\000\063\000\255\255\255\255\063\000\063\000\063\000\
5121 \255\255\063\000\063\000\063\000\064\000\255\255\048\000\064\000\
5122 \255\255\255\255\255\255\255\255\255\255\062\000\063\000\062\000\
5123 \063\000\063\000\063\000\063\000\063\000\255\255\255\255\255\255\
5124 \255\255\255\255\255\255\064\000\064\000\255\255\255\255\064\000\
5125 \064\000\064\000\255\255\064\000\064\000\064\000\064\000\255\255\
5126 \064\000\064\000\064\000\255\255\255\255\255\255\255\255\255\255\
5127 \063\000\255\255\063\000\067\000\067\000\064\000\067\000\064\000\
5128 \064\000\064\000\064\000\064\000\067\000\067\000\255\255\255\255\
5129 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5130 \067\000\255\255\067\000\067\000\067\000\255\255\067\000\255\255\
5131 \063\000\255\255\063\000\255\255\255\255\255\255\064\000\064\000\
5132 \255\255\064\000\255\255\255\255\255\255\255\255\255\255\255\255\
5133 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5134 \255\255\067\000\255\255\069\000\067\000\255\255\069\000\255\255\
5135 \255\255\255\255\255\255\255\255\255\255\255\255\064\000\064\000\
5136 \255\255\064\000\255\255\255\255\255\255\255\255\255\255\255\255\
5137 \255\255\255\255\069\000\069\000\255\255\255\255\069\000\069\000\
5138 \069\000\067\000\067\000\069\000\069\000\069\000\255\255\069\000\
5139 \069\000\069\000\070\000\255\255\255\255\070\000\255\255\255\255\
5140 \255\255\255\255\255\255\255\255\069\000\255\255\069\000\069\000\
5141 \069\000\069\000\069\000\255\255\255\255\255\255\255\255\255\255\
5142 \255\255\070\000\070\000\255\255\255\255\070\000\070\000\070\000\
5143 \255\255\070\000\070\000\070\000\070\000\255\255\070\000\070\000\
5144 \070\000\255\255\255\255\255\255\255\255\255\255\069\000\255\255\
5145 \069\000\255\255\255\255\070\000\255\255\070\000\070\000\070\000\
5146 \070\000\070\000\255\255\255\255\255\255\255\255\255\255\255\255\
5147 \255\255\255\255\255\255\255\255\255\255\071\000\255\255\255\255\
5148 \071\000\255\255\255\255\255\255\255\255\255\255\069\000\255\255\
5149 \069\000\255\255\255\255\255\255\070\000\070\000\255\255\070\000\
5150 \255\255\255\255\255\255\255\255\071\000\071\000\255\255\255\255\
5151 \071\000\071\000\071\000\255\255\255\255\255\255\071\000\071\000\
5152 \255\255\071\000\071\000\071\000\075\000\255\255\255\255\075\000\
5153 \255\255\255\255\255\255\255\255\070\000\070\000\071\000\070\000\
5154 \071\000\071\000\071\000\071\000\071\000\255\255\255\255\255\255\
5155 \255\255\255\255\255\255\075\000\075\000\255\255\255\255\075\000\
5156 \075\000\075\000\255\255\255\255\075\000\075\000\075\000\255\255\
5157 \075\000\075\000\075\000\255\255\255\255\255\255\255\255\255\255\
5158 \071\000\255\255\071\000\255\255\255\255\075\000\255\255\075\000\
5159 \075\000\075\000\075\000\075\000\255\255\255\255\255\255\255\255\
5160 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\076\000\
5161 \255\255\255\255\076\000\255\255\255\255\255\255\255\255\255\255\
5162 \071\000\255\255\071\000\255\255\255\255\255\255\255\255\075\000\
5163 \255\255\075\000\255\255\255\255\255\255\255\255\076\000\076\000\
5164 \255\255\255\255\076\000\076\000\076\000\255\255\076\000\076\000\
5165 \076\000\076\000\255\255\076\000\076\000\076\000\077\000\255\255\
5166 \255\255\077\000\255\255\255\255\255\255\255\255\255\255\075\000\
5167 \076\000\075\000\076\000\076\000\076\000\076\000\076\000\255\255\
5168 \255\255\255\255\255\255\255\255\255\255\077\000\077\000\255\255\
5169 \255\255\077\000\077\000\077\000\255\255\255\255\077\000\077\000\
5170 \077\000\255\255\077\000\077\000\077\000\255\255\255\255\255\255\
5171 \255\255\076\000\076\000\255\255\076\000\255\255\255\255\077\000\
5172 \255\255\077\000\077\000\077\000\077\000\077\000\255\255\255\255\
5173 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5174 \255\255\078\000\255\255\255\255\078\000\255\255\255\255\255\255\
5175 \255\255\076\000\076\000\255\255\076\000\255\255\255\255\255\255\
5176 \255\255\077\000\255\255\077\000\255\255\255\255\255\255\255\255\
5177 \078\000\078\000\255\255\255\255\078\000\078\000\078\000\255\255\
5178 \255\255\078\000\078\000\078\000\255\255\078\000\078\000\078\000\
5179 \079\000\255\255\255\255\079\000\255\255\255\255\255\255\255\255\
5180 \255\255\077\000\078\000\077\000\078\000\078\000\078\000\078\000\
5181 \078\000\255\255\255\255\255\255\255\255\255\255\255\255\079\000\
5182 \079\000\255\255\255\255\079\000\079\000\079\000\255\255\255\255\
5183 \255\255\079\000\079\000\255\255\079\000\079\000\079\000\255\255\
5184 \255\255\255\255\255\255\255\255\078\000\255\255\078\000\255\255\
5185 \255\255\079\000\255\255\079\000\079\000\079\000\079\000\079\000\
5186 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\084\000\
5187 \084\000\255\255\255\255\084\000\255\255\255\255\255\255\255\255\
5188 \084\000\084\000\255\255\255\255\078\000\255\255\078\000\255\255\
5189 \255\255\255\255\255\255\079\000\084\000\079\000\084\000\084\000\
5190 \084\000\255\255\084\000\255\255\255\255\255\255\255\255\255\255\
5191 \085\000\255\255\255\255\085\000\085\000\085\000\255\255\255\255\
5192 \085\000\085\000\085\000\255\255\085\000\085\000\085\000\255\255\
5193 \255\255\255\255\255\255\079\000\255\255\079\000\255\255\084\000\
5194 \084\000\085\000\255\255\085\000\085\000\085\000\085\000\085\000\
5195 \255\255\255\255\255\255\255\255\255\255\086\000\255\255\255\255\
5196 \086\000\086\000\086\000\255\255\255\255\086\000\086\000\086\000\
5197 \255\255\086\000\086\000\086\000\255\255\255\255\084\000\084\000\
5198 \255\255\255\255\255\255\085\000\085\000\085\000\086\000\255\255\
5199 \086\000\086\000\086\000\086\000\086\000\255\255\255\255\255\255\
5200 \255\255\255\255\087\000\255\255\255\255\087\000\087\000\087\000\
5201 \255\255\255\255\087\000\087\000\087\000\255\255\087\000\087\000\
5202 \087\000\255\255\255\255\085\000\085\000\085\000\255\255\255\255\
5203 \086\000\086\000\086\000\087\000\255\255\087\000\087\000\087\000\
5204 \087\000\087\000\255\255\255\255\255\255\255\255\255\255\088\000\
5205 \255\255\255\255\088\000\088\000\088\000\255\255\255\255\088\000\
5206 \088\000\088\000\255\255\088\000\088\000\088\000\255\255\255\255\
5207 \086\000\086\000\086\000\255\255\255\255\087\000\087\000\087\000\
5208 \088\000\255\255\088\000\088\000\088\000\088\000\088\000\255\255\
5209 \255\255\255\255\255\255\255\255\089\000\255\255\255\255\089\000\
5210 \089\000\089\000\255\255\255\255\089\000\089\000\089\000\255\255\
5211 \089\000\089\000\089\000\255\255\255\255\087\000\087\000\087\000\
5212 \255\255\255\255\088\000\088\000\088\000\089\000\255\255\089\000\
5213 \089\000\089\000\089\000\089\000\255\255\255\255\255\255\255\255\
5214 \255\255\090\000\255\255\255\255\090\000\090\000\090\000\255\255\
5215 \255\255\255\255\090\000\090\000\255\255\090\000\090\000\090\000\
5216 \255\255\255\255\088\000\088\000\088\000\255\255\255\255\089\000\
5217 \089\000\089\000\090\000\255\255\090\000\090\000\090\000\090\000\
5218 \090\000\255\255\255\255\255\255\091\000\255\255\255\255\091\000\
5219 \091\000\091\000\255\255\255\255\091\000\091\000\091\000\255\255\
5220 \091\000\091\000\091\000\255\255\255\255\255\255\255\255\089\000\
5221 \089\000\089\000\255\255\255\255\090\000\091\000\090\000\091\000\
5222 \091\000\091\000\091\000\091\000\255\255\255\255\255\255\255\255\
5223 \255\255\092\000\255\255\255\255\092\000\092\000\092\000\255\255\
5224 \255\255\092\000\092\000\092\000\255\255\092\000\092\000\092\000\
5225 \255\255\255\255\255\255\255\255\090\000\255\255\090\000\091\000\
5226 \091\000\091\000\092\000\255\255\092\000\092\000\092\000\092\000\
5227 \092\000\255\255\255\255\255\255\255\255\255\255\093\000\255\255\
5228 \255\255\093\000\093\000\093\000\255\255\255\255\093\000\093\000\
5229 \093\000\255\255\093\000\093\000\093\000\255\255\255\255\091\000\
5230 \091\000\091\000\255\255\255\255\092\000\092\000\092\000\093\000\
5231 \255\255\093\000\093\000\093\000\093\000\093\000\255\255\255\255\
5232 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\094\000\
5233 \094\000\255\255\255\255\094\000\255\255\255\255\255\255\255\255\
5234 \094\000\094\000\255\255\255\255\092\000\092\000\092\000\255\255\
5235 \255\255\093\000\093\000\093\000\094\000\255\255\094\000\094\000\
5236 \094\000\255\255\094\000\255\255\255\255\255\255\255\255\255\255\
5237 \095\000\255\255\255\255\095\000\095\000\095\000\255\255\255\255\
5238 \095\000\095\000\095\000\255\255\095\000\095\000\095\000\255\255\
5239 \255\255\093\000\093\000\093\000\255\255\255\255\255\255\094\000\
5240 \094\000\095\000\255\255\095\000\095\000\095\000\095\000\095\000\
5241 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5242 \255\255\096\000\096\000\255\255\255\255\096\000\255\255\255\255\
5243 \255\255\255\255\096\000\096\000\255\255\255\255\094\000\094\000\
5244 \255\255\255\255\255\255\095\000\095\000\095\000\096\000\255\255\
5245 \096\000\096\000\096\000\255\255\096\000\255\255\255\255\255\255\
5246 \255\255\255\255\097\000\255\255\255\255\097\000\097\000\097\000\
5247 \255\255\255\255\097\000\097\000\097\000\255\255\097\000\097\000\
5248 \097\000\255\255\255\255\095\000\095\000\095\000\255\255\255\255\
5249 \255\255\096\000\096\000\097\000\255\255\097\000\097\000\097\000\
5250 \097\000\097\000\255\255\255\255\255\255\255\255\255\255\098\000\
5251 \255\255\255\255\098\000\098\000\098\000\255\255\255\255\098\000\
5252 \098\000\098\000\255\255\098\000\098\000\098\000\255\255\255\255\
5253 \096\000\096\000\255\255\255\255\255\255\097\000\097\000\097\000\
5254 \098\000\255\255\098\000\098\000\098\000\098\000\098\000\255\255\
5255 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5256 \109\000\109\000\255\255\255\255\109\000\255\255\255\255\110\000\
5257 \110\000\109\000\109\000\110\000\255\255\097\000\097\000\097\000\
5258 \110\000\110\000\098\000\098\000\098\000\109\000\255\255\109\000\
5259 \109\000\109\000\255\255\109\000\110\000\255\255\110\000\110\000\
5260 \110\000\255\255\110\000\255\255\255\255\255\255\255\255\255\255\
5261 \255\255\255\255\255\255\255\255\111\000\111\000\255\255\255\255\
5262 \111\000\255\255\098\000\098\000\098\000\111\000\111\000\255\255\
5263 \109\000\109\000\255\255\255\255\255\255\255\255\255\255\110\000\
5264 \110\000\111\000\255\255\111\000\111\000\111\000\255\255\111\000\
5265 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5266 \255\255\112\000\112\000\255\255\255\255\112\000\255\255\109\000\
5267 \109\000\255\255\112\000\112\000\255\255\255\255\110\000\110\000\
5268 \255\255\255\255\255\255\255\255\111\000\111\000\112\000\255\255\
5269 \112\000\112\000\112\000\255\255\112\000\255\255\255\255\255\255\
5270 \255\255\255\255\255\255\255\255\255\255\255\255\113\000\113\000\
5271 \255\255\255\255\113\000\255\255\255\255\114\000\114\000\113\000\
5272 \113\000\114\000\255\255\111\000\111\000\255\255\114\000\114\000\
5273 \255\255\112\000\112\000\113\000\255\255\113\000\113\000\113\000\
5274 \255\255\113\000\114\000\255\255\114\000\114\000\114\000\255\255\
5275 \114\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5276 \255\255\255\255\115\000\115\000\255\255\255\255\255\255\255\255\
5277 \112\000\112\000\255\255\115\000\115\000\255\255\113\000\113\000\
5278 \255\255\255\255\255\255\255\255\255\255\114\000\114\000\115\000\
5279 \255\255\115\000\115\000\115\000\255\255\115\000\255\255\255\255\
5280 \255\255\116\000\116\000\255\255\255\255\255\255\255\255\255\255\
5281 \255\255\255\255\116\000\116\000\255\255\113\000\113\000\255\255\
5282 \255\255\255\255\255\255\255\255\114\000\114\000\116\000\255\255\
5283 \116\000\116\000\116\000\115\000\116\000\117\000\117\000\255\255\
5284 \117\000\255\255\255\255\255\255\255\255\255\255\117\000\117\000\
5285 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5286 \255\255\255\255\117\000\255\255\117\000\117\000\117\000\255\255\
5287 \117\000\115\000\116\000\255\255\255\255\255\255\255\255\255\255\
5288 \255\255\255\255\118\000\118\000\255\255\255\255\255\255\119\000\
5289 \119\000\255\255\119\000\118\000\118\000\255\255\255\255\255\255\
5290 \119\000\119\000\255\255\117\000\255\255\255\255\117\000\118\000\
5291 \116\000\118\000\118\000\118\000\119\000\118\000\119\000\119\000\
5292 \119\000\255\255\119\000\255\255\255\255\255\255\255\255\255\255\
5293 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5294 \255\255\255\255\255\255\117\000\117\000\255\255\255\255\255\255\
5295 \255\255\255\255\255\255\118\000\255\255\119\000\255\255\255\255\
5296 \119\000\255\255\255\255\255\255\255\255\255\255\120\000\255\255\
5297 \255\255\120\000\120\000\120\000\255\255\255\255\120\000\120\000\
5298 \120\000\255\255\120\000\120\000\120\000\255\255\255\255\255\255\
5299 \255\255\118\000\255\255\255\255\255\255\119\000\119\000\120\000\
5300 \255\255\120\000\120\000\120\000\120\000\120\000\255\255\255\255\
5301 \255\255\255\255\255\255\121\000\255\255\255\255\121\000\121\000\
5302 \121\000\255\255\255\255\121\000\121\000\121\000\255\255\121\000\
5303 \121\000\121\000\255\255\255\255\255\255\255\255\255\255\255\255\
5304 \255\255\120\000\120\000\120\000\121\000\255\255\121\000\121\000\
5305 \121\000\121\000\121\000\255\255\255\255\255\255\255\255\255\255\
5306 \122\000\255\255\255\255\122\000\122\000\122\000\255\255\255\255\
5307 \122\000\122\000\122\000\255\255\122\000\122\000\122\000\255\255\
5308 \255\255\120\000\120\000\120\000\255\255\255\255\121\000\121\000\
5309 \121\000\122\000\255\255\122\000\122\000\122\000\122\000\122\000\
5310 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\123\000\
5311 \255\255\255\255\123\000\255\255\255\255\255\255\255\255\255\255\
5312 \255\255\255\255\255\255\255\255\255\255\255\255\121\000\121\000\
5313 \121\000\255\255\255\255\122\000\122\000\122\000\255\255\123\000\
5314 \255\255\255\255\255\255\255\255\123\000\123\000\255\255\123\000\
5315 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5316 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5317 \255\255\123\000\255\255\122\000\122\000\122\000\123\000\123\000\
5318 \123\000\123\000\123\000\123\000\123\000\123\000\123\000\123\000\
5319 \123\000\123\000\123\000\123\000\123\000\123\000\123\000\123\000\
5320 \123\000\123\000\123\000\123\000\123\000\123\000\123\000\123\000\
5321 \255\255\255\255\255\255\255\255\123\000\255\255\123\000\123\000\
5322 \123\000\123\000\123\000\123\000\123\000\123\000\123\000\123\000\
5323 \123\000\123\000\123\000\123\000\123\000\123\000\123\000\123\000\
5324 \123\000\123\000\123\000\123\000\123\000\123\000\123\000\123\000\
5325 \156\000\156\000\156\000\156\000\156\000\156\000\156\000\156\000\
5326 \156\000\156\000\255\255\255\255\255\255\255\255\255\255\255\255\
5327 \255\255\156\000\156\000\156\000\156\000\156\000\156\000\255\255\
5328 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5329 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5330 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5331 \255\255\156\000\156\000\156\000\156\000\156\000\156\000\255\255\
5332 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5333 \255\255\255\255\255\255\255\255\255\255\123\000\123\000\123\000\
5334 \123\000\123\000\123\000\123\000\123\000\123\000\123\000\123\000\
5335 \123\000\123\000\123\000\123\000\123\000\123\000\123\000\123\000\
5336 \123\000\123\000\123\000\123\000\255\255\123\000\123\000\123\000\
5337 \123\000\123\000\123\000\123\000\123\000\123\000\123\000\123\000\
5338 \123\000\123\000\123\000\123\000\123\000\123\000\123\000\123\000\
5339 \123\000\123\000\123\000\123\000\123\000\123\000\123\000\123\000\
5340 \123\000\123\000\123\000\123\000\255\255\123\000\123\000\123\000\
5341 \123\000\123\000\123\000\123\000\123\000\123\000\130\000\255\255\
5342 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\130\000\
5343 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
5344 \130\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5345 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
5346 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
5347 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
5348 \130\000\130\000\255\255\255\255\255\255\255\255\130\000\255\255\
5349 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
5350 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
5351 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
5352 \130\000\130\000\255\255\255\255\255\255\255\255\255\255\255\255\
5353 \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
5354 \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
5355 \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
5356 \137\000\137\000\255\255\255\255\255\255\255\255\137\000\255\255\
5357 \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
5358 \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
5359 \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
5360 \137\000\137\000\255\255\255\255\255\255\255\255\255\255\130\000\
5361 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
5362 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
5363 \130\000\130\000\130\000\130\000\130\000\130\000\255\255\130\000\
5364 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
5365 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
5366 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\130\000\
5367 \130\000\130\000\130\000\130\000\130\000\130\000\255\255\130\000\
5368 \130\000\130\000\130\000\130\000\130\000\130\000\130\000\137\000\
5369 \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
5370 \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
5371 \137\000\137\000\137\000\137\000\137\000\137\000\255\255\137\000\
5372 \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
5373 \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
5374 \137\000\137\000\137\000\137\000\137\000\137\000\137\000\137\000\
5375 \137\000\137\000\137\000\137\000\137\000\137\000\255\255\137\000\
5376 \137\000\137\000\137\000\137\000\137\000\137\000\137\000\138\000\
5377 \138\000\138\000\138\000\138\000\138\000\138\000\138\000\138\000\
5378 \138\000\138\000\138\000\138\000\138\000\138\000\138\000\138\000\
5379 \138\000\138\000\138\000\138\000\138\000\138\000\138\000\138\000\
5380 \138\000\255\255\255\255\255\255\255\255\138\000\255\255\138\000\
5381 \138\000\138\000\138\000\138\000\138\000\138\000\138\000\138\000\
5382 \138\000\138\000\138\000\138\000\138\000\138\000\138\000\138\000\
5383 \138\000\138\000\138\000\138\000\138\000\138\000\138\000\138\000\
5384 \138\000\167\000\167\000\167\000\167\000\167\000\167\000\167\000\
5385 \167\000\167\000\167\000\255\255\255\255\255\255\255\255\255\255\
5386 \255\255\255\255\167\000\167\000\167\000\167\000\167\000\167\000\
5387 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5388 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5389 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5390 \255\255\255\255\167\000\167\000\167\000\167\000\167\000\167\000\
5391 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5392 \255\255\255\255\255\255\255\255\255\255\255\255\138\000\138\000\
5393 \138\000\138\000\138\000\138\000\138\000\138\000\138\000\138\000\
5394 \138\000\138\000\138\000\138\000\138\000\138\000\138\000\138\000\
5395 \138\000\138\000\138\000\138\000\138\000\255\255\138\000\138\000\
5396 \138\000\138\000\138\000\138\000\138\000\138\000\138\000\138\000\
5397 \138\000\138\000\138\000\138\000\138\000\138\000\138\000\138\000\
5398 \138\000\138\000\138\000\138\000\138\000\138\000\138\000\138\000\
5399 \138\000\138\000\138\000\138\000\138\000\139\000\138\000\138\000\
5400 \138\000\138\000\138\000\138\000\138\000\138\000\139\000\139\000\
5401 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
5402 \255\255\255\255\139\000\255\255\255\255\255\255\139\000\139\000\
5403 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
5404 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
5405 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
5406 \139\000\255\255\255\255\255\255\255\255\139\000\255\255\139\000\
5407 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
5408 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
5409 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
5410 \139\000\174\000\174\000\174\000\174\000\174\000\174\000\174\000\
5411 \174\000\174\000\174\000\255\255\255\255\255\255\255\255\255\255\
5412 \255\255\255\255\174\000\174\000\174\000\174\000\174\000\174\000\
5413 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5414 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5415 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5416 \255\255\255\255\174\000\174\000\174\000\174\000\174\000\174\000\
5417 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5418 \255\255\255\255\255\255\255\255\255\255\255\255\139\000\139\000\
5419 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
5420 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
5421 \139\000\139\000\139\000\139\000\139\000\255\255\139\000\139\000\
5422 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
5423 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
5424 \139\000\139\000\139\000\139\000\139\000\139\000\139\000\139\000\
5425 \139\000\139\000\139\000\139\000\139\000\140\000\139\000\139\000\
5426 \139\000\139\000\139\000\139\000\139\000\139\000\140\000\140\000\
5427 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
5428 \255\255\255\255\140\000\255\255\255\255\255\255\255\255\140\000\
5429 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
5430 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
5431 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
5432 \140\000\255\255\255\255\255\255\255\255\140\000\255\255\140\000\
5433 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
5434 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
5435 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
5436 \140\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5437 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5438 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5439 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5440 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5441 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5442 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5443 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5444 \255\255\255\255\255\255\255\255\255\255\255\255\140\000\140\000\
5445 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
5446 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
5447 \140\000\140\000\140\000\140\000\140\000\255\255\140\000\140\000\
5448 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
5449 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
5450 \140\000\140\000\140\000\140\000\140\000\140\000\140\000\140\000\
5451 \140\000\140\000\140\000\140\000\140\000\255\255\140\000\140\000\
5452 \140\000\140\000\140\000\140\000\140\000\140\000\141\000\255\255\
5453 \141\000\255\255\255\255\164\000\255\255\141\000\164\000\255\255\
5454 \255\255\255\255\255\255\255\255\255\255\255\255\141\000\141\000\
5455 \141\000\141\000\141\000\141\000\141\000\141\000\141\000\141\000\
5456 \255\255\164\000\255\255\164\000\255\255\255\255\255\255\255\255\
5457 \164\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5458 \255\255\164\000\164\000\164\000\164\000\164\000\164\000\164\000\
5459 \164\000\164\000\164\000\255\255\255\255\255\255\255\255\255\255\
5460 \255\255\255\255\141\000\255\255\255\255\255\255\255\255\255\255\
5461 \141\000\176\000\255\255\255\255\176\000\176\000\176\000\255\255\
5462 \255\255\255\255\176\000\176\000\141\000\176\000\176\000\176\000\
5463 \141\000\255\255\141\000\255\255\255\255\164\000\141\000\255\255\
5464 \255\255\255\255\176\000\164\000\176\000\176\000\176\000\176\000\
5465 \176\000\255\255\255\255\255\255\255\255\255\255\255\255\164\000\
5466 \255\255\255\255\255\255\164\000\255\255\164\000\255\255\255\255\
5467 \255\255\164\000\255\255\255\255\255\255\255\255\255\255\255\255\
5468 \255\255\255\255\255\255\255\255\176\000\255\255\176\000\255\255\
5469 \255\255\255\255\255\255\255\255\177\000\255\255\255\255\177\000\
5470 \177\000\177\000\255\255\255\255\255\255\177\000\177\000\255\255\
5471 \177\000\177\000\177\000\255\255\255\255\255\255\255\255\255\255\
5472 \255\255\255\255\255\255\255\255\176\000\177\000\176\000\177\000\
5473 \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
5474 \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
5475 \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
5476 \177\000\177\000\177\000\177\000\177\000\177\000\255\255\177\000\
5477 \255\255\177\000\177\000\255\255\177\000\177\000\177\000\177\000\
5478 \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
5479 \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
5480 \177\000\177\000\177\000\177\000\177\000\177\000\255\255\177\000\
5481 \255\255\177\000\255\255\255\255\255\255\255\255\255\255\255\255\
5482 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5483 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5484 \255\255\164\000\255\255\255\255\255\255\255\255\255\255\255\255\
5485 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5486 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5487 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5488 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5489 \255\255\255\255\255\255\177\000\177\000\177\000\177\000\177\000\
5490 \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
5491 \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
5492 \177\000\177\000\255\255\177\000\177\000\177\000\177\000\177\000\
5493 \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
5494 \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
5495 \177\000\177\000\177\000\177\000\177\000\177\000\177\000\177\000\
5496 \177\000\177\000\255\255\177\000\177\000\177\000\177\000\177\000\
5497 \177\000\177\000\177\000\178\000\255\255\255\255\178\000\178\000\
5498 \178\000\255\255\255\255\255\255\178\000\178\000\255\255\178\000\
5499 \178\000\178\000\255\255\255\255\255\255\255\255\255\255\255\255\
5500 \255\255\255\255\255\255\255\255\178\000\255\255\178\000\178\000\
5501 \178\000\178\000\178\000\255\255\255\255\255\255\255\255\179\000\
5502 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5503 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
5504 \179\000\179\000\255\255\255\255\179\000\255\255\178\000\255\255\
5505 \178\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
5506 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
5507 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
5508 \179\000\179\000\179\000\255\255\255\255\255\255\178\000\179\000\
5509 \178\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
5510 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
5511 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
5512 \179\000\179\000\179\000\255\255\255\255\255\255\255\255\255\255\
5513 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5514 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5515 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5516 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5517 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5518 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5519 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5520 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5521 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
5522 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
5523 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\255\255\
5524 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
5525 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
5526 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
5527 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\255\255\
5528 \179\000\179\000\179\000\179\000\179\000\179\000\179\000\179\000\
5529 \181\000\255\255\255\255\181\000\181\000\181\000\255\255\255\255\
5530 \255\255\181\000\181\000\255\255\181\000\181\000\181\000\255\255\
5531 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5532 \255\255\181\000\255\255\181\000\181\000\181\000\181\000\181\000\
5533 \181\000\181\000\181\000\181\000\181\000\181\000\181\000\181\000\
5534 \181\000\181\000\181\000\181\000\181\000\181\000\181\000\181\000\
5535 \181\000\181\000\181\000\181\000\181\000\181\000\181\000\181\000\
5536 \181\000\181\000\255\255\181\000\255\255\181\000\181\000\255\255\
5537 \181\000\181\000\181\000\181\000\181\000\181\000\181\000\181\000\
5538 \181\000\181\000\181\000\181\000\181\000\181\000\181\000\181\000\
5539 \181\000\181\000\181\000\181\000\181\000\181\000\181\000\181\000\
5540 \181\000\181\000\255\255\181\000\255\255\181\000\255\255\255\255\
5541 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5542 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5543 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5544 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5545 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5546 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5547 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5548 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\181\000\
5549 \181\000\181\000\181\000\181\000\181\000\181\000\181\000\181\000\
5550 \181\000\181\000\181\000\181\000\181\000\181\000\181\000\181\000\
5551 \181\000\181\000\181\000\181\000\181\000\181\000\255\255\181\000\
5552 \181\000\181\000\181\000\181\000\181\000\181\000\181\000\181\000\
5553 \181\000\181\000\181\000\181\000\181\000\181\000\181\000\181\000\
5554 \181\000\181\000\181\000\181\000\181\000\181\000\181\000\181\000\
5555 \181\000\181\000\181\000\181\000\181\000\181\000\255\255\181\000\
5556 \181\000\181\000\181\000\181\000\181\000\181\000\181\000\182\000\
5557 \255\255\255\255\182\000\182\000\182\000\255\255\255\255\255\255\
5558 \182\000\182\000\255\255\182\000\182\000\182\000\255\255\255\255\
5559 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5560 \182\000\255\255\182\000\182\000\182\000\182\000\182\000\255\255\
5561 \255\255\255\255\255\255\255\255\255\255\255\255\183\000\255\255\
5562 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\183\000\
5563 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
5564 \183\000\255\255\182\000\183\000\182\000\255\255\255\255\183\000\
5565 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
5566 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
5567 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
5568 \183\000\183\000\182\000\255\255\182\000\255\255\183\000\255\255\
5569 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
5570 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
5571 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
5572 \183\000\183\000\255\255\255\255\255\255\255\255\255\255\255\255\
5573 \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
5574 \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
5575 \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
5576 \184\000\184\000\255\255\255\255\255\255\255\255\184\000\255\255\
5577 \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
5578 \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
5579 \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
5580 \184\000\184\000\255\255\255\255\255\255\255\255\255\255\183\000\
5581 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
5582 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
5583 \183\000\183\000\183\000\183\000\183\000\183\000\255\255\183\000\
5584 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
5585 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
5586 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
5587 \183\000\183\000\183\000\183\000\183\000\183\000\255\255\183\000\
5588 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\184\000\
5589 \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
5590 \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
5591 \184\000\184\000\184\000\184\000\184\000\184\000\255\255\184\000\
5592 \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
5593 \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
5594 \184\000\184\000\184\000\184\000\184\000\184\000\184\000\184\000\
5595 \184\000\184\000\184\000\184\000\184\000\184\000\186\000\184\000\
5596 \184\000\184\000\184\000\184\000\184\000\184\000\184\000\186\000\
5597 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
5598 \186\000\255\255\255\255\186\000\255\255\255\255\255\255\255\255\
5599 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
5600 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
5601 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
5602 \186\000\186\000\255\255\255\255\255\255\255\255\186\000\255\255\
5603 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
5604 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
5605 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
5606 \186\000\186\000\255\255\255\255\255\255\255\255\255\255\255\255\
5607 \196\000\196\000\196\000\196\000\196\000\196\000\196\000\196\000\
5608 \196\000\196\000\196\000\196\000\196\000\196\000\196\000\196\000\
5609 \196\000\196\000\196\000\196\000\196\000\196\000\196\000\196\000\
5610 \196\000\196\000\255\255\255\255\255\255\255\255\196\000\255\255\
5611 \196\000\196\000\196\000\196\000\196\000\196\000\196\000\196\000\
5612 \196\000\196\000\196\000\196\000\196\000\196\000\196\000\196\000\
5613 \196\000\196\000\196\000\196\000\196\000\196\000\196\000\196\000\
5614 \196\000\196\000\255\255\255\255\255\255\255\255\255\255\186\000\
5615 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
5616 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
5617 \186\000\186\000\186\000\186\000\186\000\186\000\255\255\186\000\
5618 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
5619 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
5620 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\186\000\
5621 \186\000\186\000\186\000\186\000\186\000\186\000\255\255\186\000\
5622 \186\000\186\000\186\000\186\000\186\000\186\000\186\000\196\000\
5623 \196\000\196\000\196\000\196\000\196\000\196\000\196\000\196\000\
5624 \196\000\196\000\196\000\196\000\196\000\196\000\196\000\196\000\
5625 \196\000\196\000\196\000\196\000\196\000\196\000\255\255\196\000\
5626 \196\000\196\000\196\000\196\000\196\000\196\000\196\000\196\000\
5627 \196\000\196\000\196\000\196\000\196\000\196\000\196\000\196\000\
5628 \196\000\196\000\196\000\196\000\196\000\196\000\196\000\196\000\
5629 \196\000\196\000\196\000\196\000\196\000\196\000\255\255\196\000\
5630 \196\000\196\000\196\000\196\000\196\000\196\000\196\000\197\000\
5631 \197\000\197\000\197\000\197\000\197\000\197\000\197\000\197\000\
5632 \197\000\197\000\197\000\197\000\197\000\197\000\197\000\197\000\
5633 \197\000\197\000\197\000\197\000\197\000\197\000\197\000\197\000\
5634 \197\000\255\255\255\255\255\255\255\255\197\000\255\255\197\000\
5635 \197\000\197\000\197\000\197\000\197\000\197\000\197\000\197\000\
5636 \197\000\197\000\197\000\197\000\197\000\197\000\197\000\197\000\
5637 \197\000\197\000\197\000\197\000\197\000\197\000\197\000\197\000\
5638 \197\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5639 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5640 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5641 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5642 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5643 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5644 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5645 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5646 \255\255\255\255\255\255\255\255\255\255\255\255\197\000\197\000\
5647 \197\000\197\000\197\000\197\000\197\000\197\000\197\000\197\000\
5648 \197\000\197\000\197\000\197\000\197\000\197\000\197\000\197\000\
5649 \197\000\197\000\197\000\197\000\197\000\255\255\197\000\197\000\
5650 \197\000\197\000\197\000\197\000\197\000\197\000\197\000\197\000\
5651 \197\000\197\000\197\000\197\000\197\000\197\000\197\000\197\000\
5652 \197\000\197\000\197\000\197\000\197\000\197\000\197\000\197\000\
5653 \197\000\197\000\197\000\197\000\197\000\198\000\197\000\197\000\
5654 \197\000\197\000\197\000\197\000\197\000\197\000\198\000\198\000\
5655 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
5656 \255\255\255\255\198\000\255\255\255\255\255\255\198\000\198\000\
5657 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
5658 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
5659 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
5660 \198\000\255\255\255\255\255\255\255\255\198\000\255\255\198\000\
5661 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
5662 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
5663 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
5664 \198\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5665 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5666 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5667 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5668 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5669 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5670 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5671 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5672 \255\255\255\255\255\255\255\255\255\255\255\255\198\000\198\000\
5673 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
5674 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
5675 \198\000\198\000\198\000\198\000\198\000\255\255\198\000\198\000\
5676 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
5677 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
5678 \198\000\198\000\198\000\198\000\198\000\198\000\198\000\198\000\
5679 \198\000\198\000\198\000\198\000\198\000\199\000\198\000\198\000\
5680 \198\000\198\000\198\000\198\000\198\000\198\000\199\000\199\000\
5681 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
5682 \255\255\255\255\199\000\255\255\255\255\255\255\255\255\199\000\
5683 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
5684 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
5685 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
5686 \199\000\255\255\255\255\255\255\255\255\199\000\255\255\199\000\
5687 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
5688 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
5689 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
5690 \199\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5691 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5692 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5693 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5694 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5695 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5696 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5697 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5698 \255\255\255\255\255\255\255\255\255\255\255\255\199\000\199\000\
5699 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
5700 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
5701 \199\000\199\000\199\000\199\000\199\000\255\255\199\000\199\000\
5702 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
5703 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
5704 \199\000\199\000\199\000\199\000\199\000\199\000\199\000\199\000\
5705 \199\000\199\000\199\000\199\000\199\000\255\255\199\000\199\000\
5706 \199\000\199\000\199\000\199\000\199\000\199\000\201\000\255\255\
5707 \255\255\201\000\255\255\255\255\255\255\255\255\255\255\255\255\
5708 \201\000\255\255\201\000\201\000\201\000\201\000\201\000\201\000\
5709 \201\000\201\000\201\000\201\000\201\000\255\255\255\255\255\255\
5710 \255\255\255\255\255\255\201\000\201\000\201\000\201\000\201\000\
5711 \201\000\201\000\201\000\201\000\201\000\201\000\201\000\201\000\
5712 \201\000\201\000\201\000\201\000\201\000\201\000\201\000\201\000\
5713 \201\000\201\000\201\000\201\000\201\000\255\255\255\255\255\255\
5714 \255\255\201\000\201\000\201\000\201\000\201\000\201\000\201\000\
5715 \201\000\201\000\201\000\201\000\201\000\201\000\201\000\201\000\
5716 \201\000\201\000\201\000\201\000\201\000\201\000\201\000\201\000\
5717 \201\000\201\000\201\000\201\000\201\000\255\255\255\255\255\255\
5718 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5719 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5720 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5721 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5722 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5723 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5724 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5725 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5726 \255\255\255\255\201\000\201\000\201\000\201\000\201\000\201\000\
5727 \201\000\201\000\201\000\201\000\201\000\201\000\201\000\201\000\
5728 \201\000\201\000\201\000\201\000\201\000\201\000\201\000\201\000\
5729 \201\000\255\255\201\000\201\000\201\000\201\000\201\000\201\000\
5730 \201\000\201\000\201\000\201\000\201\000\201\000\201\000\201\000\
5731 \201\000\201\000\201\000\201\000\201\000\201\000\201\000\201\000\
5732 \201\000\201\000\201\000\201\000\201\000\201\000\201\000\201\000\
5733 \201\000\255\255\201\000\201\000\201\000\201\000\201\000\201\000\
5734 \201\000\201\000\201\000\205\000\255\255\255\255\255\255\255\255\
5735 \255\255\255\255\255\255\255\255\205\000\205\000\205\000\205\000\
5736 \205\000\205\000\205\000\205\000\205\000\205\000\205\000\255\255\
5737 \255\255\255\255\255\255\255\255\255\255\205\000\205\000\205\000\
5738 \205\000\205\000\205\000\205\000\205\000\205\000\205\000\205\000\
5739 \205\000\205\000\205\000\205\000\205\000\205\000\205\000\205\000\
5740 \205\000\205\000\205\000\205\000\205\000\205\000\205\000\255\255\
5741 \255\255\255\255\255\255\205\000\255\255\205\000\205\000\205\000\
5742 \205\000\205\000\205\000\205\000\205\000\205\000\205\000\205\000\
5743 \205\000\205\000\205\000\205\000\205\000\205\000\205\000\205\000\
5744 \205\000\205\000\205\000\205\000\205\000\205\000\205\000\255\255\
5745 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5746 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5747 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5748 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5749 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5750 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5751 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5752 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5753 \255\255\255\255\255\255\255\255\205\000\205\000\205\000\205\000\
5754 \205\000\205\000\205\000\205\000\205\000\205\000\205\000\205\000\
5755 \205\000\205\000\205\000\205\000\205\000\205\000\205\000\205\000\
5756 \205\000\205\000\205\000\255\255\205\000\205\000\205\000\205\000\
5757 \205\000\205\000\205\000\205\000\205\000\205\000\205\000\205\000\
5758 \205\000\205\000\205\000\205\000\205\000\205\000\205\000\205\000\
5759 \205\000\205\000\205\000\205\000\205\000\205\000\205\000\205\000\
5760 \205\000\205\000\205\000\255\255\205\000\205\000\205\000\205\000\
5761 \205\000\205\000\205\000\205\000\206\000\255\255\255\255\255\255\
5762 \255\255\255\255\255\255\206\000\255\255\206\000\206\000\206\000\
5763 \206\000\206\000\206\000\206\000\206\000\206\000\206\000\206\000\
5764 \255\255\255\255\255\255\255\255\255\255\255\255\206\000\206\000\
5765 \206\000\206\000\206\000\206\000\206\000\206\000\206\000\206\000\
5766 \206\000\206\000\206\000\206\000\206\000\206\000\206\000\206\000\
5767 \206\000\206\000\206\000\206\000\206\000\206\000\206\000\206\000\
5768 \255\255\255\255\255\255\255\255\206\000\255\255\206\000\206\000\
5769 \206\000\206\000\206\000\206\000\206\000\206\000\206\000\206\000\
5770 \206\000\206\000\206\000\206\000\206\000\206\000\206\000\206\000\
5771 \206\000\206\000\206\000\206\000\206\000\206\000\206\000\206\000\
5772 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5773 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5774 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5775 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5776 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5777 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5778 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5779 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5780 \255\255\255\255\255\255\255\255\255\255\206\000\206\000\206\000\
5781 \206\000\206\000\206\000\206\000\206\000\206\000\206\000\206\000\
5782 \206\000\206\000\206\000\206\000\206\000\206\000\206\000\206\000\
5783 \206\000\206\000\206\000\206\000\255\255\206\000\206\000\206\000\
5784 \206\000\206\000\206\000\206\000\206\000\206\000\206\000\206\000\
5785 \206\000\206\000\206\000\206\000\206\000\206\000\206\000\206\000\
5786 \206\000\206\000\206\000\206\000\206\000\206\000\206\000\206\000\
5787 \206\000\206\000\206\000\206\000\209\000\206\000\206\000\206\000\
5788 \206\000\206\000\206\000\206\000\206\000\209\000\209\000\209\000\
5789 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
5790 \255\255\255\255\255\255\255\255\255\255\255\255\209\000\209\000\
5791 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
5792 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
5793 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
5794 \255\255\255\255\255\255\255\255\209\000\255\255\209\000\209\000\
5795 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
5796 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
5797 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
5798 \255\255\255\255\255\255\255\255\255\255\255\255\218\000\218\000\
5799 \218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\
5800 \218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\
5801 \218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\
5802 \255\255\255\255\255\255\255\255\218\000\255\255\218\000\218\000\
5803 \218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\
5804 \218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\
5805 \218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\
5806 \255\255\255\255\255\255\255\255\255\255\209\000\209\000\209\000\
5807 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
5808 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
5809 \209\000\209\000\209\000\209\000\255\255\209\000\209\000\209\000\
5810 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
5811 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
5812 \209\000\209\000\209\000\209\000\209\000\209\000\209\000\209\000\
5813 \209\000\209\000\209\000\209\000\255\255\209\000\209\000\209\000\
5814 \209\000\209\000\209\000\209\000\209\000\218\000\218\000\218\000\
5815 \218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\
5816 \218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\
5817 \218\000\218\000\218\000\218\000\255\255\218\000\218\000\218\000\
5818 \218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\
5819 \218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\
5820 \218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\
5821 \218\000\218\000\218\000\218\000\255\255\218\000\218\000\218\000\
5822 \218\000\218\000\218\000\218\000\218\000\219\000\219\000\219\000\
5823 \219\000\219\000\219\000\219\000\219\000\219\000\219\000\219\000\
5824 \219\000\219\000\219\000\219\000\219\000\219\000\219\000\219\000\
5825 \219\000\219\000\219\000\219\000\219\000\219\000\219\000\255\255\
5826 \255\255\255\255\255\255\219\000\255\255\219\000\219\000\219\000\
5827 \219\000\219\000\219\000\219\000\219\000\219\000\219\000\219\000\
5828 \219\000\219\000\219\000\219\000\219\000\219\000\219\000\219\000\
5829 \219\000\219\000\219\000\219\000\219\000\219\000\219\000\255\255\
5830 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5831 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5832 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5833 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5834 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5835 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5836 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5837 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5838 \255\255\255\255\255\255\255\255\219\000\219\000\219\000\219\000\
5839 \219\000\219\000\219\000\219\000\219\000\219\000\219\000\219\000\
5840 \219\000\219\000\219\000\219\000\219\000\219\000\219\000\219\000\
5841 \219\000\219\000\219\000\255\255\219\000\219\000\219\000\219\000\
5842 \219\000\219\000\219\000\219\000\219\000\219\000\219\000\219\000\
5843 \219\000\219\000\219\000\219\000\219\000\219\000\219\000\219\000\
5844 \219\000\219\000\219\000\219\000\219\000\219\000\219\000\219\000\
5845 \219\000\219\000\219\000\220\000\219\000\219\000\219\000\219\000\
5846 \219\000\219\000\219\000\219\000\220\000\220\000\220\000\220\000\
5847 \220\000\220\000\220\000\220\000\220\000\220\000\255\255\255\255\
5848 \220\000\255\255\255\255\255\255\220\000\220\000\220\000\220\000\
5849 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\
5850 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\
5851 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\255\255\
5852 \255\255\255\255\255\255\220\000\255\255\220\000\220\000\220\000\
5853 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\
5854 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\
5855 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\255\255\
5856 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5857 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5858 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5859 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5860 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5861 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5862 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5863 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5864 \255\255\255\255\255\255\255\255\220\000\220\000\220\000\220\000\
5865 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\
5866 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\
5867 \220\000\220\000\220\000\255\255\220\000\220\000\220\000\220\000\
5868 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\
5869 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\
5870 \220\000\220\000\220\000\220\000\220\000\220\000\220\000\220\000\
5871 \220\000\220\000\220\000\221\000\220\000\220\000\220\000\220\000\
5872 \220\000\220\000\220\000\220\000\221\000\221\000\221\000\221\000\
5873 \221\000\221\000\221\000\221\000\221\000\221\000\255\255\255\255\
5874 \221\000\255\255\255\255\255\255\255\255\221\000\221\000\221\000\
5875 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\221\000\
5876 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\221\000\
5877 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\255\255\
5878 \255\255\255\255\255\255\221\000\255\255\221\000\221\000\221\000\
5879 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\221\000\
5880 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\221\000\
5881 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\255\255\
5882 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5883 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5884 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5885 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5886 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5887 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5888 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5889 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
5890 \255\255\255\255\255\255\255\255\221\000\221\000\221\000\221\000\
5891 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\221\000\
5892 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\221\000\
5893 \221\000\221\000\221\000\255\255\221\000\221\000\221\000\221\000\
5894 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\221\000\
5895 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\221\000\
5896 \221\000\221\000\221\000\221\000\221\000\221\000\221\000\221\000\
5897 \221\000\221\000\221\000\255\255\221\000\221\000\221\000\221\000\
5898 \221\000\221\000\221\000\221\000\255\255";
5899 Lexing.lex_base_code =
5900 "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5901 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5902 \000\000\000\000\000\000\027\000\000\000\000\000\000\000\000\000\
5903 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5904 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5905 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5906 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5907 \000\000\000\000\000\000\000\000\066\000\101\000\136\000\171\000\
5908 \206\000\000\000\000\000\000\000\000\000\241\000\020\001\055\001\
5909 \000\000\000\000\018\000\090\001\125\001\160\001\195\001\230\001\
5910 \000\000\021\000\026\000\000\000\000\000\000\000\000\000\000\000\
5911 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5912 \000\000\000\000\000\000\247\001\040\002\000\000\034\000\000\000\
5913 \000\000\003\000\000\000\000\000\049\000\000\000\000\000\000\000\
5914 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5915 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5916 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5917 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5918 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5919 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5920 \000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\
5921 \000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\
5922 \000\000\000\000\000\000\000\000\000\000\036\002\000\000\244\002\
5923 \000\000\000\000\000\000\061\000\000\000\000\000\000\000\000\000\
5924 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5925 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5926 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5927 \000\000\000\000\000\000\000\000\000\000\000\000";
5928 Lexing.lex_backtrk_code =
5929 "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5930 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5931 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5932 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5933 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5934 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5935 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5936 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5937 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5938 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5939 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5940 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5941 \000\000\000\000\000\000\000\000\000\000\034\000\000\000\000\000\
5942 \000\000\000\000\000\000\049\000\000\000\000\000\000\000\000\000\
5943 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5944 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5945 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5946 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5947 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5948 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5949 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5950 \000\000\000\000\061\000\061\000\000\000\000\000\000\000\000\000\
5951 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5952 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5953 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5954 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5955 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5956 \000\000\000\000\000\000\000\000\000\000\000\000";
5957 Lexing.lex_default_code =
5958 "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5959 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5960 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5961 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5962 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5963 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5964 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5965 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5966 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5967 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5968 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5969 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5970 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5971 \041\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5972 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5973 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5974 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5975 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5976 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5977 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5978 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5979 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5980 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5981 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5982 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5983 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5984 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5985 \000\000\000\000\000\000\000\000\000\000\000\000";
5986 Lexing.lex_trans_code =
5987 "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5988 \000\000\001\000\000\000\058\000\058\000\000\000\058\000\000\000\
5989 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5990 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5991 \001\000\000\000\000\000\001\000\007\000\044\000\000\000\007\000\
5992 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
5993 \004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
5994 \004\000\004\000\000\000\007\000\012\000\000\000\000\000\012\000\
5995 \012\000\012\000\000\000\000\000\000\000\000\000\012\000\000\000\
5996 \012\000\012\000\012\000\007\000\000\000\000\000\007\000\000\000\
5997 \000\000\000\000\000\000\000\000\000\000\012\000\000\000\012\000\
5998 \012\000\012\000\012\000\012\000\000\000\000\000\000\000\000\000\
5999 \000\000\000\000\007\000\015\000\000\000\000\000\015\000\015\000\
6000 \015\000\000\000\000\000\000\000\015\000\015\000\000\000\015\000\
6001 \015\000\015\000\000\000\000\000\000\000\000\000\000\000\012\000\
6002 \000\000\012\000\000\000\000\000\015\000\000\000\015\000\015\000\
6003 \015\000\015\000\015\000\000\000\000\000\000\000\012\000\000\000\
6004 \000\000\012\000\012\000\012\000\000\000\000\000\000\000\012\000\
6005 \012\000\000\000\012\000\012\000\012\000\000\000\000\000\012\000\
6006 \000\000\012\000\000\000\000\000\000\000\000\000\015\000\012\000\
6007 \015\000\012\000\012\000\012\000\012\000\012\000\000\000\000\000\
6008 \000\000\012\000\000\000\000\000\012\000\012\000\012\000\000\000\
6009 \000\000\000\000\012\000\012\000\000\000\012\000\012\000\012\000\
6010 \000\000\000\000\000\000\000\000\000\000\000\000\015\000\000\000\
6011 \015\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
6012 \012\000\000\000\000\000\000\000\012\000\000\000\000\000\012\000\
6013 \012\000\012\000\000\000\000\000\000\000\012\000\012\000\000\000\
6014 \012\000\012\000\012\000\000\000\000\000\000\000\000\000\000\000\
6015 \000\000\012\000\000\000\012\000\012\000\012\000\012\000\012\000\
6016 \012\000\012\000\012\000\012\000\000\000\000\000\000\000\012\000\
6017 \000\000\000\000\012\000\012\000\012\000\000\000\000\000\000\000\
6018 \012\000\012\000\000\000\012\000\012\000\012\000\000\000\000\000\
6019 \000\000\000\000\000\000\000\000\012\000\000\000\012\000\012\000\
6020 \012\000\012\000\012\000\012\000\012\000\012\000\012\000\000\000\
6021 \000\000\000\000\012\000\000\000\000\000\012\000\012\000\012\000\
6022 \000\000\000\000\000\000\012\000\012\000\000\000\012\000\012\000\
6023 \012\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\
6024 \000\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
6025 \012\000\012\000\000\000\000\000\000\000\012\000\000\000\000\000\
6026 \012\000\012\000\012\000\000\000\000\000\000\000\012\000\012\000\
6027 \000\000\012\000\012\000\012\000\000\000\000\000\000\000\000\000\
6028 \000\000\000\000\012\000\000\000\012\000\012\000\012\000\012\000\
6029 \012\000\012\000\012\000\012\000\012\000\000\000\000\000\000\000\
6030 \012\000\000\000\000\000\012\000\012\000\012\000\000\000\000\000\
6031 \000\000\012\000\012\000\000\000\012\000\012\000\012\000\000\000\
6032 \000\000\000\000\000\000\000\000\000\000\012\000\000\000\012\000\
6033 \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
6034 \000\000\000\000\000\000\012\000\000\000\000\000\012\000\012\000\
6035 \012\000\000\000\000\000\000\000\012\000\012\000\000\000\012\000\
6036 \012\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\
6037 \012\000\000\000\012\000\012\000\012\000\012\000\012\000\012\000\
6038 \012\000\012\000\012\000\000\000\000\000\000\000\012\000\000\000\
6039 \000\000\012\000\012\000\012\000\000\000\000\000\000\000\012\000\
6040 \012\000\000\000\012\000\012\000\012\000\000\000\000\000\000\000\
6041 \000\000\000\000\000\000\012\000\000\000\012\000\012\000\012\000\
6042 \012\000\012\000\012\000\012\000\012\000\012\000\000\000\000\000\
6043 \000\000\012\000\000\000\000\000\012\000\012\000\012\000\000\000\
6044 \000\000\000\000\012\000\012\000\000\000\012\000\012\000\012\000\
6045 \000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\
6046 \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\
6047 \012\000\000\000\000\000\000\000\015\000\000\000\000\000\015\000\
6048 \015\000\015\000\000\000\000\000\000\000\015\000\015\000\000\000\
6049 \015\000\015\000\015\000\000\000\000\000\000\000\000\000\000\000\
6050 \000\000\012\000\000\000\012\000\012\000\015\000\012\000\015\000\
6051 \015\000\015\000\015\000\015\000\000\000\000\000\000\000\015\000\
6052 \000\000\000\000\015\000\015\000\015\000\000\000\000\000\000\000\
6053 \015\000\015\000\000\000\015\000\015\000\015\000\000\000\000\000\
6054 \000\000\029\000\000\000\000\000\012\000\000\000\012\000\015\000\
6055 \015\000\015\000\015\000\015\000\015\000\015\000\015\000\004\000\
6056 \004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
6057 \004\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\
6058 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\000\
6059 \000\000\015\000\015\000\000\000\015\000\000\000\000\000\000\000\
6060 \001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
6061 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
6062 \004\000\004\000\004\000\004\000\004\000\004\000\004\000\004\000\
6063 \004\000\004\000\015\000\000\000\015\000\058\000\058\000\058\000\
6064 \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
6065 \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
6066 \058\000\058\000\058\000\058\000\058\000\058\000\058\000\000\000\
6067 \000\000\000\000\000\000\058\000\000\000\058\000\058\000\058\000\
6068 \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
6069 \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
6070 \058\000\058\000\058\000\058\000\058\000\058\000\058\000\000\000\
6071 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
6072 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
6073 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
6074 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
6075 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
6076 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
6077 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
6078 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
6079 \000\000\000\000\000\000\000\000\058\000\058\000\058\000\058\000\
6080 \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
6081 \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
6082 \058\000\058\000\058\000\000\000\058\000\058\000\058\000\058\000\
6083 \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
6084 \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
6085 \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
6086 \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
6087 \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
6088 \058\000\058\000\058\000\058\000\058\000\058\000\000\000\000\000\
6089 \000\000\000\000\000\000\000\000\000\000\058\000\058\000\058\000\
6090 \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
6091 \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
6092 \058\000\058\000\058\000\058\000\058\000\058\000\058\000\000\000\
6093 \000\000\000\000\000\000\058\000\000\000\058\000\058\000\058\000\
6094 \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
6095 \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
6096 \058\000\058\000\058\000\058\000\058\000\058\000\058\000\000\000\
6097 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
6098 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
6099 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
6100 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
6101 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
6102 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
6103 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
6104 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
6105 \000\000\000\000\000\000\000\000\058\000\058\000\058\000\058\000\
6106 \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
6107 \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
6108 \058\000\058\000\058\000\000\000\058\000\058\000\058\000\058\000\
6109 \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
6110 \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
6111 \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\
6112 \058\000\058\000\058\000\000\000\058\000\058\000\058\000\058\000\
6113 \058\000\058\000\058\000\058\000\000\000";
6114 Lexing.lex_check_code =
6115 "\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
6116 \255\255\016\000\104\000\164\000\170\000\104\000\164\000\255\255\
6117 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
6118 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
6119 \016\000\255\255\104\000\000\000\019\000\105\000\255\255\019\000\
6120 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
6121 \016\000\016\000\016\000\016\000\016\000\016\000\016\000\016\000\
6122 \016\000\016\000\255\255\019\000\019\000\255\255\255\255\019\000\
6123 \019\000\019\000\255\255\255\255\255\255\255\255\019\000\255\255\
6124 \019\000\019\000\019\000\060\000\255\255\255\255\060\000\255\255\
6125 \255\255\255\255\255\255\255\255\255\255\019\000\255\255\019\000\
6126 \019\000\019\000\019\000\019\000\255\255\255\255\255\255\255\255\
6127 \255\255\255\255\060\000\060\000\255\255\255\255\060\000\060\000\
6128 \060\000\255\255\255\255\255\255\060\000\060\000\255\255\060\000\
6129 \060\000\060\000\255\255\255\255\255\255\255\255\255\255\019\000\
6130 \255\255\019\000\255\255\255\255\060\000\255\255\060\000\060\000\
6131 \060\000\060\000\060\000\255\255\255\255\255\255\061\000\255\255\
6132 \255\255\061\000\061\000\061\000\255\255\255\255\255\255\061\000\
6133 \061\000\255\255\061\000\061\000\061\000\255\255\255\255\019\000\
6134 \255\255\019\000\255\255\255\255\255\255\255\255\060\000\061\000\
6135 \060\000\061\000\061\000\061\000\061\000\061\000\255\255\255\255\
6136 \255\255\062\000\255\255\255\255\062\000\062\000\062\000\255\255\
6137 \255\255\255\255\062\000\062\000\255\255\062\000\062\000\062\000\
6138 \255\255\255\255\255\255\255\255\255\255\255\255\060\000\255\255\
6139 \060\000\061\000\062\000\061\000\062\000\062\000\062\000\062\000\
6140 \062\000\255\255\255\255\255\255\063\000\255\255\255\255\063\000\
6141 \063\000\063\000\255\255\255\255\255\255\063\000\063\000\255\255\
6142 \063\000\063\000\063\000\255\255\255\255\255\255\255\255\255\255\
6143 \255\255\061\000\255\255\061\000\062\000\063\000\062\000\063\000\
6144 \063\000\063\000\063\000\063\000\255\255\255\255\255\255\064\000\
6145 \255\255\255\255\064\000\064\000\064\000\255\255\255\255\255\255\
6146 \064\000\064\000\255\255\064\000\064\000\064\000\255\255\255\255\
6147 \104\000\255\255\255\255\255\255\062\000\255\255\062\000\063\000\
6148 \064\000\063\000\064\000\064\000\064\000\064\000\064\000\255\255\
6149 \255\255\255\255\069\000\255\255\255\255\069\000\069\000\069\000\
6150 \255\255\255\255\255\255\069\000\069\000\255\255\069\000\069\000\
6151 \069\000\255\255\255\255\255\255\255\255\255\255\255\255\063\000\
6152 \255\255\063\000\064\000\069\000\064\000\069\000\069\000\069\000\
6153 \069\000\069\000\255\255\255\255\255\255\070\000\255\255\255\255\
6154 \070\000\070\000\070\000\255\255\255\255\255\255\070\000\070\000\
6155 \255\255\070\000\070\000\070\000\255\255\255\255\255\255\255\255\
6156 \255\255\255\255\064\000\255\255\064\000\069\000\070\000\069\000\
6157 \070\000\070\000\070\000\070\000\070\000\255\255\255\255\255\255\
6158 \071\000\255\255\255\255\071\000\071\000\071\000\255\255\255\255\
6159 \255\255\071\000\071\000\255\255\071\000\071\000\071\000\255\255\
6160 \255\255\255\255\255\255\255\255\255\255\069\000\255\255\069\000\
6161 \070\000\071\000\070\000\071\000\071\000\071\000\071\000\071\000\
6162 \255\255\255\255\255\255\075\000\255\255\255\255\075\000\075\000\
6163 \075\000\255\255\255\255\255\255\075\000\075\000\255\255\075\000\
6164 \075\000\075\000\255\255\255\255\255\255\255\255\255\255\255\255\
6165 \070\000\255\255\070\000\071\000\075\000\071\000\075\000\075\000\
6166 \075\000\075\000\075\000\255\255\255\255\255\255\076\000\255\255\
6167 \255\255\076\000\076\000\076\000\255\255\255\255\255\255\076\000\
6168 \076\000\255\255\076\000\076\000\076\000\255\255\255\255\255\255\
6169 \255\255\255\255\255\255\071\000\255\255\071\000\075\000\076\000\
6170 \075\000\076\000\076\000\076\000\076\000\076\000\255\255\255\255\
6171 \255\255\077\000\255\255\255\255\077\000\077\000\077\000\255\255\
6172 \255\255\255\255\077\000\077\000\255\255\077\000\077\000\077\000\
6173 \255\255\255\255\255\255\255\255\255\255\255\255\075\000\255\255\
6174 \075\000\076\000\077\000\076\000\077\000\077\000\077\000\077\000\
6175 \077\000\255\255\255\255\255\255\078\000\255\255\255\255\078\000\
6176 \078\000\078\000\255\255\255\255\255\255\078\000\078\000\255\255\
6177 \078\000\078\000\078\000\255\255\255\255\255\255\255\255\255\255\
6178 \255\255\076\000\255\255\076\000\077\000\078\000\077\000\078\000\
6179 \078\000\078\000\078\000\078\000\255\255\255\255\255\255\079\000\
6180 \255\255\255\255\079\000\079\000\079\000\255\255\255\255\255\255\
6181 \079\000\079\000\255\255\079\000\079\000\079\000\255\255\255\255\
6182 \255\255\099\000\255\255\255\255\077\000\255\255\077\000\078\000\
6183 \079\000\078\000\079\000\079\000\079\000\079\000\079\000\099\000\
6184 \099\000\099\000\099\000\099\000\099\000\099\000\099\000\099\000\
6185 \099\000\100\000\255\255\255\255\255\255\255\255\255\255\255\255\
6186 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\078\000\
6187 \255\255\078\000\079\000\255\255\079\000\255\255\255\255\255\255\
6188 \100\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
6189 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
6190 \100\000\100\000\100\000\100\000\100\000\100\000\100\000\100\000\
6191 \100\000\100\000\079\000\255\255\079\000\181\000\181\000\181\000\
6192 \181\000\181\000\181\000\181\000\181\000\181\000\181\000\181\000\
6193 \181\000\181\000\181\000\181\000\181\000\181\000\181\000\181\000\
6194 \181\000\181\000\181\000\181\000\181\000\181\000\181\000\255\255\
6195 \255\255\255\255\255\255\181\000\255\255\181\000\181\000\181\000\
6196 \181\000\181\000\181\000\181\000\181\000\181\000\181\000\181\000\
6197 \181\000\181\000\181\000\181\000\181\000\181\000\181\000\181\000\
6198 \181\000\181\000\181\000\181\000\181\000\181\000\181\000\255\255\
6199 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
6200 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
6201 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
6202 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
6203 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
6204 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
6205 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
6206 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
6207 \255\255\255\255\255\255\255\255\181\000\181\000\181\000\181\000\
6208 \181\000\181\000\181\000\181\000\181\000\181\000\181\000\181\000\
6209 \181\000\181\000\181\000\181\000\181\000\181\000\181\000\181\000\
6210 \181\000\181\000\181\000\255\255\181\000\181\000\181\000\181\000\
6211 \181\000\181\000\181\000\181\000\181\000\181\000\181\000\181\000\
6212 \181\000\181\000\181\000\181\000\181\000\181\000\181\000\181\000\
6213 \181\000\181\000\181\000\181\000\181\000\181\000\181\000\181\000\
6214 \181\000\181\000\181\000\183\000\181\000\181\000\181\000\181\000\
6215 \181\000\181\000\181\000\181\000\183\000\183\000\183\000\183\000\
6216 \183\000\183\000\183\000\183\000\183\000\183\000\255\255\255\255\
6217 \255\255\255\255\255\255\255\255\255\255\183\000\183\000\183\000\
6218 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
6219 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
6220 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\255\255\
6221 \255\255\255\255\255\255\183\000\255\255\183\000\183\000\183\000\
6222 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
6223 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
6224 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\255\255\
6225 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
6226 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
6227 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
6228 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
6229 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
6230 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
6231 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
6232 \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
6233 \255\255\255\255\255\255\255\255\183\000\183\000\183\000\183\000\
6234 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
6235 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
6236 \183\000\183\000\183\000\255\255\183\000\183\000\183\000\183\000\
6237 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
6238 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
6239 \183\000\183\000\183\000\183\000\183\000\183\000\183\000\183\000\
6240 \183\000\183\000\183\000\255\255\183\000\183\000\183\000\183\000\
6241 \183\000\183\000\183\000\183\000\255\255";
6243 "\255\004\255\255\009\255\255\006\255\005\255\255\007\255\255\008\
6244 \255\255\000\007\255\000\006\001\008\255\000\005\255\011\255\010\
6245 \255\255\003\255\000\004\001\009\255\011\255\255\010\255\011\255\
6246 \255\000\004\001\009\003\010\002\011\255\001\255\255\000\001\255\
6250 let rec token c lexbuf =
6251 (lexbuf.Lexing.lex_mem <- Array.create 12 (-1);
6252 __ocaml_lex_token_rec c lexbuf 0)
6253 and __ocaml_lex_token_rec c lexbuf __ocaml_lex_state =
6254 match Lexing.new_engine __ocaml_lex_tables __ocaml_lex_state
6257 | 0 -> (update_loc c None 1 false 0; NEWLINE)
6260 Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
6261 lexbuf.Lexing.lex_curr_pos
6265 Lexing.sub_lexeme lexbuf
6266 (lexbuf.Lexing.lex_start_pos + 1)
6267 (lexbuf.Lexing.lex_curr_pos + (-1))
6271 Lexing.sub_lexeme lexbuf
6272 (lexbuf.Lexing.lex_start_pos + 1)
6273 (lexbuf.Lexing.lex_curr_pos + (-1))
6277 Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
6278 lexbuf.Lexing.lex_curr_pos
6282 Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
6283 lexbuf.Lexing.lex_curr_pos
6287 Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
6288 lexbuf.Lexing.lex_curr_pos
6290 (try INT (int_of_string i, i)
6293 err (Literal_overflow "int") (Loc.of_lexbuf lexbuf))
6296 Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
6297 lexbuf.Lexing.lex_curr_pos
6299 (try FLOAT (float_of_string f, f)
6302 err (Literal_overflow "float")
6303 (Loc.of_lexbuf lexbuf))
6306 Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
6307 (lexbuf.Lexing.lex_curr_pos + (-1))
6309 (try INT32 (Int32.of_string i, i)
6312 err (Literal_overflow "int32")
6313 (Loc.of_lexbuf lexbuf))
6316 Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
6317 (lexbuf.Lexing.lex_curr_pos + (-1))
6319 (try INT64 (Int64.of_string i, i)
6322 err (Literal_overflow "int64")
6323 (Loc.of_lexbuf lexbuf))
6326 Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
6327 (lexbuf.Lexing.lex_curr_pos + (-1))
6329 (try NATIVEINT (Nativeint.of_string i, i)
6332 err (Literal_overflow "nativeint")
6333 (Loc.of_lexbuf lexbuf))
6335 (with_curr_loc string c;
6336 let s = buff_contents c in STRING (TokenEval.string s, s))
6339 Lexing.sub_lexeme lexbuf
6340 (lexbuf.Lexing.lex_start_pos + 1)
6341 (lexbuf.Lexing.lex_curr_pos + (-1))
6343 (update_loc c None 1 false 1; CHAR (TokenEval.char x, x))
6346 Lexing.sub_lexeme lexbuf
6347 (lexbuf.Lexing.lex_start_pos + 1)
6348 (lexbuf.Lexing.lex_curr_pos + (-1))
6349 in CHAR (TokenEval.char x, x)
6352 Lexing.sub_lexeme_char lexbuf
6353 (lexbuf.Lexing.lex_start_pos + 2)
6355 err (Illegal_escape (String.make 1 c))
6356 (Loc.of_lexbuf lexbuf)
6358 (store c; COMMENT (parse_nested comment (in_comment c)))
6360 (warn Comment_start (Loc.of_lexbuf lexbuf);
6361 parse comment (in_comment c);
6362 COMMENT (buff_contents c))
6364 (warn Comment_not_end (Loc.of_lexbuf lexbuf);
6365 move_start_p (-1) c;
6369 Lexing.sub_lexeme lexbuf
6370 (lexbuf.Lexing.lex_start_pos + 2)
6371 lexbuf.Lexing.lex_curr_pos
6375 (move_start_p (- (String.length beginning));
6376 mk_quotation quotation c "" "" 2)
6377 else parse (symbolchar_star ("<<" ^ beginning)) c
6388 else parse (symbolchar_star "<<>>") c
6391 then with_curr_loc maybe_quotation_at c
6392 else parse (symbolchar_star "<@") c
6395 then with_curr_loc maybe_quotation_colon c
6396 else parse (symbolchar_star "<:") c
6399 Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(0)
6400 lexbuf.Lexing.lex_mem.(1)
6402 Lexing.sub_lexeme_opt lexbuf lexbuf.Lexing.lex_mem.(3)
6403 lexbuf.Lexing.lex_mem.(2) in
6404 let inum = int_of_string num
6406 (update_loc c name inum true 0;
6407 LINE_DIRECTIVE (inum, name))
6410 Lexing.sub_lexeme_char lexbuf
6411 (lexbuf.Lexing.lex_start_pos + 1)
6412 in ESCAPED_IDENT (String.make 1 op)
6415 Lexing.sub_lexeme lexbuf
6416 (lexbuf.Lexing.lex_start_pos + 1)
6417 (lexbuf.Lexing.lex_curr_pos + (-1))
6421 Lexing.sub_lexeme lexbuf
6422 (lexbuf.Lexing.lex_start_pos + 1)
6423 lexbuf.Lexing.lex_mem.(0)
6427 Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(0)
6428 (lexbuf.Lexing.lex_curr_pos + (-1))
6432 Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(0)
6433 lexbuf.Lexing.lex_mem.(1)
6437 Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
6438 lexbuf.Lexing.lex_curr_pos
6442 then with_curr_loc dollar (shift 1 c)
6443 else parse (symbolchar_star "$") c
6446 Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
6447 lexbuf.Lexing.lex_curr_pos
6450 let pos = lexbuf.lex_curr_p
6452 (lexbuf.lex_curr_p <-
6456 pos_bol = pos.pos_bol + 1;
6457 pos_cnum = pos.pos_cnum + 1;
6462 Lexing.sub_lexeme_char lexbuf lexbuf.Lexing.lex_start_pos
6463 in err (Illegal_character c) (Loc.of_lexbuf lexbuf)
6464 | __ocaml_lex_state ->
6465 (lexbuf.Lexing.refill_buff lexbuf;
6466 __ocaml_lex_token_rec c lexbuf __ocaml_lex_state)
6467 and comment c lexbuf = __ocaml_lex_comment_rec c lexbuf 123
6468 and __ocaml_lex_comment_rec c lexbuf __ocaml_lex_state =
6469 match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf
6471 | 0 -> (store c; with_curr_loc comment c; parse comment c)
6475 if quotations c then with_curr_loc quotation c else ();
6477 | 3 -> store_parse comment c
6480 (try with_curr_loc string c
6482 | Loc.Exc_located (_, (Error.E Unterminated_string)) ->
6483 err Unterminated_string_in_comment (loc c));
6484 Buffer.add_char c.buffer '"';
6486 | 5 -> store_parse comment c
6487 | 6 -> store_parse comment c
6488 | 7 -> (update_loc c None 1 false 1; store_parse comment c)
6489 | 8 -> store_parse comment c
6490 | 9 -> store_parse comment c
6491 | 10 -> store_parse comment c
6492 | 11 -> store_parse comment c
6493 | 12 -> err Unterminated_comment (loc c)
6494 | 13 -> (update_loc c None 1 false 0; store_parse comment c)
6495 | 14 -> store_parse comment c
6496 | __ocaml_lex_state ->
6497 (lexbuf.Lexing.refill_buff lexbuf;
6498 __ocaml_lex_comment_rec c lexbuf __ocaml_lex_state)
6499 and string c lexbuf =
6500 (lexbuf.Lexing.lex_mem <- Array.create 2 (-1);
6501 __ocaml_lex_string_rec c lexbuf 159)
6502 and __ocaml_lex_string_rec c lexbuf __ocaml_lex_state =
6503 match Lexing.new_engine __ocaml_lex_tables __ocaml_lex_state
6506 | 0 -> set_start_p c
6509 Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(0)
6510 lexbuf.Lexing.lex_curr_pos
6512 (update_loc c None 1 false (String.length space);
6513 store_parse string c)
6514 | 2 -> store_parse string c
6515 | 3 -> store_parse string c
6516 | 4 -> store_parse string c
6519 Lexing.sub_lexeme_char lexbuf
6520 (lexbuf.Lexing.lex_start_pos + 1)
6523 then store_parse string c
6525 (warn (Illegal_escape (String.make 1 x))
6526 (Loc.of_lexbuf lexbuf);
6527 store_parse string c)
6528 | 6 -> (update_loc c None 1 false 0; store_parse string c)
6529 | 7 -> err Unterminated_string (loc c)
6530 | 8 -> store_parse string c
6531 | __ocaml_lex_state ->
6532 (lexbuf.Lexing.refill_buff lexbuf;
6533 __ocaml_lex_string_rec c lexbuf __ocaml_lex_state)
6534 and symbolchar_star beginning c lexbuf =
6535 __ocaml_lex_symbolchar_star_rec beginning c lexbuf 176
6537 __ocaml_lex_symbolchar_star_rec beginning c lexbuf
6539 match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf
6543 Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
6544 lexbuf.Lexing.lex_curr_pos
6546 (move_start_p (- (String.length beginning)) c;
6547 SYMBOL (beginning ^ tok))
6548 | __ocaml_lex_state ->
6549 (lexbuf.Lexing.refill_buff lexbuf;
6550 __ocaml_lex_symbolchar_star_rec beginning c lexbuf
6552 and maybe_quotation_at c lexbuf =
6553 __ocaml_lex_maybe_quotation_at_rec c lexbuf 177
6555 __ocaml_lex_maybe_quotation_at_rec c lexbuf __ocaml_lex_state =
6556 match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf
6560 Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
6561 (lexbuf.Lexing.lex_curr_pos + (-1))
6563 mk_quotation quotation c "" loc (1 + (String.length loc))
6566 Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
6567 lexbuf.Lexing.lex_curr_pos
6568 in SYMBOL ("<@" ^ tok)
6569 | __ocaml_lex_state ->
6570 (lexbuf.Lexing.refill_buff lexbuf;
6571 __ocaml_lex_maybe_quotation_at_rec c lexbuf
6573 and maybe_quotation_colon c lexbuf =
6574 (lexbuf.Lexing.lex_mem <- Array.create 2 (-1);
6575 __ocaml_lex_maybe_quotation_colon_rec c lexbuf 181)
6577 __ocaml_lex_maybe_quotation_colon_rec c lexbuf
6579 match Lexing.new_engine __ocaml_lex_tables __ocaml_lex_state
6584 Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
6585 (lexbuf.Lexing.lex_curr_pos + (-1))
6587 mk_quotation quotation c name ""
6588 (1 + (String.length name))
6591 Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
6592 lexbuf.Lexing.lex_mem.(0)
6594 Lexing.sub_lexeme lexbuf (lexbuf.Lexing.lex_mem.(0) + 1)
6595 (lexbuf.Lexing.lex_curr_pos + (-1))
6597 mk_quotation quotation c name loc
6598 ((2 + (String.length loc)) + (String.length name))
6601 Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
6602 lexbuf.Lexing.lex_curr_pos
6603 in SYMBOL ("<:" ^ tok)
6604 | __ocaml_lex_state ->
6605 (lexbuf.Lexing.refill_buff lexbuf;
6606 __ocaml_lex_maybe_quotation_colon_rec c lexbuf
6608 and quotation c lexbuf = __ocaml_lex_quotation_rec c lexbuf 188
6609 and __ocaml_lex_quotation_rec c lexbuf __ocaml_lex_state =
6610 match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf
6612 | 0 -> (store c; with_curr_loc quotation c; parse quotation c)
6614 | 2 -> err Unterminated_quotation (loc c)
6615 | 3 -> (update_loc c None 1 false 0; store_parse quotation c)
6616 | 4 -> store_parse quotation c
6617 | __ocaml_lex_state ->
6618 (lexbuf.Lexing.refill_buff lexbuf;
6619 __ocaml_lex_quotation_rec c lexbuf __ocaml_lex_state)
6620 and dollar c lexbuf = __ocaml_lex_dollar_rec c lexbuf 201
6621 and __ocaml_lex_dollar_rec c lexbuf __ocaml_lex_state =
6622 match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf
6624 | 0 -> (set_start_p c; ANTIQUOT ("", ""))
6627 Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos
6628 (lexbuf.Lexing.lex_curr_pos + (-1))
6630 with_curr_loc (antiquot name)
6631 (shift (1 + (String.length name)) c)
6632 | 2 -> store_parse (antiquot "") c
6633 | __ocaml_lex_state ->
6634 (lexbuf.Lexing.refill_buff lexbuf;
6635 __ocaml_lex_dollar_rec c lexbuf __ocaml_lex_state)
6636 and antiquot name c lexbuf =
6637 __ocaml_lex_antiquot_rec name c lexbuf 210
6638 and __ocaml_lex_antiquot_rec name c lexbuf __ocaml_lex_state =
6639 match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf
6641 | 0 -> (set_start_p c; ANTIQUOT (name, buff_contents c))
6642 | 1 -> err Unterminated_antiquot (loc c)
6644 (update_loc c None 1 false 0;
6645 store_parse (antiquot name) c)
6648 with_curr_loc quotation c;
6649 parse (antiquot name) c)
6650 | 4 -> store_parse (antiquot name) c
6651 | __ocaml_lex_state ->
6652 (lexbuf.Lexing.refill_buff lexbuf;
6653 __ocaml_lex_antiquot_rec name c lexbuf __ocaml_lex_state)
6655 let lexing_store s buff max =
6660 (match Stream.peek s with
6661 | Some x -> (Stream.junk s; buff.[n] <- x; succ n)
6665 let from_context c =
6667 let tok = with_curr_loc token c in
6668 let loc = Loc.of_lexbuf c.lexbuf in Some (tok, loc)
6671 let from_lexbuf ?(quotations = true) lb =
6674 (default_context lb)
6676 loc = Loc.of_lexbuf lb;
6677 antiquots = !Camlp4_config.antiquotations;
6678 quotations = quotations;
6682 let setup_loc lb loc =
6683 let start_pos = Loc.start_pos loc
6685 (lb.lex_abs_pos <- start_pos.pos_cnum;
6686 lb.lex_curr_p <- start_pos)
6688 let from_string ?quotations loc str =
6689 let lb = Lexing.from_string str
6690 in (setup_loc lb loc; from_lexbuf ?quotations lb)
6692 let from_stream ?quotations loc strm =
6693 let lb = Lexing.from_function (lexing_store strm)
6694 in (setup_loc lb loc; from_lexbuf ?quotations lb)
6696 let mk () loc strm =
6697 from_stream ~quotations: !Camlp4_config.quotations loc strm
6705 module Make (Loc : Sig.Loc) : Sig.Camlp4Ast with module Loc = Loc =
6711 include Sig.MakeCamlp4Ast(Loc)
6713 let safe_string_escaped s =
6715 ((String.length s) > 2) &&
6716 ((s.[0] = '\\') && (s.[1] = '$'))
6718 else String.escaped s
6724 external loc_of_ctyp : ctyp -> Loc.t = "%field0"
6726 external loc_of_patt : patt -> Loc.t = "%field0"
6728 external loc_of_expr : expr -> Loc.t = "%field0"
6730 external loc_of_module_type : module_type -> Loc.t = "%field0"
6732 external loc_of_module_expr : module_expr -> Loc.t = "%field0"
6734 external loc_of_sig_item : sig_item -> Loc.t = "%field0"
6736 external loc_of_str_item : str_item -> Loc.t = "%field0"
6738 external loc_of_class_type : class_type -> Loc.t = "%field0"
6740 external loc_of_class_sig_item : class_sig_item -> Loc.t =
6743 external loc_of_class_expr : class_expr -> Loc.t = "%field0"
6745 external loc_of_class_str_item : class_str_item -> Loc.t =
6748 external loc_of_with_constr : with_constr -> Loc.t = "%field0"
6750 external loc_of_binding : binding -> Loc.t = "%field0"
6752 external loc_of_rec_binding : rec_binding -> Loc.t = "%field0"
6754 external loc_of_module_binding : module_binding -> Loc.t =
6757 external loc_of_match_case : match_case -> Loc.t = "%field0"
6759 external loc_of_ident : ident -> Loc.t = "%field0"
6761 let ghost = Loc.ghost
6763 let rec is_module_longident =
6765 | Ast.IdAcc (_, _, i) -> is_module_longident i
6766 | Ast.IdApp (_, i1, i2) ->
6767 (is_module_longident i1) && (is_module_longident i2)
6768 | Ast.IdUid (_, _) -> true
6774 "ident_of_expr: this expression is not an identifier" in
6777 | Ast.ExApp (_loc, e1, e2) ->
6778 Ast.IdApp (_loc, self e1, self e2)
6779 | Ast.ExAcc (_loc, e1, e2) ->
6780 Ast.IdAcc (_loc, self e1, self e2)
6781 | Ast.ExId (_, (Ast.IdLid (_, _))) -> error ()
6782 | Ast.ExId (_, i) ->
6783 if is_module_longident i then i else error ()
6787 | Ast.ExId (_, i) -> i
6788 | Ast.ExApp (_, _, _) -> error ()
6793 invalid_arg "ident_of_ctyp: this type is not an identifier" in
6796 | Ast.TyApp (_loc, t1, t2) ->
6797 Ast.IdApp (_loc, self t1, self t2)
6798 | Ast.TyId (_, (Ast.IdLid (_, _))) -> error ()
6799 | Ast.TyId (_, i) ->
6800 if is_module_longident i then i else error ()
6802 in function | Ast.TyId (_, i) -> i | t -> self t
6807 "ident_of_patt: this pattern is not an identifier" in
6810 | Ast.PaApp (_loc, p1, p2) ->
6811 Ast.IdApp (_loc, self p1, self p2)
6812 | Ast.PaId (_, (Ast.IdLid (_, _))) -> error ()
6813 | Ast.PaId (_, i) ->
6814 if is_module_longident i then i else error ()
6816 in function | Ast.PaId (_, i) -> i | p -> self p
6818 let rec is_irrefut_patt =
6820 | Ast.PaId (_, (Ast.IdLid (_, _))) -> true
6821 | Ast.PaId (_, (Ast.IdUid (_, "()"))) -> true
6822 | Ast.PaAny _ -> true
6823 | Ast.PaNil _ -> true
6824 | Ast.PaAli (_, x, y) ->
6825 (is_irrefut_patt x) && (is_irrefut_patt y)
6826 | Ast.PaRec (_, p) -> is_irrefut_patt p
6827 | Ast.PaEq (_, _, p) -> is_irrefut_patt p
6828 | Ast.PaSem (_, p1, p2) ->
6829 (is_irrefut_patt p1) && (is_irrefut_patt p2)
6830 | Ast.PaCom (_, p1, p2) ->
6831 (is_irrefut_patt p1) && (is_irrefut_patt p2)
6832 | Ast.PaOrp (_, p1, p2) ->
6833 (is_irrefut_patt p1) && (is_irrefut_patt p2)
6834 | Ast.PaApp (_, p1, p2) ->
6835 (is_irrefut_patt p1) && (is_irrefut_patt p2)
6836 | Ast.PaTyc (_, p, _) -> is_irrefut_patt p
6837 | Ast.PaTup (_, pl) -> is_irrefut_patt pl
6838 | Ast.PaOlb (_, _, (Ast.PaNil _)) -> true
6839 | Ast.PaOlb (_, _, p) -> is_irrefut_patt p
6840 | Ast.PaOlbi (_, _, p, _) -> is_irrefut_patt p
6841 | Ast.PaLab (_, _, (Ast.PaNil _)) -> true
6842 | Ast.PaLab (_, _, p) -> is_irrefut_patt p
6843 | Ast.PaLaz (_, p) -> is_irrefut_patt p
6844 | Ast.PaId (_, _) -> false
6845 | Ast.PaVrn (_, _) | Ast.PaStr (_, _) | Ast.PaRng (_, _, _) |
6846 Ast.PaFlo (_, _) | Ast.PaNativeInt (_, _) |
6847 Ast.PaInt64 (_, _) | Ast.PaInt32 (_, _) | Ast.PaInt (_, _)
6848 | Ast.PaChr (_, _) | Ast.PaTyp (_, _) | Ast.PaArr (_, _) |
6849 Ast.PaAnt (_, _) -> false
6851 let rec is_constructor =
6853 | Ast.IdAcc (_, _, i) -> is_constructor i
6854 | Ast.IdUid (_, _) -> true
6855 | Ast.IdLid (_, _) | Ast.IdApp (_, _, _) -> false
6856 | Ast.IdAnt (_, _) -> assert false
6858 let is_patt_constructor =
6860 | Ast.PaId (_, i) -> is_constructor i
6861 | Ast.PaVrn (_, _) -> true
6864 let rec is_expr_constructor =
6866 | Ast.ExId (_, i) -> is_constructor i
6867 | Ast.ExAcc (_, e1, e2) ->
6868 (is_expr_constructor e1) && (is_expr_constructor e2)
6869 | Ast.ExVrn (_, _) -> true
6872 let rec tyOr_of_list =
6874 | [] -> Ast.TyNil ghost
6877 let _loc = loc_of_ctyp t
6878 in Ast.TyOr (_loc, t, tyOr_of_list ts)
6880 let rec tyAnd_of_list =
6882 | [] -> Ast.TyNil ghost
6885 let _loc = loc_of_ctyp t
6886 in Ast.TyAnd (_loc, t, tyAnd_of_list ts)
6888 let rec tySem_of_list =
6890 | [] -> Ast.TyNil ghost
6893 let _loc = loc_of_ctyp t
6894 in Ast.TySem (_loc, t, tySem_of_list ts)
6896 let rec tyCom_of_list =
6898 | [] -> Ast.TyNil ghost
6901 let _loc = loc_of_ctyp t
6902 in Ast.TyCom (_loc, t, tyCom_of_list ts)
6904 let rec tyAmp_of_list =
6906 | [] -> Ast.TyNil ghost
6909 let _loc = loc_of_ctyp t
6910 in Ast.TyAmp (_loc, t, tyAmp_of_list ts)
6912 let rec tySta_of_list =
6914 | [] -> Ast.TyNil ghost
6917 let _loc = loc_of_ctyp t
6918 in Ast.TySta (_loc, t, tySta_of_list ts)
6920 let rec stSem_of_list =
6922 | [] -> Ast.StNil ghost
6925 let _loc = loc_of_str_item t
6926 in Ast.StSem (_loc, t, stSem_of_list ts)
6928 let rec sgSem_of_list =
6930 | [] -> Ast.SgNil ghost
6933 let _loc = loc_of_sig_item t
6934 in Ast.SgSem (_loc, t, sgSem_of_list ts)
6936 let rec biAnd_of_list =
6938 | [] -> Ast.BiNil ghost
6941 let _loc = loc_of_binding b
6942 in Ast.BiAnd (_loc, b, biAnd_of_list bs)
6944 let rec rbSem_of_list =
6946 | [] -> Ast.RbNil ghost
6949 let _loc = loc_of_rec_binding b
6950 in Ast.RbSem (_loc, b, rbSem_of_list bs)
6952 let rec wcAnd_of_list =
6954 | [] -> Ast.WcNil ghost
6957 let _loc = loc_of_with_constr w
6958 in Ast.WcAnd (_loc, w, wcAnd_of_list ws)
6960 let rec idAcc_of_list =
6962 | [] -> assert false
6965 let _loc = loc_of_ident i
6966 in Ast.IdAcc (_loc, i, idAcc_of_list is)
6968 let rec idApp_of_list =
6970 | [] -> assert false
6973 let _loc = loc_of_ident i
6974 in Ast.IdApp (_loc, i, idApp_of_list is)
6976 let rec mcOr_of_list =
6978 | [] -> Ast.McNil ghost
6981 let _loc = loc_of_match_case x
6982 in Ast.McOr (_loc, x, mcOr_of_list xs)
6984 let rec mbAnd_of_list =
6986 | [] -> Ast.MbNil ghost
6989 let _loc = loc_of_module_binding x
6990 in Ast.MbAnd (_loc, x, mbAnd_of_list xs)
6992 let rec meApp_of_list =
6994 | [] -> assert false
6997 let _loc = loc_of_module_expr x
6998 in Ast.MeApp (_loc, x, meApp_of_list xs)
7000 let rec ceAnd_of_list =
7002 | [] -> Ast.CeNil ghost
7005 let _loc = loc_of_class_expr x
7006 in Ast.CeAnd (_loc, x, ceAnd_of_list xs)
7008 let rec ctAnd_of_list =
7010 | [] -> Ast.CtNil ghost
7013 let _loc = loc_of_class_type x
7014 in Ast.CtAnd (_loc, x, ctAnd_of_list xs)
7016 let rec cgSem_of_list =
7018 | [] -> Ast.CgNil ghost
7021 let _loc = loc_of_class_sig_item x
7022 in Ast.CgSem (_loc, x, cgSem_of_list xs)
7024 let rec crSem_of_list =
7026 | [] -> Ast.CrNil ghost
7029 let _loc = loc_of_class_str_item x
7030 in Ast.CrSem (_loc, x, crSem_of_list xs)
7032 let rec paSem_of_list =
7034 | [] -> Ast.PaNil ghost
7037 let _loc = loc_of_patt x
7038 in Ast.PaSem (_loc, x, paSem_of_list xs)
7040 let rec paCom_of_list =
7042 | [] -> Ast.PaNil ghost
7045 let _loc = loc_of_patt x
7046 in Ast.PaCom (_loc, x, paCom_of_list xs)
7048 let rec exSem_of_list =
7050 | [] -> Ast.ExNil ghost
7053 let _loc = loc_of_expr x
7054 in Ast.ExSem (_loc, x, exSem_of_list xs)
7056 let rec exCom_of_list =
7058 | [] -> Ast.ExNil ghost
7061 let _loc = loc_of_expr x
7062 in Ast.ExCom (_loc, x, exCom_of_list xs)
7066 | (_loc, s, []) -> Ast.TyId (_loc, Ast.IdUid (_loc, s))
7068 Ast.TyOf (_loc, Ast.TyId (_loc, Ast.IdUid (_loc, s)),
7073 | (_loc, s, true, t) ->
7074 Ast.TyCol (_loc, Ast.TyId (_loc, Ast.IdLid (_loc, s)),
7075 Ast.TyMut (_loc, t))
7076 | (_loc, s, false, t) ->
7077 Ast.TyCol (_loc, Ast.TyId (_loc, Ast.IdLid (_loc, s)), t)
7079 let bi_of_pe (p, e) =
7080 let _loc = loc_of_patt p in Ast.BiEq (_loc, p, e)
7082 let sum_type_of_list l = tyOr_of_list (List.map ty_of_stl l)
7084 let record_type_of_list l = tySem_of_list (List.map ty_of_sbt l)
7086 let binding_of_pel l = biAnd_of_list (List.map bi_of_pe l)
7088 let rec pel_of_binding =
7090 | Ast.BiAnd (_, b1, b2) ->
7091 (pel_of_binding b1) @ (pel_of_binding b2)
7092 | Ast.BiEq (_, p, e) -> [ (p, e) ]
7095 let rec list_of_binding x acc =
7097 | Ast.BiAnd (_, b1, b2) ->
7098 list_of_binding b1 (list_of_binding b2 acc)
7101 let rec list_of_rec_binding x acc =
7103 | Ast.RbSem (_, b1, b2) ->
7104 list_of_rec_binding b1 (list_of_rec_binding b2 acc)
7107 let rec list_of_with_constr x acc =
7109 | Ast.WcAnd (_, w1, w2) ->
7110 list_of_with_constr w1 (list_of_with_constr w2 acc)
7113 let rec list_of_ctyp x acc =
7115 | Ast.TyNil _ -> acc
7116 | Ast.TyAmp (_, x, y) | Ast.TyCom (_, x, y) |
7117 Ast.TySta (_, x, y) | Ast.TySem (_, x, y) |
7118 Ast.TyAnd (_, x, y) | Ast.TyOr (_, x, y) ->
7119 list_of_ctyp x (list_of_ctyp y acc)
7122 let rec list_of_patt x acc =
7124 | Ast.PaNil _ -> acc
7125 | Ast.PaCom (_, x, y) | Ast.PaSem (_, x, y) ->
7126 list_of_patt x (list_of_patt y acc)
7129 let rec list_of_expr x acc =
7131 | Ast.ExNil _ -> acc
7132 | Ast.ExCom (_, x, y) | Ast.ExSem (_, x, y) ->
7133 list_of_expr x (list_of_expr y acc)
7136 let rec list_of_str_item x acc =
7138 | Ast.StNil _ -> acc
7139 | Ast.StSem (_, x, y) ->
7140 list_of_str_item x (list_of_str_item y acc)
7143 let rec list_of_sig_item x acc =
7145 | Ast.SgNil _ -> acc
7146 | Ast.SgSem (_, x, y) ->
7147 list_of_sig_item x (list_of_sig_item y acc)
7150 let rec list_of_class_sig_item x acc =
7152 | Ast.CgNil _ -> acc
7153 | Ast.CgSem (_, x, y) ->
7154 list_of_class_sig_item x (list_of_class_sig_item y acc)
7157 let rec list_of_class_str_item x acc =
7159 | Ast.CrNil _ -> acc
7160 | Ast.CrSem (_, x, y) ->
7161 list_of_class_str_item x (list_of_class_str_item y acc)
7164 let rec list_of_class_type x acc =
7166 | Ast.CtAnd (_, x, y) ->
7167 list_of_class_type x (list_of_class_type y acc)
7170 let rec list_of_class_expr x acc =
7172 | Ast.CeAnd (_, x, y) ->
7173 list_of_class_expr x (list_of_class_expr y acc)
7176 let rec list_of_module_expr x acc =
7178 | Ast.MeApp (_, x, y) ->
7179 list_of_module_expr x (list_of_module_expr y acc)
7182 let rec list_of_match_case x acc =
7184 | Ast.McNil _ -> acc
7185 | Ast.McOr (_, x, y) ->
7186 list_of_match_case x (list_of_match_case y acc)
7189 let rec list_of_ident x acc =
7191 | Ast.IdAcc (_, x, y) | Ast.IdApp (_, x, y) ->
7192 list_of_ident x (list_of_ident y acc)
7195 let rec list_of_module_binding x acc =
7197 | Ast.MbAnd (_, x, y) ->
7198 list_of_module_binding x (list_of_module_binding y acc)
7203 module type META_LOC =
7205 val meta_loc_patt : Loc.t -> Loc.t -> Ast.patt
7207 val meta_loc_expr : Loc.t -> Loc.t -> Ast.expr
7213 let meta_loc_patt _loc location =
7214 let (a, b, c, d, e, f, g, h) = Loc.to_tuple location
7218 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Loc"),
7219 Ast.IdLid (_loc, "of_tuple"))),
7222 Ast.PaStr (_loc, Ast.safe_string_escaped a),
7229 Ast.PaInt (_loc, string_of_int b),
7230 Ast.PaInt (_loc, string_of_int c)),
7231 Ast.PaInt (_loc, string_of_int d)),
7232 Ast.PaInt (_loc, string_of_int e)),
7233 Ast.PaInt (_loc, string_of_int f)),
7234 Ast.PaInt (_loc, string_of_int g)),
7237 Ast.PaId (_loc, Ast.IdUid (_loc, "True"))
7239 Ast.PaId (_loc, Ast.IdUid (_loc, "False"))))))
7241 let meta_loc_expr _loc location =
7242 let (a, b, c, d, e, f, g, h) = Loc.to_tuple location
7246 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Loc"),
7247 Ast.IdLid (_loc, "of_tuple"))),
7250 Ast.ExStr (_loc, Ast.safe_string_escaped a),
7257 Ast.ExInt (_loc, string_of_int b),
7258 Ast.ExInt (_loc, string_of_int c)),
7259 Ast.ExInt (_loc, string_of_int d)),
7260 Ast.ExInt (_loc, string_of_int e)),
7261 Ast.ExInt (_loc, string_of_int f)),
7262 Ast.ExInt (_loc, string_of_int g)),
7265 Ast.ExId (_loc, Ast.IdUid (_loc, "True"))
7267 Ast.ExId (_loc, Ast.IdUid (_loc, "False"))))))
7271 module MetaGhostLoc =
7273 let meta_loc_patt _loc _ =
7275 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Loc"),
7276 Ast.IdLid (_loc, "ghost")))
7278 let meta_loc_expr _loc _ =
7280 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Loc"),
7281 Ast.IdLid (_loc, "ghost")))
7287 let meta_loc_patt _loc _ =
7288 Ast.PaId (_loc, Ast.IdLid (_loc, !Loc.name))
7290 let meta_loc_expr _loc _ =
7291 Ast.ExId (_loc, Ast.IdLid (_loc, !Loc.name))
7295 module Make (MetaLoc : META_LOC) =
7299 let meta_loc = meta_loc_expr
7303 let meta_string _loc s = Ast.ExStr (_loc, s)
7305 let meta_int _loc s = Ast.ExInt (_loc, s)
7307 let meta_float _loc s = Ast.ExFlo (_loc, s)
7309 let meta_char _loc s = Ast.ExChr (_loc, s)
7311 let meta_bool _loc =
7314 Ast.ExId (_loc, Ast.IdUid (_loc, "False"))
7315 | true -> Ast.ExId (_loc, Ast.IdUid (_loc, "True"))
7317 let rec meta_list mf_a _loc =
7319 | [] -> Ast.ExId (_loc, Ast.IdUid (_loc, "[]"))
7323 Ast.ExId (_loc, Ast.IdUid (_loc, "::")),
7325 meta_list mf_a _loc xs)
7327 let rec meta_binding _loc =
7329 | Ast.BiAnt (x0, x1) -> Ast.ExAnt (x0, x1)
7330 | Ast.BiEq (x0, x1, x2) ->
7336 Ast.IdUid (_loc, "Ast"),
7337 Ast.IdUid (_loc, "BiEq"))),
7341 | Ast.BiAnd (x0, x1, x2) ->
7347 Ast.IdUid (_loc, "Ast"),
7348 Ast.IdUid (_loc, "BiAnd"))),
7350 meta_binding _loc x1),
7351 meta_binding _loc x2)
7355 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
7356 Ast.IdUid (_loc, "BiNil"))),
7358 and meta_class_expr _loc =
7360 | Ast.CeAnt (x0, x1) -> Ast.ExAnt (x0, x1)
7361 | Ast.CeEq (x0, x1, x2) ->
7367 Ast.IdUid (_loc, "Ast"),
7368 Ast.IdUid (_loc, "CeEq"))),
7370 meta_class_expr _loc x1),
7371 meta_class_expr _loc x2)
7372 | Ast.CeAnd (x0, x1, x2) ->
7378 Ast.IdUid (_loc, "Ast"),
7379 Ast.IdUid (_loc, "CeAnd"))),
7381 meta_class_expr _loc x1),
7382 meta_class_expr _loc x2)
7383 | Ast.CeTyc (x0, x1, x2) ->
7389 Ast.IdUid (_loc, "Ast"),
7390 Ast.IdUid (_loc, "CeTyc"))),
7392 meta_class_expr _loc x1),
7393 meta_class_type _loc x2)
7394 | Ast.CeStr (x0, x1, x2) ->
7400 Ast.IdUid (_loc, "Ast"),
7401 Ast.IdUid (_loc, "CeStr"))),
7404 meta_class_str_item _loc x2)
7405 | Ast.CeLet (x0, x1, x2, x3) ->
7412 Ast.IdUid (_loc, "Ast"),
7413 Ast.IdUid (_loc, "CeLet"))),
7415 meta_meta_bool _loc x1),
7416 meta_binding _loc x2),
7417 meta_class_expr _loc x3)
7418 | Ast.CeFun (x0, x1, x2) ->
7424 Ast.IdUid (_loc, "Ast"),
7425 Ast.IdUid (_loc, "CeFun"))),
7428 meta_class_expr _loc x2)
7429 | Ast.CeCon (x0, x1, x2, x3) ->
7436 Ast.IdUid (_loc, "Ast"),
7437 Ast.IdUid (_loc, "CeCon"))),
7439 meta_meta_bool _loc x1),
7440 meta_ident _loc x2),
7442 | Ast.CeApp (x0, x1, x2) ->
7448 Ast.IdUid (_loc, "Ast"),
7449 Ast.IdUid (_loc, "CeApp"))),
7451 meta_class_expr _loc x1),
7456 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
7457 Ast.IdUid (_loc, "CeNil"))),
7459 and meta_class_sig_item _loc =
7461 | Ast.CgAnt (x0, x1) -> Ast.ExAnt (x0, x1)
7462 | Ast.CgVir (x0, x1, x2, x3) ->
7469 Ast.IdUid (_loc, "Ast"),
7470 Ast.IdUid (_loc, "CgVir"))),
7472 meta_string _loc x1),
7473 meta_meta_bool _loc x2),
7475 | Ast.CgVal (x0, x1, x2, x3, x4) ->
7483 Ast.IdUid (_loc, "Ast"),
7484 Ast.IdUid (_loc, "CgVal"))),
7486 meta_string _loc x1),
7487 meta_meta_bool _loc x2),
7488 meta_meta_bool _loc x3),
7490 | Ast.CgMth (x0, x1, x2, x3) ->
7497 Ast.IdUid (_loc, "Ast"),
7498 Ast.IdUid (_loc, "CgMth"))),
7500 meta_string _loc x1),
7501 meta_meta_bool _loc x2),
7503 | Ast.CgInh (x0, x1) ->
7507 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
7508 Ast.IdUid (_loc, "CgInh"))),
7510 meta_class_type _loc x1)
7511 | Ast.CgSem (x0, x1, x2) ->
7517 Ast.IdUid (_loc, "Ast"),
7518 Ast.IdUid (_loc, "CgSem"))),
7520 meta_class_sig_item _loc x1),
7521 meta_class_sig_item _loc x2)
7522 | Ast.CgCtr (x0, x1, x2) ->
7528 Ast.IdUid (_loc, "Ast"),
7529 Ast.IdUid (_loc, "CgCtr"))),
7536 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
7537 Ast.IdUid (_loc, "CgNil"))),
7539 and meta_class_str_item _loc =
7541 | Ast.CrAnt (x0, x1) -> Ast.ExAnt (x0, x1)
7542 | Ast.CrVvr (x0, x1, x2, x3) ->
7549 Ast.IdUid (_loc, "Ast"),
7550 Ast.IdUid (_loc, "CrVvr"))),
7552 meta_string _loc x1),
7553 meta_meta_bool _loc x2),
7555 | Ast.CrVir (x0, x1, x2, x3) ->
7562 Ast.IdUid (_loc, "Ast"),
7563 Ast.IdUid (_loc, "CrVir"))),
7565 meta_string _loc x1),
7566 meta_meta_bool _loc x2),
7568 | Ast.CrVal (x0, x1, x2, x3) ->
7575 Ast.IdUid (_loc, "Ast"),
7576 Ast.IdUid (_loc, "CrVal"))),
7578 meta_string _loc x1),
7579 meta_meta_bool _loc x2),
7581 | Ast.CrMth (x0, x1, x2, x3, x4) ->
7589 Ast.IdUid (_loc, "Ast"),
7590 Ast.IdUid (_loc, "CrMth"))),
7592 meta_string _loc x1),
7593 meta_meta_bool _loc x2),
7596 | Ast.CrIni (x0, x1) ->
7600 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
7601 Ast.IdUid (_loc, "CrIni"))),
7604 | Ast.CrInh (x0, x1, x2) ->
7610 Ast.IdUid (_loc, "Ast"),
7611 Ast.IdUid (_loc, "CrInh"))),
7613 meta_class_expr _loc x1),
7614 meta_string _loc x2)
7615 | Ast.CrCtr (x0, x1, x2) ->
7621 Ast.IdUid (_loc, "Ast"),
7622 Ast.IdUid (_loc, "CrCtr"))),
7626 | Ast.CrSem (x0, x1, x2) ->
7632 Ast.IdUid (_loc, "Ast"),
7633 Ast.IdUid (_loc, "CrSem"))),
7635 meta_class_str_item _loc x1),
7636 meta_class_str_item _loc x2)
7640 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
7641 Ast.IdUid (_loc, "CrNil"))),
7643 and meta_class_type _loc =
7645 | Ast.CtAnt (x0, x1) -> Ast.ExAnt (x0, x1)
7646 | Ast.CtEq (x0, x1, x2) ->
7652 Ast.IdUid (_loc, "Ast"),
7653 Ast.IdUid (_loc, "CtEq"))),
7655 meta_class_type _loc x1),
7656 meta_class_type _loc x2)
7657 | Ast.CtCol (x0, x1, x2) ->
7663 Ast.IdUid (_loc, "Ast"),
7664 Ast.IdUid (_loc, "CtCol"))),
7666 meta_class_type _loc x1),
7667 meta_class_type _loc x2)
7668 | Ast.CtAnd (x0, x1, x2) ->
7674 Ast.IdUid (_loc, "Ast"),
7675 Ast.IdUid (_loc, "CtAnd"))),
7677 meta_class_type _loc x1),
7678 meta_class_type _loc x2)
7679 | Ast.CtSig (x0, x1, x2) ->
7685 Ast.IdUid (_loc, "Ast"),
7686 Ast.IdUid (_loc, "CtSig"))),
7689 meta_class_sig_item _loc x2)
7690 | Ast.CtFun (x0, x1, x2) ->
7696 Ast.IdUid (_loc, "Ast"),
7697 Ast.IdUid (_loc, "CtFun"))),
7700 meta_class_type _loc x2)
7701 | Ast.CtCon (x0, x1, x2, x3) ->
7708 Ast.IdUid (_loc, "Ast"),
7709 Ast.IdUid (_loc, "CtCon"))),
7711 meta_meta_bool _loc x1),
7712 meta_ident _loc x2),
7717 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
7718 Ast.IdUid (_loc, "CtNil"))),
7720 and meta_ctyp _loc =
7722 | Ast.TyAnt (x0, x1) -> Ast.ExAnt (x0, x1)
7723 | Ast.TyOfAmp (x0, x1, x2) ->
7729 Ast.IdUid (_loc, "Ast"),
7730 Ast.IdUid (_loc, "TyOfAmp"))),
7734 | Ast.TyAmp (x0, x1, x2) ->
7740 Ast.IdUid (_loc, "Ast"),
7741 Ast.IdUid (_loc, "TyAmp"))),
7745 | Ast.TyVrnInfSup (x0, x1, x2) ->
7751 Ast.IdUid (_loc, "Ast"),
7752 Ast.IdUid (_loc, "TyVrnInfSup"))),
7756 | Ast.TyVrnInf (x0, x1) ->
7760 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
7761 Ast.IdUid (_loc, "TyVrnInf"))),
7764 | Ast.TyVrnSup (x0, x1) ->
7768 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
7769 Ast.IdUid (_loc, "TyVrnSup"))),
7772 | Ast.TyVrnEq (x0, x1) ->
7776 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
7777 Ast.IdUid (_loc, "TyVrnEq"))),
7780 | Ast.TySta (x0, x1, x2) ->
7786 Ast.IdUid (_loc, "Ast"),
7787 Ast.IdUid (_loc, "TySta"))),
7791 | Ast.TyTup (x0, x1) ->
7795 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
7796 Ast.IdUid (_loc, "TyTup"))),
7799 | Ast.TyMut (x0, x1) ->
7803 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
7804 Ast.IdUid (_loc, "TyMut"))),
7807 | Ast.TyPrv (x0, x1) ->
7811 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
7812 Ast.IdUid (_loc, "TyPrv"))),
7815 | Ast.TyOr (x0, x1, x2) ->
7821 Ast.IdUid (_loc, "Ast"),
7822 Ast.IdUid (_loc, "TyOr"))),
7826 | Ast.TyAnd (x0, x1, x2) ->
7832 Ast.IdUid (_loc, "Ast"),
7833 Ast.IdUid (_loc, "TyAnd"))),
7837 | Ast.TyOf (x0, x1, x2) ->
7843 Ast.IdUid (_loc, "Ast"),
7844 Ast.IdUid (_loc, "TyOf"))),
7848 | Ast.TySum (x0, x1) ->
7852 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
7853 Ast.IdUid (_loc, "TySum"))),
7856 | Ast.TyCom (x0, x1, x2) ->
7862 Ast.IdUid (_loc, "Ast"),
7863 Ast.IdUid (_loc, "TyCom"))),
7867 | Ast.TySem (x0, x1, x2) ->
7873 Ast.IdUid (_loc, "Ast"),
7874 Ast.IdUid (_loc, "TySem"))),
7878 | Ast.TyCol (x0, x1, x2) ->
7884 Ast.IdUid (_loc, "Ast"),
7885 Ast.IdUid (_loc, "TyCol"))),
7889 | Ast.TyRec (x0, x1) ->
7893 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
7894 Ast.IdUid (_loc, "TyRec"))),
7897 | Ast.TyVrn (x0, x1) ->
7901 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
7902 Ast.IdUid (_loc, "TyVrn"))),
7904 meta_string _loc x1)
7905 | Ast.TyQuM (x0, x1) ->
7909 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
7910 Ast.IdUid (_loc, "TyQuM"))),
7912 meta_string _loc x1)
7913 | Ast.TyQuP (x0, x1) ->
7917 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
7918 Ast.IdUid (_loc, "TyQuP"))),
7920 meta_string _loc x1)
7921 | Ast.TyQuo (x0, x1) ->
7925 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
7926 Ast.IdUid (_loc, "TyQuo"))),
7928 meta_string _loc x1)
7929 | Ast.TyPol (x0, x1, x2) ->
7935 Ast.IdUid (_loc, "Ast"),
7936 Ast.IdUid (_loc, "TyPol"))),
7940 | Ast.TyOlb (x0, x1, x2) ->
7946 Ast.IdUid (_loc, "Ast"),
7947 Ast.IdUid (_loc, "TyOlb"))),
7949 meta_string _loc x1),
7951 | Ast.TyObj (x0, x1, x2) ->
7957 Ast.IdUid (_loc, "Ast"),
7958 Ast.IdUid (_loc, "TyObj"))),
7961 meta_meta_bool _loc x2)
7962 | Ast.TyDcl (x0, x1, x2, x3, x4) ->
7970 Ast.IdUid (_loc, "Ast"),
7971 Ast.IdUid (_loc, "TyDcl"))),
7973 meta_string _loc x1),
7974 meta_list meta_ctyp _loc x2),
7977 (fun _loc (x1, x2) ->
7979 Ast.ExCom (_loc, meta_ctyp _loc x1,
7980 meta_ctyp _loc x2)))
7982 | Ast.TyMan (x0, x1, x2) ->
7988 Ast.IdUid (_loc, "Ast"),
7989 Ast.IdUid (_loc, "TyMan"))),
7993 | Ast.TyId (x0, x1) ->
7997 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
7998 Ast.IdUid (_loc, "TyId"))),
8001 | Ast.TyLab (x0, x1, x2) ->
8007 Ast.IdUid (_loc, "Ast"),
8008 Ast.IdUid (_loc, "TyLab"))),
8010 meta_string _loc x1),
8012 | Ast.TyCls (x0, x1) ->
8016 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8017 Ast.IdUid (_loc, "TyCls"))),
8020 | Ast.TyArr (x0, x1, x2) ->
8026 Ast.IdUid (_loc, "Ast"),
8027 Ast.IdUid (_loc, "TyArr"))),
8031 | Ast.TyApp (x0, x1, x2) ->
8037 Ast.IdUid (_loc, "Ast"),
8038 Ast.IdUid (_loc, "TyApp"))),
8045 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8046 Ast.IdUid (_loc, "TyAny"))),
8048 | Ast.TyAli (x0, x1, x2) ->
8054 Ast.IdUid (_loc, "Ast"),
8055 Ast.IdUid (_loc, "TyAli"))),
8062 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8063 Ast.IdUid (_loc, "TyNil"))),
8065 and meta_expr _loc =
8067 | Ast.ExWhi (x0, x1, x2) ->
8073 Ast.IdUid (_loc, "Ast"),
8074 Ast.IdUid (_loc, "ExWhi"))),
8078 | Ast.ExVrn (x0, x1) ->
8082 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8083 Ast.IdUid (_loc, "ExVrn"))),
8085 meta_string _loc x1)
8086 | Ast.ExTyc (x0, x1, x2) ->
8092 Ast.IdUid (_loc, "Ast"),
8093 Ast.IdUid (_loc, "ExTyc"))),
8097 | Ast.ExCom (x0, x1, x2) ->
8103 Ast.IdUid (_loc, "Ast"),
8104 Ast.IdUid (_loc, "ExCom"))),
8108 | Ast.ExTup (x0, x1) ->
8112 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8113 Ast.IdUid (_loc, "ExTup"))),
8116 | Ast.ExTry (x0, x1, x2) ->
8122 Ast.IdUid (_loc, "Ast"),
8123 Ast.IdUid (_loc, "ExTry"))),
8126 meta_match_case _loc x2)
8127 | Ast.ExStr (x0, x1) ->
8131 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8132 Ast.IdUid (_loc, "ExStr"))),
8134 meta_string _loc x1)
8135 | Ast.ExSte (x0, x1, x2) ->
8141 Ast.IdUid (_loc, "Ast"),
8142 Ast.IdUid (_loc, "ExSte"))),
8146 | Ast.ExSnd (x0, x1, x2) ->
8152 Ast.IdUid (_loc, "Ast"),
8153 Ast.IdUid (_loc, "ExSnd"))),
8156 meta_string _loc x2)
8157 | Ast.ExSeq (x0, x1) ->
8161 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8162 Ast.IdUid (_loc, "ExSeq"))),
8165 | Ast.ExRec (x0, x1, x2) ->
8171 Ast.IdUid (_loc, "Ast"),
8172 Ast.IdUid (_loc, "ExRec"))),
8174 meta_rec_binding _loc x1),
8176 | Ast.ExOvr (x0, x1) ->
8180 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8181 Ast.IdUid (_loc, "ExOvr"))),
8183 meta_rec_binding _loc x1)
8184 | Ast.ExOlb (x0, x1, x2) ->
8190 Ast.IdUid (_loc, "Ast"),
8191 Ast.IdUid (_loc, "ExOlb"))),
8193 meta_string _loc x1),
8195 | Ast.ExObj (x0, x1, x2) ->
8201 Ast.IdUid (_loc, "Ast"),
8202 Ast.IdUid (_loc, "ExObj"))),
8205 meta_class_str_item _loc x2)
8206 | Ast.ExNew (x0, x1) ->
8210 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8211 Ast.IdUid (_loc, "ExNew"))),
8214 | Ast.ExMat (x0, x1, x2) ->
8220 Ast.IdUid (_loc, "Ast"),
8221 Ast.IdUid (_loc, "ExMat"))),
8224 meta_match_case _loc x2)
8225 | Ast.ExLmd (x0, x1, x2, x3) ->
8232 Ast.IdUid (_loc, "Ast"),
8233 Ast.IdUid (_loc, "ExLmd"))),
8235 meta_string _loc x1),
8236 meta_module_expr _loc x2),
8238 | Ast.ExLet (x0, x1, x2, x3) ->
8245 Ast.IdUid (_loc, "Ast"),
8246 Ast.IdUid (_loc, "ExLet"))),
8248 meta_meta_bool _loc x1),
8249 meta_binding _loc x2),
8251 | Ast.ExLaz (x0, x1) ->
8255 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8256 Ast.IdUid (_loc, "ExLaz"))),
8259 | Ast.ExLab (x0, x1, x2) ->
8265 Ast.IdUid (_loc, "Ast"),
8266 Ast.IdUid (_loc, "ExLab"))),
8268 meta_string _loc x1),
8270 | Ast.ExNativeInt (x0, x1) ->
8274 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8275 Ast.IdUid (_loc, "ExNativeInt"))),
8277 meta_string _loc x1)
8278 | Ast.ExInt64 (x0, x1) ->
8282 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8283 Ast.IdUid (_loc, "ExInt64"))),
8285 meta_string _loc x1)
8286 | Ast.ExInt32 (x0, x1) ->
8290 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8291 Ast.IdUid (_loc, "ExInt32"))),
8293 meta_string _loc x1)
8294 | Ast.ExInt (x0, x1) ->
8298 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8299 Ast.IdUid (_loc, "ExInt"))),
8301 meta_string _loc x1)
8302 | Ast.ExIfe (x0, x1, x2, x3) ->
8309 Ast.IdUid (_loc, "Ast"),
8310 Ast.IdUid (_loc, "ExIfe"))),
8315 | Ast.ExFun (x0, x1) ->
8319 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8320 Ast.IdUid (_loc, "ExFun"))),
8322 meta_match_case _loc x1)
8323 | Ast.ExFor (x0, x1, x2, x3, x4, x5) ->
8332 Ast.IdUid (_loc, "Ast"),
8333 Ast.IdUid (_loc, "ExFor"))),
8335 meta_string _loc x1),
8338 meta_meta_bool _loc x4),
8340 | Ast.ExFlo (x0, x1) ->
8344 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8345 Ast.IdUid (_loc, "ExFlo"))),
8347 meta_string _loc x1)
8348 | Ast.ExCoe (x0, x1, x2, x3) ->
8355 Ast.IdUid (_loc, "Ast"),
8356 Ast.IdUid (_loc, "ExCoe"))),
8361 | Ast.ExChr (x0, x1) ->
8365 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8366 Ast.IdUid (_loc, "ExChr"))),
8368 meta_string _loc x1)
8369 | Ast.ExAss (x0, x1, x2) ->
8375 Ast.IdUid (_loc, "Ast"),
8376 Ast.IdUid (_loc, "ExAss"))),
8380 | Ast.ExAsr (x0, x1) ->
8384 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8385 Ast.IdUid (_loc, "ExAsr"))),
8391 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8392 Ast.IdUid (_loc, "ExAsf"))),
8394 | Ast.ExSem (x0, x1, x2) ->
8400 Ast.IdUid (_loc, "Ast"),
8401 Ast.IdUid (_loc, "ExSem"))),
8405 | Ast.ExArr (x0, x1) ->
8409 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8410 Ast.IdUid (_loc, "ExArr"))),
8413 | Ast.ExAre (x0, x1, x2) ->
8419 Ast.IdUid (_loc, "Ast"),
8420 Ast.IdUid (_loc, "ExAre"))),
8424 | Ast.ExApp (x0, x1, x2) ->
8430 Ast.IdUid (_loc, "Ast"),
8431 Ast.IdUid (_loc, "ExApp"))),
8435 | Ast.ExAnt (x0, x1) -> Ast.ExAnt (x0, x1)
8436 | Ast.ExAcc (x0, x1, x2) ->
8442 Ast.IdUid (_loc, "Ast"),
8443 Ast.IdUid (_loc, "ExAcc"))),
8447 | Ast.ExId (x0, x1) ->
8451 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8452 Ast.IdUid (_loc, "ExId"))),
8458 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8459 Ast.IdUid (_loc, "ExNil"))),
8461 and meta_ident _loc =
8463 | Ast.IdAnt (x0, x1) -> Ast.ExAnt (x0, x1)
8464 | Ast.IdUid (x0, x1) ->
8468 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8469 Ast.IdUid (_loc, "IdUid"))),
8471 meta_string _loc x1)
8472 | Ast.IdLid (x0, x1) ->
8476 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8477 Ast.IdUid (_loc, "IdLid"))),
8479 meta_string _loc x1)
8480 | Ast.IdApp (x0, x1, x2) ->
8486 Ast.IdUid (_loc, "Ast"),
8487 Ast.IdUid (_loc, "IdApp"))),
8489 meta_ident _loc x1),
8491 | Ast.IdAcc (x0, x1, x2) ->
8497 Ast.IdUid (_loc, "Ast"),
8498 Ast.IdUid (_loc, "IdAcc"))),
8500 meta_ident _loc x1),
8502 and meta_match_case _loc =
8504 | Ast.McAnt (x0, x1) -> Ast.ExAnt (x0, x1)
8505 | Ast.McArr (x0, x1, x2, x3) ->
8512 Ast.IdUid (_loc, "Ast"),
8513 Ast.IdUid (_loc, "McArr"))),
8518 | Ast.McOr (x0, x1, x2) ->
8524 Ast.IdUid (_loc, "Ast"),
8525 Ast.IdUid (_loc, "McOr"))),
8527 meta_match_case _loc x1),
8528 meta_match_case _loc x2)
8532 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8533 Ast.IdUid (_loc, "McNil"))),
8535 and meta_meta_bool _loc =
8537 | Ast.BAnt x0 -> Ast.ExAnt (_loc, x0)
8540 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8541 Ast.IdUid (_loc, "BFalse")))
8544 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8545 Ast.IdUid (_loc, "BTrue")))
8546 and meta_meta_list mf_a _loc =
8548 | Ast.LAnt x0 -> Ast.ExAnt (_loc, x0)
8549 | Ast.LCons (x0, x1) ->
8553 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8554 Ast.IdUid (_loc, "LCons"))),
8556 meta_meta_list mf_a _loc x1)
8559 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8560 Ast.IdUid (_loc, "LNil")))
8561 and meta_meta_option mf_a _loc =
8563 | Ast.OAnt x0 -> Ast.ExAnt (_loc, x0)
8567 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8568 Ast.IdUid (_loc, "OSome"))),
8572 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8573 Ast.IdUid (_loc, "ONone")))
8574 and meta_module_binding _loc =
8576 | Ast.MbAnt (x0, x1) -> Ast.ExAnt (x0, x1)
8577 | Ast.MbCol (x0, x1, x2) ->
8583 Ast.IdUid (_loc, "Ast"),
8584 Ast.IdUid (_loc, "MbCol"))),
8586 meta_string _loc x1),
8587 meta_module_type _loc x2)
8588 | Ast.MbColEq (x0, x1, x2, x3) ->
8595 Ast.IdUid (_loc, "Ast"),
8596 Ast.IdUid (_loc, "MbColEq"))),
8598 meta_string _loc x1),
8599 meta_module_type _loc x2),
8600 meta_module_expr _loc x3)
8601 | Ast.MbAnd (x0, x1, x2) ->
8607 Ast.IdUid (_loc, "Ast"),
8608 Ast.IdUid (_loc, "MbAnd"))),
8610 meta_module_binding _loc x1),
8611 meta_module_binding _loc x2)
8615 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8616 Ast.IdUid (_loc, "MbNil"))),
8618 and meta_module_expr _loc =
8620 | Ast.MeAnt (x0, x1) -> Ast.ExAnt (x0, x1)
8621 | Ast.MeTyc (x0, x1, x2) ->
8627 Ast.IdUid (_loc, "Ast"),
8628 Ast.IdUid (_loc, "MeTyc"))),
8630 meta_module_expr _loc x1),
8631 meta_module_type _loc x2)
8632 | Ast.MeStr (x0, x1) ->
8636 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8637 Ast.IdUid (_loc, "MeStr"))),
8639 meta_str_item _loc x1)
8640 | Ast.MeFun (x0, x1, x2, x3) ->
8647 Ast.IdUid (_loc, "Ast"),
8648 Ast.IdUid (_loc, "MeFun"))),
8650 meta_string _loc x1),
8651 meta_module_type _loc x2),
8652 meta_module_expr _loc x3)
8653 | Ast.MeApp (x0, x1, x2) ->
8659 Ast.IdUid (_loc, "Ast"),
8660 Ast.IdUid (_loc, "MeApp"))),
8662 meta_module_expr _loc x1),
8663 meta_module_expr _loc x2)
8664 | Ast.MeId (x0, x1) ->
8668 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8669 Ast.IdUid (_loc, "MeId"))),
8675 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8676 Ast.IdUid (_loc, "MeNil"))),
8678 and meta_module_type _loc =
8680 | Ast.MtAnt (x0, x1) -> Ast.ExAnt (x0, x1)
8681 | Ast.MtWit (x0, x1, x2) ->
8687 Ast.IdUid (_loc, "Ast"),
8688 Ast.IdUid (_loc, "MtWit"))),
8690 meta_module_type _loc x1),
8691 meta_with_constr _loc x2)
8692 | Ast.MtSig (x0, x1) ->
8696 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8697 Ast.IdUid (_loc, "MtSig"))),
8699 meta_sig_item _loc x1)
8700 | Ast.MtQuo (x0, x1) ->
8704 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8705 Ast.IdUid (_loc, "MtQuo"))),
8707 meta_string _loc x1)
8708 | Ast.MtFun (x0, x1, x2, x3) ->
8715 Ast.IdUid (_loc, "Ast"),
8716 Ast.IdUid (_loc, "MtFun"))),
8718 meta_string _loc x1),
8719 meta_module_type _loc x2),
8720 meta_module_type _loc x3)
8721 | Ast.MtId (x0, x1) ->
8725 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8726 Ast.IdUid (_loc, "MtId"))),
8732 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8733 Ast.IdUid (_loc, "MtNil"))),
8735 and meta_patt _loc =
8737 | Ast.PaLaz (x0, x1) ->
8741 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8742 Ast.IdUid (_loc, "PaLaz"))),
8745 | Ast.PaVrn (x0, x1) ->
8749 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8750 Ast.IdUid (_loc, "PaVrn"))),
8752 meta_string _loc x1)
8753 | Ast.PaTyp (x0, x1) ->
8757 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8758 Ast.IdUid (_loc, "PaTyp"))),
8761 | Ast.PaTyc (x0, x1, x2) ->
8767 Ast.IdUid (_loc, "Ast"),
8768 Ast.IdUid (_loc, "PaTyc"))),
8772 | Ast.PaTup (x0, x1) ->
8776 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8777 Ast.IdUid (_loc, "PaTup"))),
8780 | Ast.PaStr (x0, x1) ->
8784 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8785 Ast.IdUid (_loc, "PaStr"))),
8787 meta_string _loc x1)
8788 | Ast.PaEq (x0, x1, x2) ->
8794 Ast.IdUid (_loc, "Ast"),
8795 Ast.IdUid (_loc, "PaEq"))),
8797 meta_ident _loc x1),
8799 | Ast.PaRec (x0, x1) ->
8803 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8804 Ast.IdUid (_loc, "PaRec"))),
8807 | Ast.PaRng (x0, x1, x2) ->
8813 Ast.IdUid (_loc, "Ast"),
8814 Ast.IdUid (_loc, "PaRng"))),
8818 | Ast.PaOrp (x0, x1, x2) ->
8824 Ast.IdUid (_loc, "Ast"),
8825 Ast.IdUid (_loc, "PaOrp"))),
8829 | Ast.PaOlbi (x0, x1, x2, x3) ->
8836 Ast.IdUid (_loc, "Ast"),
8837 Ast.IdUid (_loc, "PaOlbi"))),
8839 meta_string _loc x1),
8842 | Ast.PaOlb (x0, x1, x2) ->
8848 Ast.IdUid (_loc, "Ast"),
8849 Ast.IdUid (_loc, "PaOlb"))),
8851 meta_string _loc x1),
8853 | Ast.PaLab (x0, x1, x2) ->
8859 Ast.IdUid (_loc, "Ast"),
8860 Ast.IdUid (_loc, "PaLab"))),
8862 meta_string _loc x1),
8864 | Ast.PaFlo (x0, x1) ->
8868 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8869 Ast.IdUid (_loc, "PaFlo"))),
8871 meta_string _loc x1)
8872 | Ast.PaNativeInt (x0, x1) ->
8876 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8877 Ast.IdUid (_loc, "PaNativeInt"))),
8879 meta_string _loc x1)
8880 | Ast.PaInt64 (x0, x1) ->
8884 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8885 Ast.IdUid (_loc, "PaInt64"))),
8887 meta_string _loc x1)
8888 | Ast.PaInt32 (x0, x1) ->
8892 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8893 Ast.IdUid (_loc, "PaInt32"))),
8895 meta_string _loc x1)
8896 | Ast.PaInt (x0, x1) ->
8900 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8901 Ast.IdUid (_loc, "PaInt"))),
8903 meta_string _loc x1)
8904 | Ast.PaChr (x0, x1) ->
8908 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8909 Ast.IdUid (_loc, "PaChr"))),
8911 meta_string _loc x1)
8912 | Ast.PaSem (x0, x1, x2) ->
8918 Ast.IdUid (_loc, "Ast"),
8919 Ast.IdUid (_loc, "PaSem"))),
8923 | Ast.PaCom (x0, x1, x2) ->
8929 Ast.IdUid (_loc, "Ast"),
8930 Ast.IdUid (_loc, "PaCom"))),
8934 | Ast.PaArr (x0, x1) ->
8938 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8939 Ast.IdUid (_loc, "PaArr"))),
8942 | Ast.PaApp (x0, x1, x2) ->
8948 Ast.IdUid (_loc, "Ast"),
8949 Ast.IdUid (_loc, "PaApp"))),
8956 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8957 Ast.IdUid (_loc, "PaAny"))),
8959 | Ast.PaAnt (x0, x1) -> Ast.ExAnt (x0, x1)
8960 | Ast.PaAli (x0, x1, x2) ->
8966 Ast.IdUid (_loc, "Ast"),
8967 Ast.IdUid (_loc, "PaAli"))),
8971 | Ast.PaId (x0, x1) ->
8975 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8976 Ast.IdUid (_loc, "PaId"))),
8982 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
8983 Ast.IdUid (_loc, "PaNil"))),
8985 and meta_rec_binding _loc =
8987 | Ast.RbAnt (x0, x1) -> Ast.ExAnt (x0, x1)
8988 | Ast.RbEq (x0, x1, x2) ->
8994 Ast.IdUid (_loc, "Ast"),
8995 Ast.IdUid (_loc, "RbEq"))),
8997 meta_ident _loc x1),
8999 | Ast.RbSem (x0, x1, x2) ->
9005 Ast.IdUid (_loc, "Ast"),
9006 Ast.IdUid (_loc, "RbSem"))),
9008 meta_rec_binding _loc x1),
9009 meta_rec_binding _loc x2)
9013 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9014 Ast.IdUid (_loc, "RbNil"))),
9016 and meta_sig_item _loc =
9018 | Ast.SgAnt (x0, x1) -> Ast.ExAnt (x0, x1)
9019 | Ast.SgVal (x0, x1, x2) ->
9025 Ast.IdUid (_loc, "Ast"),
9026 Ast.IdUid (_loc, "SgVal"))),
9028 meta_string _loc x1),
9030 | Ast.SgTyp (x0, x1) ->
9034 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9035 Ast.IdUid (_loc, "SgTyp"))),
9038 | Ast.SgOpn (x0, x1) ->
9042 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9043 Ast.IdUid (_loc, "SgOpn"))),
9046 | Ast.SgMty (x0, x1, x2) ->
9052 Ast.IdUid (_loc, "Ast"),
9053 Ast.IdUid (_loc, "SgMty"))),
9055 meta_string _loc x1),
9056 meta_module_type _loc x2)
9057 | Ast.SgRecMod (x0, x1) ->
9061 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9062 Ast.IdUid (_loc, "SgRecMod"))),
9064 meta_module_binding _loc x1)
9065 | Ast.SgMod (x0, x1, x2) ->
9071 Ast.IdUid (_loc, "Ast"),
9072 Ast.IdUid (_loc, "SgMod"))),
9074 meta_string _loc x1),
9075 meta_module_type _loc x2)
9076 | Ast.SgInc (x0, x1) ->
9080 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9081 Ast.IdUid (_loc, "SgInc"))),
9083 meta_module_type _loc x1)
9084 | Ast.SgExt (x0, x1, x2, x3) ->
9091 Ast.IdUid (_loc, "Ast"),
9092 Ast.IdUid (_loc, "SgExt"))),
9094 meta_string _loc x1),
9096 meta_meta_list meta_string _loc x3)
9097 | Ast.SgExc (x0, x1) ->
9101 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9102 Ast.IdUid (_loc, "SgExc"))),
9105 | Ast.SgDir (x0, x1, x2) ->
9111 Ast.IdUid (_loc, "Ast"),
9112 Ast.IdUid (_loc, "SgDir"))),
9114 meta_string _loc x1),
9116 | Ast.SgSem (x0, x1, x2) ->
9122 Ast.IdUid (_loc, "Ast"),
9123 Ast.IdUid (_loc, "SgSem"))),
9125 meta_sig_item _loc x1),
9126 meta_sig_item _loc x2)
9127 | Ast.SgClt (x0, x1) ->
9131 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9132 Ast.IdUid (_loc, "SgClt"))),
9134 meta_class_type _loc x1)
9135 | Ast.SgCls (x0, x1) ->
9139 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9140 Ast.IdUid (_loc, "SgCls"))),
9142 meta_class_type _loc x1)
9146 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9147 Ast.IdUid (_loc, "SgNil"))),
9149 and meta_str_item _loc =
9151 | Ast.StAnt (x0, x1) -> Ast.ExAnt (x0, x1)
9152 | Ast.StVal (x0, x1, x2) ->
9158 Ast.IdUid (_loc, "Ast"),
9159 Ast.IdUid (_loc, "StVal"))),
9161 meta_meta_bool _loc x1),
9162 meta_binding _loc x2)
9163 | Ast.StTyp (x0, x1) ->
9167 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9168 Ast.IdUid (_loc, "StTyp"))),
9171 | Ast.StOpn (x0, x1) ->
9175 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9176 Ast.IdUid (_loc, "StOpn"))),
9179 | Ast.StMty (x0, x1, x2) ->
9185 Ast.IdUid (_loc, "Ast"),
9186 Ast.IdUid (_loc, "StMty"))),
9188 meta_string _loc x1),
9189 meta_module_type _loc x2)
9190 | Ast.StRecMod (x0, x1) ->
9194 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9195 Ast.IdUid (_loc, "StRecMod"))),
9197 meta_module_binding _loc x1)
9198 | Ast.StMod (x0, x1, x2) ->
9204 Ast.IdUid (_loc, "Ast"),
9205 Ast.IdUid (_loc, "StMod"))),
9207 meta_string _loc x1),
9208 meta_module_expr _loc x2)
9209 | Ast.StInc (x0, x1) ->
9213 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9214 Ast.IdUid (_loc, "StInc"))),
9216 meta_module_expr _loc x1)
9217 | Ast.StExt (x0, x1, x2, x3) ->
9224 Ast.IdUid (_loc, "Ast"),
9225 Ast.IdUid (_loc, "StExt"))),
9227 meta_string _loc x1),
9229 meta_meta_list meta_string _loc x3)
9230 | Ast.StExp (x0, x1) ->
9234 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9235 Ast.IdUid (_loc, "StExp"))),
9238 | Ast.StExc (x0, x1, x2) ->
9244 Ast.IdUid (_loc, "Ast"),
9245 Ast.IdUid (_loc, "StExc"))),
9248 meta_meta_option meta_ident _loc x2)
9249 | Ast.StDir (x0, x1, x2) ->
9255 Ast.IdUid (_loc, "Ast"),
9256 Ast.IdUid (_loc, "StDir"))),
9258 meta_string _loc x1),
9260 | Ast.StSem (x0, x1, x2) ->
9266 Ast.IdUid (_loc, "Ast"),
9267 Ast.IdUid (_loc, "StSem"))),
9269 meta_str_item _loc x1),
9270 meta_str_item _loc x2)
9271 | Ast.StClt (x0, x1) ->
9275 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9276 Ast.IdUid (_loc, "StClt"))),
9278 meta_class_type _loc x1)
9279 | Ast.StCls (x0, x1) ->
9283 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9284 Ast.IdUid (_loc, "StCls"))),
9286 meta_class_expr _loc x1)
9290 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9291 Ast.IdUid (_loc, "StNil"))),
9293 and meta_with_constr _loc =
9295 | Ast.WcAnt (x0, x1) -> Ast.ExAnt (x0, x1)
9296 | Ast.WcAnd (x0, x1, x2) ->
9302 Ast.IdUid (_loc, "Ast"),
9303 Ast.IdUid (_loc, "WcAnd"))),
9305 meta_with_constr _loc x1),
9306 meta_with_constr _loc x2)
9307 | Ast.WcMod (x0, x1, x2) ->
9313 Ast.IdUid (_loc, "Ast"),
9314 Ast.IdUid (_loc, "WcMod"))),
9316 meta_ident _loc x1),
9318 | Ast.WcTyp (x0, x1, x2) ->
9324 Ast.IdUid (_loc, "Ast"),
9325 Ast.IdUid (_loc, "WcTyp"))),
9332 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9333 Ast.IdUid (_loc, "WcNil"))),
9338 let meta_loc = meta_loc_patt
9342 let meta_string _loc s = Ast.PaStr (_loc, s)
9344 let meta_int _loc s = Ast.PaInt (_loc, s)
9346 let meta_float _loc s = Ast.PaFlo (_loc, s)
9348 let meta_char _loc s = Ast.PaChr (_loc, s)
9350 let meta_bool _loc =
9353 Ast.PaId (_loc, Ast.IdUid (_loc, "False"))
9354 | true -> Ast.PaId (_loc, Ast.IdUid (_loc, "True"))
9356 let rec meta_list mf_a _loc =
9358 | [] -> Ast.PaId (_loc, Ast.IdUid (_loc, "[]"))
9362 Ast.PaId (_loc, Ast.IdUid (_loc, "::")),
9364 meta_list mf_a _loc xs)
9366 let rec meta_binding _loc =
9368 | Ast.BiAnt (x0, x1) -> Ast.PaAnt (x0, x1)
9369 | Ast.BiEq (x0, x1, x2) ->
9375 Ast.IdUid (_loc, "Ast"),
9376 Ast.IdUid (_loc, "BiEq"))),
9380 | Ast.BiAnd (x0, x1, x2) ->
9386 Ast.IdUid (_loc, "Ast"),
9387 Ast.IdUid (_loc, "BiAnd"))),
9389 meta_binding _loc x1),
9390 meta_binding _loc x2)
9394 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9395 Ast.IdUid (_loc, "BiNil"))),
9397 and meta_class_expr _loc =
9399 | Ast.CeAnt (x0, x1) -> Ast.PaAnt (x0, x1)
9400 | Ast.CeEq (x0, x1, x2) ->
9406 Ast.IdUid (_loc, "Ast"),
9407 Ast.IdUid (_loc, "CeEq"))),
9409 meta_class_expr _loc x1),
9410 meta_class_expr _loc x2)
9411 | Ast.CeAnd (x0, x1, x2) ->
9417 Ast.IdUid (_loc, "Ast"),
9418 Ast.IdUid (_loc, "CeAnd"))),
9420 meta_class_expr _loc x1),
9421 meta_class_expr _loc x2)
9422 | Ast.CeTyc (x0, x1, x2) ->
9428 Ast.IdUid (_loc, "Ast"),
9429 Ast.IdUid (_loc, "CeTyc"))),
9431 meta_class_expr _loc x1),
9432 meta_class_type _loc x2)
9433 | Ast.CeStr (x0, x1, x2) ->
9439 Ast.IdUid (_loc, "Ast"),
9440 Ast.IdUid (_loc, "CeStr"))),
9443 meta_class_str_item _loc x2)
9444 | Ast.CeLet (x0, x1, x2, x3) ->
9451 Ast.IdUid (_loc, "Ast"),
9452 Ast.IdUid (_loc, "CeLet"))),
9454 meta_meta_bool _loc x1),
9455 meta_binding _loc x2),
9456 meta_class_expr _loc x3)
9457 | Ast.CeFun (x0, x1, x2) ->
9463 Ast.IdUid (_loc, "Ast"),
9464 Ast.IdUid (_loc, "CeFun"))),
9467 meta_class_expr _loc x2)
9468 | Ast.CeCon (x0, x1, x2, x3) ->
9475 Ast.IdUid (_loc, "Ast"),
9476 Ast.IdUid (_loc, "CeCon"))),
9478 meta_meta_bool _loc x1),
9479 meta_ident _loc x2),
9481 | Ast.CeApp (x0, x1, x2) ->
9487 Ast.IdUid (_loc, "Ast"),
9488 Ast.IdUid (_loc, "CeApp"))),
9490 meta_class_expr _loc x1),
9495 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9496 Ast.IdUid (_loc, "CeNil"))),
9498 and meta_class_sig_item _loc =
9500 | Ast.CgAnt (x0, x1) -> Ast.PaAnt (x0, x1)
9501 | Ast.CgVir (x0, x1, x2, x3) ->
9508 Ast.IdUid (_loc, "Ast"),
9509 Ast.IdUid (_loc, "CgVir"))),
9511 meta_string _loc x1),
9512 meta_meta_bool _loc x2),
9514 | Ast.CgVal (x0, x1, x2, x3, x4) ->
9522 Ast.IdUid (_loc, "Ast"),
9523 Ast.IdUid (_loc, "CgVal"))),
9525 meta_string _loc x1),
9526 meta_meta_bool _loc x2),
9527 meta_meta_bool _loc x3),
9529 | Ast.CgMth (x0, x1, x2, x3) ->
9536 Ast.IdUid (_loc, "Ast"),
9537 Ast.IdUid (_loc, "CgMth"))),
9539 meta_string _loc x1),
9540 meta_meta_bool _loc x2),
9542 | Ast.CgInh (x0, x1) ->
9546 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9547 Ast.IdUid (_loc, "CgInh"))),
9549 meta_class_type _loc x1)
9550 | Ast.CgSem (x0, x1, x2) ->
9556 Ast.IdUid (_loc, "Ast"),
9557 Ast.IdUid (_loc, "CgSem"))),
9559 meta_class_sig_item _loc x1),
9560 meta_class_sig_item _loc x2)
9561 | Ast.CgCtr (x0, x1, x2) ->
9567 Ast.IdUid (_loc, "Ast"),
9568 Ast.IdUid (_loc, "CgCtr"))),
9575 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9576 Ast.IdUid (_loc, "CgNil"))),
9578 and meta_class_str_item _loc =
9580 | Ast.CrAnt (x0, x1) -> Ast.PaAnt (x0, x1)
9581 | Ast.CrVvr (x0, x1, x2, x3) ->
9588 Ast.IdUid (_loc, "Ast"),
9589 Ast.IdUid (_loc, "CrVvr"))),
9591 meta_string _loc x1),
9592 meta_meta_bool _loc x2),
9594 | Ast.CrVir (x0, x1, x2, x3) ->
9601 Ast.IdUid (_loc, "Ast"),
9602 Ast.IdUid (_loc, "CrVir"))),
9604 meta_string _loc x1),
9605 meta_meta_bool _loc x2),
9607 | Ast.CrVal (x0, x1, x2, x3) ->
9614 Ast.IdUid (_loc, "Ast"),
9615 Ast.IdUid (_loc, "CrVal"))),
9617 meta_string _loc x1),
9618 meta_meta_bool _loc x2),
9620 | Ast.CrMth (x0, x1, x2, x3, x4) ->
9628 Ast.IdUid (_loc, "Ast"),
9629 Ast.IdUid (_loc, "CrMth"))),
9631 meta_string _loc x1),
9632 meta_meta_bool _loc x2),
9635 | Ast.CrIni (x0, x1) ->
9639 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9640 Ast.IdUid (_loc, "CrIni"))),
9643 | Ast.CrInh (x0, x1, x2) ->
9649 Ast.IdUid (_loc, "Ast"),
9650 Ast.IdUid (_loc, "CrInh"))),
9652 meta_class_expr _loc x1),
9653 meta_string _loc x2)
9654 | Ast.CrCtr (x0, x1, x2) ->
9660 Ast.IdUid (_loc, "Ast"),
9661 Ast.IdUid (_loc, "CrCtr"))),
9665 | Ast.CrSem (x0, x1, x2) ->
9671 Ast.IdUid (_loc, "Ast"),
9672 Ast.IdUid (_loc, "CrSem"))),
9674 meta_class_str_item _loc x1),
9675 meta_class_str_item _loc x2)
9679 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9680 Ast.IdUid (_loc, "CrNil"))),
9682 and meta_class_type _loc =
9684 | Ast.CtAnt (x0, x1) -> Ast.PaAnt (x0, x1)
9685 | Ast.CtEq (x0, x1, x2) ->
9691 Ast.IdUid (_loc, "Ast"),
9692 Ast.IdUid (_loc, "CtEq"))),
9694 meta_class_type _loc x1),
9695 meta_class_type _loc x2)
9696 | Ast.CtCol (x0, x1, x2) ->
9702 Ast.IdUid (_loc, "Ast"),
9703 Ast.IdUid (_loc, "CtCol"))),
9705 meta_class_type _loc x1),
9706 meta_class_type _loc x2)
9707 | Ast.CtAnd (x0, x1, x2) ->
9713 Ast.IdUid (_loc, "Ast"),
9714 Ast.IdUid (_loc, "CtAnd"))),
9716 meta_class_type _loc x1),
9717 meta_class_type _loc x2)
9718 | Ast.CtSig (x0, x1, x2) ->
9724 Ast.IdUid (_loc, "Ast"),
9725 Ast.IdUid (_loc, "CtSig"))),
9728 meta_class_sig_item _loc x2)
9729 | Ast.CtFun (x0, x1, x2) ->
9735 Ast.IdUid (_loc, "Ast"),
9736 Ast.IdUid (_loc, "CtFun"))),
9739 meta_class_type _loc x2)
9740 | Ast.CtCon (x0, x1, x2, x3) ->
9747 Ast.IdUid (_loc, "Ast"),
9748 Ast.IdUid (_loc, "CtCon"))),
9750 meta_meta_bool _loc x1),
9751 meta_ident _loc x2),
9756 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9757 Ast.IdUid (_loc, "CtNil"))),
9759 and meta_ctyp _loc =
9761 | Ast.TyAnt (x0, x1) -> Ast.PaAnt (x0, x1)
9762 | Ast.TyOfAmp (x0, x1, x2) ->
9768 Ast.IdUid (_loc, "Ast"),
9769 Ast.IdUid (_loc, "TyOfAmp"))),
9773 | Ast.TyAmp (x0, x1, x2) ->
9779 Ast.IdUid (_loc, "Ast"),
9780 Ast.IdUid (_loc, "TyAmp"))),
9784 | Ast.TyVrnInfSup (x0, x1, x2) ->
9790 Ast.IdUid (_loc, "Ast"),
9791 Ast.IdUid (_loc, "TyVrnInfSup"))),
9795 | Ast.TyVrnInf (x0, x1) ->
9799 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9800 Ast.IdUid (_loc, "TyVrnInf"))),
9803 | Ast.TyVrnSup (x0, x1) ->
9807 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9808 Ast.IdUid (_loc, "TyVrnSup"))),
9811 | Ast.TyVrnEq (x0, x1) ->
9815 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9816 Ast.IdUid (_loc, "TyVrnEq"))),
9819 | Ast.TySta (x0, x1, x2) ->
9825 Ast.IdUid (_loc, "Ast"),
9826 Ast.IdUid (_loc, "TySta"))),
9830 | Ast.TyTup (x0, x1) ->
9834 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9835 Ast.IdUid (_loc, "TyTup"))),
9838 | Ast.TyMut (x0, x1) ->
9842 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9843 Ast.IdUid (_loc, "TyMut"))),
9846 | Ast.TyPrv (x0, x1) ->
9850 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9851 Ast.IdUid (_loc, "TyPrv"))),
9854 | Ast.TyOr (x0, x1, x2) ->
9860 Ast.IdUid (_loc, "Ast"),
9861 Ast.IdUid (_loc, "TyOr"))),
9865 | Ast.TyAnd (x0, x1, x2) ->
9871 Ast.IdUid (_loc, "Ast"),
9872 Ast.IdUid (_loc, "TyAnd"))),
9876 | Ast.TyOf (x0, x1, x2) ->
9882 Ast.IdUid (_loc, "Ast"),
9883 Ast.IdUid (_loc, "TyOf"))),
9887 | Ast.TySum (x0, x1) ->
9891 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9892 Ast.IdUid (_loc, "TySum"))),
9895 | Ast.TyCom (x0, x1, x2) ->
9901 Ast.IdUid (_loc, "Ast"),
9902 Ast.IdUid (_loc, "TyCom"))),
9906 | Ast.TySem (x0, x1, x2) ->
9912 Ast.IdUid (_loc, "Ast"),
9913 Ast.IdUid (_loc, "TySem"))),
9917 | Ast.TyCol (x0, x1, x2) ->
9923 Ast.IdUid (_loc, "Ast"),
9924 Ast.IdUid (_loc, "TyCol"))),
9928 | Ast.TyRec (x0, x1) ->
9932 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9933 Ast.IdUid (_loc, "TyRec"))),
9936 | Ast.TyVrn (x0, x1) ->
9940 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9941 Ast.IdUid (_loc, "TyVrn"))),
9943 meta_string _loc x1)
9944 | Ast.TyQuM (x0, x1) ->
9948 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9949 Ast.IdUid (_loc, "TyQuM"))),
9951 meta_string _loc x1)
9952 | Ast.TyQuP (x0, x1) ->
9956 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9957 Ast.IdUid (_loc, "TyQuP"))),
9959 meta_string _loc x1)
9960 | Ast.TyQuo (x0, x1) ->
9964 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
9965 Ast.IdUid (_loc, "TyQuo"))),
9967 meta_string _loc x1)
9968 | Ast.TyPol (x0, x1, x2) ->
9974 Ast.IdUid (_loc, "Ast"),
9975 Ast.IdUid (_loc, "TyPol"))),
9979 | Ast.TyOlb (x0, x1, x2) ->
9985 Ast.IdUid (_loc, "Ast"),
9986 Ast.IdUid (_loc, "TyOlb"))),
9988 meta_string _loc x1),
9990 | Ast.TyObj (x0, x1, x2) ->
9996 Ast.IdUid (_loc, "Ast"),
9997 Ast.IdUid (_loc, "TyObj"))),
10000 meta_meta_bool _loc x2)
10001 | Ast.TyDcl (x0, x1, x2, x3, x4) ->
10009 Ast.IdUid (_loc, "Ast"),
10010 Ast.IdUid (_loc, "TyDcl"))),
10012 meta_string _loc x1),
10013 meta_list meta_ctyp _loc x2),
10014 meta_ctyp _loc x3),
10016 (fun _loc (x1, x2) ->
10018 Ast.PaCom (_loc, meta_ctyp _loc x1,
10019 meta_ctyp _loc x2)))
10021 | Ast.TyMan (x0, x1, x2) ->
10027 Ast.IdUid (_loc, "Ast"),
10028 Ast.IdUid (_loc, "TyMan"))),
10030 meta_ctyp _loc x1),
10032 | Ast.TyId (x0, x1) ->
10036 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10037 Ast.IdUid (_loc, "TyId"))),
10039 meta_ident _loc x1)
10040 | Ast.TyLab (x0, x1, x2) ->
10046 Ast.IdUid (_loc, "Ast"),
10047 Ast.IdUid (_loc, "TyLab"))),
10049 meta_string _loc x1),
10051 | Ast.TyCls (x0, x1) ->
10055 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10056 Ast.IdUid (_loc, "TyCls"))),
10058 meta_ident _loc x1)
10059 | Ast.TyArr (x0, x1, x2) ->
10065 Ast.IdUid (_loc, "Ast"),
10066 Ast.IdUid (_loc, "TyArr"))),
10068 meta_ctyp _loc x1),
10070 | Ast.TyApp (x0, x1, x2) ->
10076 Ast.IdUid (_loc, "Ast"),
10077 Ast.IdUid (_loc, "TyApp"))),
10079 meta_ctyp _loc x1),
10084 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10085 Ast.IdUid (_loc, "TyAny"))),
10087 | Ast.TyAli (x0, x1, x2) ->
10093 Ast.IdUid (_loc, "Ast"),
10094 Ast.IdUid (_loc, "TyAli"))),
10096 meta_ctyp _loc x1),
10101 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10102 Ast.IdUid (_loc, "TyNil"))),
10104 and meta_expr _loc =
10106 | Ast.ExWhi (x0, x1, x2) ->
10112 Ast.IdUid (_loc, "Ast"),
10113 Ast.IdUid (_loc, "ExWhi"))),
10115 meta_expr _loc x1),
10117 | Ast.ExVrn (x0, x1) ->
10121 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10122 Ast.IdUid (_loc, "ExVrn"))),
10124 meta_string _loc x1)
10125 | Ast.ExTyc (x0, x1, x2) ->
10131 Ast.IdUid (_loc, "Ast"),
10132 Ast.IdUid (_loc, "ExTyc"))),
10134 meta_expr _loc x1),
10136 | Ast.ExCom (x0, x1, x2) ->
10142 Ast.IdUid (_loc, "Ast"),
10143 Ast.IdUid (_loc, "ExCom"))),
10145 meta_expr _loc x1),
10147 | Ast.ExTup (x0, x1) ->
10151 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10152 Ast.IdUid (_loc, "ExTup"))),
10155 | Ast.ExTry (x0, x1, x2) ->
10161 Ast.IdUid (_loc, "Ast"),
10162 Ast.IdUid (_loc, "ExTry"))),
10164 meta_expr _loc x1),
10165 meta_match_case _loc x2)
10166 | Ast.ExStr (x0, x1) ->
10170 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10171 Ast.IdUid (_loc, "ExStr"))),
10173 meta_string _loc x1)
10174 | Ast.ExSte (x0, x1, x2) ->
10180 Ast.IdUid (_loc, "Ast"),
10181 Ast.IdUid (_loc, "ExSte"))),
10183 meta_expr _loc x1),
10185 | Ast.ExSnd (x0, x1, x2) ->
10191 Ast.IdUid (_loc, "Ast"),
10192 Ast.IdUid (_loc, "ExSnd"))),
10194 meta_expr _loc x1),
10195 meta_string _loc x2)
10196 | Ast.ExSeq (x0, x1) ->
10200 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10201 Ast.IdUid (_loc, "ExSeq"))),
10204 | Ast.ExRec (x0, x1, x2) ->
10210 Ast.IdUid (_loc, "Ast"),
10211 Ast.IdUid (_loc, "ExRec"))),
10213 meta_rec_binding _loc x1),
10215 | Ast.ExOvr (x0, x1) ->
10219 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10220 Ast.IdUid (_loc, "ExOvr"))),
10222 meta_rec_binding _loc x1)
10223 | Ast.ExOlb (x0, x1, x2) ->
10229 Ast.IdUid (_loc, "Ast"),
10230 Ast.IdUid (_loc, "ExOlb"))),
10232 meta_string _loc x1),
10234 | Ast.ExObj (x0, x1, x2) ->
10240 Ast.IdUid (_loc, "Ast"),
10241 Ast.IdUid (_loc, "ExObj"))),
10243 meta_patt _loc x1),
10244 meta_class_str_item _loc x2)
10245 | Ast.ExNew (x0, x1) ->
10249 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10250 Ast.IdUid (_loc, "ExNew"))),
10252 meta_ident _loc x1)
10253 | Ast.ExMat (x0, x1, x2) ->
10259 Ast.IdUid (_loc, "Ast"),
10260 Ast.IdUid (_loc, "ExMat"))),
10262 meta_expr _loc x1),
10263 meta_match_case _loc x2)
10264 | Ast.ExLmd (x0, x1, x2, x3) ->
10271 Ast.IdUid (_loc, "Ast"),
10272 Ast.IdUid (_loc, "ExLmd"))),
10274 meta_string _loc x1),
10275 meta_module_expr _loc x2),
10277 | Ast.ExLet (x0, x1, x2, x3) ->
10284 Ast.IdUid (_loc, "Ast"),
10285 Ast.IdUid (_loc, "ExLet"))),
10287 meta_meta_bool _loc x1),
10288 meta_binding _loc x2),
10290 | Ast.ExLaz (x0, x1) ->
10294 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10295 Ast.IdUid (_loc, "ExLaz"))),
10298 | Ast.ExLab (x0, x1, x2) ->
10304 Ast.IdUid (_loc, "Ast"),
10305 Ast.IdUid (_loc, "ExLab"))),
10307 meta_string _loc x1),
10309 | Ast.ExNativeInt (x0, x1) ->
10313 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10314 Ast.IdUid (_loc, "ExNativeInt"))),
10316 meta_string _loc x1)
10317 | Ast.ExInt64 (x0, x1) ->
10321 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10322 Ast.IdUid (_loc, "ExInt64"))),
10324 meta_string _loc x1)
10325 | Ast.ExInt32 (x0, x1) ->
10329 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10330 Ast.IdUid (_loc, "ExInt32"))),
10332 meta_string _loc x1)
10333 | Ast.ExInt (x0, x1) ->
10337 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10338 Ast.IdUid (_loc, "ExInt"))),
10340 meta_string _loc x1)
10341 | Ast.ExIfe (x0, x1, x2, x3) ->
10348 Ast.IdUid (_loc, "Ast"),
10349 Ast.IdUid (_loc, "ExIfe"))),
10351 meta_expr _loc x1),
10352 meta_expr _loc x2),
10354 | Ast.ExFun (x0, x1) ->
10358 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10359 Ast.IdUid (_loc, "ExFun"))),
10361 meta_match_case _loc x1)
10362 | Ast.ExFor (x0, x1, x2, x3, x4, x5) ->
10371 Ast.IdUid (_loc, "Ast"),
10372 Ast.IdUid (_loc, "ExFor"))),
10374 meta_string _loc x1),
10375 meta_expr _loc x2),
10376 meta_expr _loc x3),
10377 meta_meta_bool _loc x4),
10379 | Ast.ExFlo (x0, x1) ->
10383 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10384 Ast.IdUid (_loc, "ExFlo"))),
10386 meta_string _loc x1)
10387 | Ast.ExCoe (x0, x1, x2, x3) ->
10394 Ast.IdUid (_loc, "Ast"),
10395 Ast.IdUid (_loc, "ExCoe"))),
10397 meta_expr _loc x1),
10398 meta_ctyp _loc x2),
10400 | Ast.ExChr (x0, x1) ->
10404 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10405 Ast.IdUid (_loc, "ExChr"))),
10407 meta_string _loc x1)
10408 | Ast.ExAss (x0, x1, x2) ->
10414 Ast.IdUid (_loc, "Ast"),
10415 Ast.IdUid (_loc, "ExAss"))),
10417 meta_expr _loc x1),
10419 | Ast.ExAsr (x0, x1) ->
10423 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10424 Ast.IdUid (_loc, "ExAsr"))),
10430 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10431 Ast.IdUid (_loc, "ExAsf"))),
10433 | Ast.ExSem (x0, x1, x2) ->
10439 Ast.IdUid (_loc, "Ast"),
10440 Ast.IdUid (_loc, "ExSem"))),
10442 meta_expr _loc x1),
10444 | Ast.ExArr (x0, x1) ->
10448 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10449 Ast.IdUid (_loc, "ExArr"))),
10452 | Ast.ExAre (x0, x1, x2) ->
10458 Ast.IdUid (_loc, "Ast"),
10459 Ast.IdUid (_loc, "ExAre"))),
10461 meta_expr _loc x1),
10463 | Ast.ExApp (x0, x1, x2) ->
10469 Ast.IdUid (_loc, "Ast"),
10470 Ast.IdUid (_loc, "ExApp"))),
10472 meta_expr _loc x1),
10474 | Ast.ExAnt (x0, x1) -> Ast.PaAnt (x0, x1)
10475 | Ast.ExAcc (x0, x1, x2) ->
10481 Ast.IdUid (_loc, "Ast"),
10482 Ast.IdUid (_loc, "ExAcc"))),
10484 meta_expr _loc x1),
10486 | Ast.ExId (x0, x1) ->
10490 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10491 Ast.IdUid (_loc, "ExId"))),
10493 meta_ident _loc x1)
10497 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10498 Ast.IdUid (_loc, "ExNil"))),
10500 and meta_ident _loc =
10502 | Ast.IdAnt (x0, x1) -> Ast.PaAnt (x0, x1)
10503 | Ast.IdUid (x0, x1) ->
10507 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10508 Ast.IdUid (_loc, "IdUid"))),
10510 meta_string _loc x1)
10511 | Ast.IdLid (x0, x1) ->
10515 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10516 Ast.IdUid (_loc, "IdLid"))),
10518 meta_string _loc x1)
10519 | Ast.IdApp (x0, x1, x2) ->
10525 Ast.IdUid (_loc, "Ast"),
10526 Ast.IdUid (_loc, "IdApp"))),
10528 meta_ident _loc x1),
10529 meta_ident _loc x2)
10530 | Ast.IdAcc (x0, x1, x2) ->
10536 Ast.IdUid (_loc, "Ast"),
10537 Ast.IdUid (_loc, "IdAcc"))),
10539 meta_ident _loc x1),
10540 meta_ident _loc x2)
10541 and meta_match_case _loc =
10543 | Ast.McAnt (x0, x1) -> Ast.PaAnt (x0, x1)
10544 | Ast.McArr (x0, x1, x2, x3) ->
10551 Ast.IdUid (_loc, "Ast"),
10552 Ast.IdUid (_loc, "McArr"))),
10554 meta_patt _loc x1),
10555 meta_expr _loc x2),
10557 | Ast.McOr (x0, x1, x2) ->
10563 Ast.IdUid (_loc, "Ast"),
10564 Ast.IdUid (_loc, "McOr"))),
10566 meta_match_case _loc x1),
10567 meta_match_case _loc x2)
10571 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10572 Ast.IdUid (_loc, "McNil"))),
10574 and meta_meta_bool _loc =
10576 | Ast.BAnt x0 -> Ast.PaAnt (_loc, x0)
10579 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10580 Ast.IdUid (_loc, "BFalse")))
10583 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10584 Ast.IdUid (_loc, "BTrue")))
10585 and meta_meta_list mf_a _loc =
10587 | Ast.LAnt x0 -> Ast.PaAnt (_loc, x0)
10588 | Ast.LCons (x0, x1) ->
10592 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10593 Ast.IdUid (_loc, "LCons"))),
10595 meta_meta_list mf_a _loc x1)
10598 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10599 Ast.IdUid (_loc, "LNil")))
10600 and meta_meta_option mf_a _loc =
10602 | Ast.OAnt x0 -> Ast.PaAnt (_loc, x0)
10606 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10607 Ast.IdUid (_loc, "OSome"))),
10611 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10612 Ast.IdUid (_loc, "ONone")))
10613 and meta_module_binding _loc =
10615 | Ast.MbAnt (x0, x1) -> Ast.PaAnt (x0, x1)
10616 | Ast.MbCol (x0, x1, x2) ->
10622 Ast.IdUid (_loc, "Ast"),
10623 Ast.IdUid (_loc, "MbCol"))),
10625 meta_string _loc x1),
10626 meta_module_type _loc x2)
10627 | Ast.MbColEq (x0, x1, x2, x3) ->
10634 Ast.IdUid (_loc, "Ast"),
10635 Ast.IdUid (_loc, "MbColEq"))),
10637 meta_string _loc x1),
10638 meta_module_type _loc x2),
10639 meta_module_expr _loc x3)
10640 | Ast.MbAnd (x0, x1, x2) ->
10646 Ast.IdUid (_loc, "Ast"),
10647 Ast.IdUid (_loc, "MbAnd"))),
10649 meta_module_binding _loc x1),
10650 meta_module_binding _loc x2)
10654 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10655 Ast.IdUid (_loc, "MbNil"))),
10657 and meta_module_expr _loc =
10659 | Ast.MeAnt (x0, x1) -> Ast.PaAnt (x0, x1)
10660 | Ast.MeTyc (x0, x1, x2) ->
10666 Ast.IdUid (_loc, "Ast"),
10667 Ast.IdUid (_loc, "MeTyc"))),
10669 meta_module_expr _loc x1),
10670 meta_module_type _loc x2)
10671 | Ast.MeStr (x0, x1) ->
10675 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10676 Ast.IdUid (_loc, "MeStr"))),
10678 meta_str_item _loc x1)
10679 | Ast.MeFun (x0, x1, x2, x3) ->
10686 Ast.IdUid (_loc, "Ast"),
10687 Ast.IdUid (_loc, "MeFun"))),
10689 meta_string _loc x1),
10690 meta_module_type _loc x2),
10691 meta_module_expr _loc x3)
10692 | Ast.MeApp (x0, x1, x2) ->
10698 Ast.IdUid (_loc, "Ast"),
10699 Ast.IdUid (_loc, "MeApp"))),
10701 meta_module_expr _loc x1),
10702 meta_module_expr _loc x2)
10703 | Ast.MeId (x0, x1) ->
10707 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10708 Ast.IdUid (_loc, "MeId"))),
10710 meta_ident _loc x1)
10714 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10715 Ast.IdUid (_loc, "MeNil"))),
10717 and meta_module_type _loc =
10719 | Ast.MtAnt (x0, x1) -> Ast.PaAnt (x0, x1)
10720 | Ast.MtWit (x0, x1, x2) ->
10726 Ast.IdUid (_loc, "Ast"),
10727 Ast.IdUid (_loc, "MtWit"))),
10729 meta_module_type _loc x1),
10730 meta_with_constr _loc x2)
10731 | Ast.MtSig (x0, x1) ->
10735 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10736 Ast.IdUid (_loc, "MtSig"))),
10738 meta_sig_item _loc x1)
10739 | Ast.MtQuo (x0, x1) ->
10743 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10744 Ast.IdUid (_loc, "MtQuo"))),
10746 meta_string _loc x1)
10747 | Ast.MtFun (x0, x1, x2, x3) ->
10754 Ast.IdUid (_loc, "Ast"),
10755 Ast.IdUid (_loc, "MtFun"))),
10757 meta_string _loc x1),
10758 meta_module_type _loc x2),
10759 meta_module_type _loc x3)
10760 | Ast.MtId (x0, x1) ->
10764 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10765 Ast.IdUid (_loc, "MtId"))),
10767 meta_ident _loc x1)
10771 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10772 Ast.IdUid (_loc, "MtNil"))),
10774 and meta_patt _loc =
10776 | Ast.PaLaz (x0, x1) ->
10780 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10781 Ast.IdUid (_loc, "PaLaz"))),
10784 | Ast.PaVrn (x0, x1) ->
10788 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10789 Ast.IdUid (_loc, "PaVrn"))),
10791 meta_string _loc x1)
10792 | Ast.PaTyp (x0, x1) ->
10796 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10797 Ast.IdUid (_loc, "PaTyp"))),
10799 meta_ident _loc x1)
10800 | Ast.PaTyc (x0, x1, x2) ->
10806 Ast.IdUid (_loc, "Ast"),
10807 Ast.IdUid (_loc, "PaTyc"))),
10809 meta_patt _loc x1),
10811 | Ast.PaTup (x0, x1) ->
10815 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10816 Ast.IdUid (_loc, "PaTup"))),
10819 | Ast.PaStr (x0, x1) ->
10823 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10824 Ast.IdUid (_loc, "PaStr"))),
10826 meta_string _loc x1)
10827 | Ast.PaEq (x0, x1, x2) ->
10833 Ast.IdUid (_loc, "Ast"),
10834 Ast.IdUid (_loc, "PaEq"))),
10836 meta_ident _loc x1),
10838 | Ast.PaRec (x0, x1) ->
10842 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10843 Ast.IdUid (_loc, "PaRec"))),
10846 | Ast.PaRng (x0, x1, x2) ->
10852 Ast.IdUid (_loc, "Ast"),
10853 Ast.IdUid (_loc, "PaRng"))),
10855 meta_patt _loc x1),
10857 | Ast.PaOrp (x0, x1, x2) ->
10863 Ast.IdUid (_loc, "Ast"),
10864 Ast.IdUid (_loc, "PaOrp"))),
10866 meta_patt _loc x1),
10868 | Ast.PaOlbi (x0, x1, x2, x3) ->
10875 Ast.IdUid (_loc, "Ast"),
10876 Ast.IdUid (_loc, "PaOlbi"))),
10878 meta_string _loc x1),
10879 meta_patt _loc x2),
10881 | Ast.PaOlb (x0, x1, x2) ->
10887 Ast.IdUid (_loc, "Ast"),
10888 Ast.IdUid (_loc, "PaOlb"))),
10890 meta_string _loc x1),
10892 | Ast.PaLab (x0, x1, x2) ->
10898 Ast.IdUid (_loc, "Ast"),
10899 Ast.IdUid (_loc, "PaLab"))),
10901 meta_string _loc x1),
10903 | Ast.PaFlo (x0, x1) ->
10907 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10908 Ast.IdUid (_loc, "PaFlo"))),
10910 meta_string _loc x1)
10911 | Ast.PaNativeInt (x0, x1) ->
10915 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10916 Ast.IdUid (_loc, "PaNativeInt"))),
10918 meta_string _loc x1)
10919 | Ast.PaInt64 (x0, x1) ->
10923 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10924 Ast.IdUid (_loc, "PaInt64"))),
10926 meta_string _loc x1)
10927 | Ast.PaInt32 (x0, x1) ->
10931 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10932 Ast.IdUid (_loc, "PaInt32"))),
10934 meta_string _loc x1)
10935 | Ast.PaInt (x0, x1) ->
10939 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10940 Ast.IdUid (_loc, "PaInt"))),
10942 meta_string _loc x1)
10943 | Ast.PaChr (x0, x1) ->
10947 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10948 Ast.IdUid (_loc, "PaChr"))),
10950 meta_string _loc x1)
10951 | Ast.PaSem (x0, x1, x2) ->
10957 Ast.IdUid (_loc, "Ast"),
10958 Ast.IdUid (_loc, "PaSem"))),
10960 meta_patt _loc x1),
10962 | Ast.PaCom (x0, x1, x2) ->
10968 Ast.IdUid (_loc, "Ast"),
10969 Ast.IdUid (_loc, "PaCom"))),
10971 meta_patt _loc x1),
10973 | Ast.PaArr (x0, x1) ->
10977 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10978 Ast.IdUid (_loc, "PaArr"))),
10981 | Ast.PaApp (x0, x1, x2) ->
10987 Ast.IdUid (_loc, "Ast"),
10988 Ast.IdUid (_loc, "PaApp"))),
10990 meta_patt _loc x1),
10995 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
10996 Ast.IdUid (_loc, "PaAny"))),
10998 | Ast.PaAnt (x0, x1) -> Ast.PaAnt (x0, x1)
10999 | Ast.PaAli (x0, x1, x2) ->
11005 Ast.IdUid (_loc, "Ast"),
11006 Ast.IdUid (_loc, "PaAli"))),
11008 meta_patt _loc x1),
11010 | Ast.PaId (x0, x1) ->
11014 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
11015 Ast.IdUid (_loc, "PaId"))),
11017 meta_ident _loc x1)
11021 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
11022 Ast.IdUid (_loc, "PaNil"))),
11024 and meta_rec_binding _loc =
11026 | Ast.RbAnt (x0, x1) -> Ast.PaAnt (x0, x1)
11027 | Ast.RbEq (x0, x1, x2) ->
11033 Ast.IdUid (_loc, "Ast"),
11034 Ast.IdUid (_loc, "RbEq"))),
11036 meta_ident _loc x1),
11038 | Ast.RbSem (x0, x1, x2) ->
11044 Ast.IdUid (_loc, "Ast"),
11045 Ast.IdUid (_loc, "RbSem"))),
11047 meta_rec_binding _loc x1),
11048 meta_rec_binding _loc x2)
11052 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
11053 Ast.IdUid (_loc, "RbNil"))),
11055 and meta_sig_item _loc =
11057 | Ast.SgAnt (x0, x1) -> Ast.PaAnt (x0, x1)
11058 | Ast.SgVal (x0, x1, x2) ->
11064 Ast.IdUid (_loc, "Ast"),
11065 Ast.IdUid (_loc, "SgVal"))),
11067 meta_string _loc x1),
11069 | Ast.SgTyp (x0, x1) ->
11073 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
11074 Ast.IdUid (_loc, "SgTyp"))),
11077 | Ast.SgOpn (x0, x1) ->
11081 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
11082 Ast.IdUid (_loc, "SgOpn"))),
11084 meta_ident _loc x1)
11085 | Ast.SgMty (x0, x1, x2) ->
11091 Ast.IdUid (_loc, "Ast"),
11092 Ast.IdUid (_loc, "SgMty"))),
11094 meta_string _loc x1),
11095 meta_module_type _loc x2)
11096 | Ast.SgRecMod (x0, x1) ->
11100 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
11101 Ast.IdUid (_loc, "SgRecMod"))),
11103 meta_module_binding _loc x1)
11104 | Ast.SgMod (x0, x1, x2) ->
11110 Ast.IdUid (_loc, "Ast"),
11111 Ast.IdUid (_loc, "SgMod"))),
11113 meta_string _loc x1),
11114 meta_module_type _loc x2)
11115 | Ast.SgInc (x0, x1) ->
11119 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
11120 Ast.IdUid (_loc, "SgInc"))),
11122 meta_module_type _loc x1)
11123 | Ast.SgExt (x0, x1, x2, x3) ->
11130 Ast.IdUid (_loc, "Ast"),
11131 Ast.IdUid (_loc, "SgExt"))),
11133 meta_string _loc x1),
11134 meta_ctyp _loc x2),
11135 meta_meta_list meta_string _loc x3)
11136 | Ast.SgExc (x0, x1) ->
11140 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
11141 Ast.IdUid (_loc, "SgExc"))),
11144 | Ast.SgDir (x0, x1, x2) ->
11150 Ast.IdUid (_loc, "Ast"),
11151 Ast.IdUid (_loc, "SgDir"))),
11153 meta_string _loc x1),
11155 | Ast.SgSem (x0, x1, x2) ->
11161 Ast.IdUid (_loc, "Ast"),
11162 Ast.IdUid (_loc, "SgSem"))),
11164 meta_sig_item _loc x1),
11165 meta_sig_item _loc x2)
11166 | Ast.SgClt (x0, x1) ->
11170 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
11171 Ast.IdUid (_loc, "SgClt"))),
11173 meta_class_type _loc x1)
11174 | Ast.SgCls (x0, x1) ->
11178 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
11179 Ast.IdUid (_loc, "SgCls"))),
11181 meta_class_type _loc x1)
11185 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
11186 Ast.IdUid (_loc, "SgNil"))),
11188 and meta_str_item _loc =
11190 | Ast.StAnt (x0, x1) -> Ast.PaAnt (x0, x1)
11191 | Ast.StVal (x0, x1, x2) ->
11197 Ast.IdUid (_loc, "Ast"),
11198 Ast.IdUid (_loc, "StVal"))),
11200 meta_meta_bool _loc x1),
11201 meta_binding _loc x2)
11202 | Ast.StTyp (x0, x1) ->
11206 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
11207 Ast.IdUid (_loc, "StTyp"))),
11210 | Ast.StOpn (x0, x1) ->
11214 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
11215 Ast.IdUid (_loc, "StOpn"))),
11217 meta_ident _loc x1)
11218 | Ast.StMty (x0, x1, x2) ->
11224 Ast.IdUid (_loc, "Ast"),
11225 Ast.IdUid (_loc, "StMty"))),
11227 meta_string _loc x1),
11228 meta_module_type _loc x2)
11229 | Ast.StRecMod (x0, x1) ->
11233 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
11234 Ast.IdUid (_loc, "StRecMod"))),
11236 meta_module_binding _loc x1)
11237 | Ast.StMod (x0, x1, x2) ->
11243 Ast.IdUid (_loc, "Ast"),
11244 Ast.IdUid (_loc, "StMod"))),
11246 meta_string _loc x1),
11247 meta_module_expr _loc x2)
11248 | Ast.StInc (x0, x1) ->
11252 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
11253 Ast.IdUid (_loc, "StInc"))),
11255 meta_module_expr _loc x1)
11256 | Ast.StExt (x0, x1, x2, x3) ->
11263 Ast.IdUid (_loc, "Ast"),
11264 Ast.IdUid (_loc, "StExt"))),
11266 meta_string _loc x1),
11267 meta_ctyp _loc x2),
11268 meta_meta_list meta_string _loc x3)
11269 | Ast.StExp (x0, x1) ->
11273 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
11274 Ast.IdUid (_loc, "StExp"))),
11277 | Ast.StExc (x0, x1, x2) ->
11283 Ast.IdUid (_loc, "Ast"),
11284 Ast.IdUid (_loc, "StExc"))),
11286 meta_ctyp _loc x1),
11287 meta_meta_option meta_ident _loc x2)
11288 | Ast.StDir (x0, x1, x2) ->
11294 Ast.IdUid (_loc, "Ast"),
11295 Ast.IdUid (_loc, "StDir"))),
11297 meta_string _loc x1),
11299 | Ast.StSem (x0, x1, x2) ->
11305 Ast.IdUid (_loc, "Ast"),
11306 Ast.IdUid (_loc, "StSem"))),
11308 meta_str_item _loc x1),
11309 meta_str_item _loc x2)
11310 | Ast.StClt (x0, x1) ->
11314 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
11315 Ast.IdUid (_loc, "StClt"))),
11317 meta_class_type _loc x1)
11318 | Ast.StCls (x0, x1) ->
11322 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
11323 Ast.IdUid (_loc, "StCls"))),
11325 meta_class_expr _loc x1)
11329 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
11330 Ast.IdUid (_loc, "StNil"))),
11332 and meta_with_constr _loc =
11334 | Ast.WcAnt (x0, x1) -> Ast.PaAnt (x0, x1)
11335 | Ast.WcAnd (x0, x1, x2) ->
11341 Ast.IdUid (_loc, "Ast"),
11342 Ast.IdUid (_loc, "WcAnd"))),
11344 meta_with_constr _loc x1),
11345 meta_with_constr _loc x2)
11346 | Ast.WcMod (x0, x1, x2) ->
11352 Ast.IdUid (_loc, "Ast"),
11353 Ast.IdUid (_loc, "WcMod"))),
11355 meta_ident _loc x1),
11356 meta_ident _loc x2)
11357 | Ast.WcTyp (x0, x1, x2) ->
11363 Ast.IdUid (_loc, "Ast"),
11364 Ast.IdUid (_loc, "WcTyp"))),
11366 meta_ctyp _loc x1),
11371 Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"),
11372 Ast.IdUid (_loc, "WcNil"))),
11382 object ((o : 'self_type))
11383 method string : string -> string = o#unknown
11387 ('self_type -> 'a -> 'a_out) -> 'a list -> 'a_out list =
11392 let _x = _f_a o _x in
11393 let _x_i1 = o#list _f_a _x_i1 in _x :: _x_i1
11395 method with_constr : with_constr -> with_constr =
11397 | WcNil _x -> let _x = o#loc _x in WcNil _x
11398 | WcTyp (_x, _x_i1, _x_i2) ->
11399 let _x = o#loc _x in
11400 let _x_i1 = o#ctyp _x_i1 in
11401 let _x_i2 = o#ctyp _x_i2 in WcTyp (_x, _x_i1, _x_i2)
11402 | WcMod (_x, _x_i1, _x_i2) ->
11403 let _x = o#loc _x in
11404 let _x_i1 = o#ident _x_i1 in
11405 let _x_i2 = o#ident _x_i2 in WcMod (_x, _x_i1, _x_i2)
11406 | WcAnd (_x, _x_i1, _x_i2) ->
11407 let _x = o#loc _x in
11408 let _x_i1 = o#with_constr _x_i1 in
11409 let _x_i2 = o#with_constr _x_i2
11410 in WcAnd (_x, _x_i1, _x_i2)
11411 | WcAnt (_x, _x_i1) ->
11412 let _x = o#loc _x in
11413 let _x_i1 = o#string _x_i1 in WcAnt (_x, _x_i1)
11415 method str_item : str_item -> str_item =
11417 | StNil _x -> let _x = o#loc _x in StNil _x
11418 | StCls (_x, _x_i1) ->
11419 let _x = o#loc _x in
11420 let _x_i1 = o#class_expr _x_i1 in StCls (_x, _x_i1)
11421 | StClt (_x, _x_i1) ->
11422 let _x = o#loc _x in
11423 let _x_i1 = o#class_type _x_i1 in StClt (_x, _x_i1)
11424 | StSem (_x, _x_i1, _x_i2) ->
11425 let _x = o#loc _x in
11426 let _x_i1 = o#str_item _x_i1 in
11427 let _x_i2 = o#str_item _x_i2
11428 in StSem (_x, _x_i1, _x_i2)
11429 | StDir (_x, _x_i1, _x_i2) ->
11430 let _x = o#loc _x in
11431 let _x_i1 = o#string _x_i1 in
11432 let _x_i2 = o#expr _x_i2 in StDir (_x, _x_i1, _x_i2)
11433 | StExc (_x, _x_i1, _x_i2) ->
11434 let _x = o#loc _x in
11435 let _x_i1 = o#ctyp _x_i1 in
11436 let _x_i2 = o#meta_option (fun o -> o#ident) _x_i2
11437 in StExc (_x, _x_i1, _x_i2)
11438 | StExp (_x, _x_i1) ->
11439 let _x = o#loc _x in
11440 let _x_i1 = o#expr _x_i1 in StExp (_x, _x_i1)
11441 | StExt (_x, _x_i1, _x_i2, _x_i3) ->
11442 let _x = o#loc _x in
11443 let _x_i1 = o#string _x_i1 in
11444 let _x_i2 = o#ctyp _x_i2 in
11445 let _x_i3 = o#meta_list (fun o -> o#string) _x_i3
11446 in StExt (_x, _x_i1, _x_i2, _x_i3)
11447 | StInc (_x, _x_i1) ->
11448 let _x = o#loc _x in
11449 let _x_i1 = o#module_expr _x_i1 in StInc (_x, _x_i1)
11450 | StMod (_x, _x_i1, _x_i2) ->
11451 let _x = o#loc _x in
11452 let _x_i1 = o#string _x_i1 in
11453 let _x_i2 = o#module_expr _x_i2
11454 in StMod (_x, _x_i1, _x_i2)
11455 | StRecMod (_x, _x_i1) ->
11456 let _x = o#loc _x in
11457 let _x_i1 = o#module_binding _x_i1
11458 in StRecMod (_x, _x_i1)
11459 | StMty (_x, _x_i1, _x_i2) ->
11460 let _x = o#loc _x in
11461 let _x_i1 = o#string _x_i1 in
11462 let _x_i2 = o#module_type _x_i2
11463 in StMty (_x, _x_i1, _x_i2)
11464 | StOpn (_x, _x_i1) ->
11465 let _x = o#loc _x in
11466 let _x_i1 = o#ident _x_i1 in StOpn (_x, _x_i1)
11467 | StTyp (_x, _x_i1) ->
11468 let _x = o#loc _x in
11469 let _x_i1 = o#ctyp _x_i1 in StTyp (_x, _x_i1)
11470 | StVal (_x, _x_i1, _x_i2) ->
11471 let _x = o#loc _x in
11472 let _x_i1 = o#meta_bool _x_i1 in
11473 let _x_i2 = o#binding _x_i2 in StVal (_x, _x_i1, _x_i2)
11474 | StAnt (_x, _x_i1) ->
11475 let _x = o#loc _x in
11476 let _x_i1 = o#string _x_i1 in StAnt (_x, _x_i1)
11478 method sig_item : sig_item -> sig_item =
11480 | SgNil _x -> let _x = o#loc _x in SgNil _x
11481 | SgCls (_x, _x_i1) ->
11482 let _x = o#loc _x in
11483 let _x_i1 = o#class_type _x_i1 in SgCls (_x, _x_i1)
11484 | SgClt (_x, _x_i1) ->
11485 let _x = o#loc _x in
11486 let _x_i1 = o#class_type _x_i1 in SgClt (_x, _x_i1)
11487 | SgSem (_x, _x_i1, _x_i2) ->
11488 let _x = o#loc _x in
11489 let _x_i1 = o#sig_item _x_i1 in
11490 let _x_i2 = o#sig_item _x_i2
11491 in SgSem (_x, _x_i1, _x_i2)
11492 | SgDir (_x, _x_i1, _x_i2) ->
11493 let _x = o#loc _x in
11494 let _x_i1 = o#string _x_i1 in
11495 let _x_i2 = o#expr _x_i2 in SgDir (_x, _x_i1, _x_i2)
11496 | SgExc (_x, _x_i1) ->
11497 let _x = o#loc _x in
11498 let _x_i1 = o#ctyp _x_i1 in SgExc (_x, _x_i1)
11499 | SgExt (_x, _x_i1, _x_i2, _x_i3) ->
11500 let _x = o#loc _x in
11501 let _x_i1 = o#string _x_i1 in
11502 let _x_i2 = o#ctyp _x_i2 in
11503 let _x_i3 = o#meta_list (fun o -> o#string) _x_i3
11504 in SgExt (_x, _x_i1, _x_i2, _x_i3)
11505 | SgInc (_x, _x_i1) ->
11506 let _x = o#loc _x in
11507 let _x_i1 = o#module_type _x_i1 in SgInc (_x, _x_i1)
11508 | SgMod (_x, _x_i1, _x_i2) ->
11509 let _x = o#loc _x in
11510 let _x_i1 = o#string _x_i1 in
11511 let _x_i2 = o#module_type _x_i2
11512 in SgMod (_x, _x_i1, _x_i2)
11513 | SgRecMod (_x, _x_i1) ->
11514 let _x = o#loc _x in
11515 let _x_i1 = o#module_binding _x_i1
11516 in SgRecMod (_x, _x_i1)
11517 | SgMty (_x, _x_i1, _x_i2) ->
11518 let _x = o#loc _x in
11519 let _x_i1 = o#string _x_i1 in
11520 let _x_i2 = o#module_type _x_i2
11521 in SgMty (_x, _x_i1, _x_i2)
11522 | SgOpn (_x, _x_i1) ->
11523 let _x = o#loc _x in
11524 let _x_i1 = o#ident _x_i1 in SgOpn (_x, _x_i1)
11525 | SgTyp (_x, _x_i1) ->
11526 let _x = o#loc _x in
11527 let _x_i1 = o#ctyp _x_i1 in SgTyp (_x, _x_i1)
11528 | SgVal (_x, _x_i1, _x_i2) ->
11529 let _x = o#loc _x in
11530 let _x_i1 = o#string _x_i1 in
11531 let _x_i2 = o#ctyp _x_i2 in SgVal (_x, _x_i1, _x_i2)
11532 | SgAnt (_x, _x_i1) ->
11533 let _x = o#loc _x in
11534 let _x_i1 = o#string _x_i1 in SgAnt (_x, _x_i1)
11536 method rec_binding : rec_binding -> rec_binding =
11538 | RbNil _x -> let _x = o#loc _x in RbNil _x
11539 | RbSem (_x, _x_i1, _x_i2) ->
11540 let _x = o#loc _x in
11541 let _x_i1 = o#rec_binding _x_i1 in
11542 let _x_i2 = o#rec_binding _x_i2
11543 in RbSem (_x, _x_i1, _x_i2)
11544 | RbEq (_x, _x_i1, _x_i2) ->
11545 let _x = o#loc _x in
11546 let _x_i1 = o#ident _x_i1 in
11547 let _x_i2 = o#expr _x_i2 in RbEq (_x, _x_i1, _x_i2)
11548 | RbAnt (_x, _x_i1) ->
11549 let _x = o#loc _x in
11550 let _x_i1 = o#string _x_i1 in RbAnt (_x, _x_i1)
11552 method patt : patt -> patt =
11554 | PaNil _x -> let _x = o#loc _x in PaNil _x
11555 | PaId (_x, _x_i1) ->
11556 let _x = o#loc _x in
11557 let _x_i1 = o#ident _x_i1 in PaId (_x, _x_i1)
11558 | PaAli (_x, _x_i1, _x_i2) ->
11559 let _x = o#loc _x in
11560 let _x_i1 = o#patt _x_i1 in
11561 let _x_i2 = o#patt _x_i2 in PaAli (_x, _x_i1, _x_i2)
11562 | PaAnt (_x, _x_i1) ->
11563 let _x = o#loc _x in
11564 let _x_i1 = o#string _x_i1 in PaAnt (_x, _x_i1)
11565 | PaAny _x -> let _x = o#loc _x in PaAny _x
11566 | PaApp (_x, _x_i1, _x_i2) ->
11567 let _x = o#loc _x in
11568 let _x_i1 = o#patt _x_i1 in
11569 let _x_i2 = o#patt _x_i2 in PaApp (_x, _x_i1, _x_i2)
11570 | PaArr (_x, _x_i1) ->
11571 let _x = o#loc _x in
11572 let _x_i1 = o#patt _x_i1 in PaArr (_x, _x_i1)
11573 | PaCom (_x, _x_i1, _x_i2) ->
11574 let _x = o#loc _x in
11575 let _x_i1 = o#patt _x_i1 in
11576 let _x_i2 = o#patt _x_i2 in PaCom (_x, _x_i1, _x_i2)
11577 | PaSem (_x, _x_i1, _x_i2) ->
11578 let _x = o#loc _x in
11579 let _x_i1 = o#patt _x_i1 in
11580 let _x_i2 = o#patt _x_i2 in PaSem (_x, _x_i1, _x_i2)
11581 | PaChr (_x, _x_i1) ->
11582 let _x = o#loc _x in
11583 let _x_i1 = o#string _x_i1 in PaChr (_x, _x_i1)
11584 | PaInt (_x, _x_i1) ->
11585 let _x = o#loc _x in
11586 let _x_i1 = o#string _x_i1 in PaInt (_x, _x_i1)
11587 | PaInt32 (_x, _x_i1) ->
11588 let _x = o#loc _x in
11589 let _x_i1 = o#string _x_i1 in PaInt32 (_x, _x_i1)
11590 | PaInt64 (_x, _x_i1) ->
11591 let _x = o#loc _x in
11592 let _x_i1 = o#string _x_i1 in PaInt64 (_x, _x_i1)
11593 | PaNativeInt (_x, _x_i1) ->
11594 let _x = o#loc _x in
11595 let _x_i1 = o#string _x_i1 in PaNativeInt (_x, _x_i1)
11596 | PaFlo (_x, _x_i1) ->
11597 let _x = o#loc _x in
11598 let _x_i1 = o#string _x_i1 in PaFlo (_x, _x_i1)
11599 | PaLab (_x, _x_i1, _x_i2) ->
11600 let _x = o#loc _x in
11601 let _x_i1 = o#string _x_i1 in
11602 let _x_i2 = o#patt _x_i2 in PaLab (_x, _x_i1, _x_i2)
11603 | PaOlb (_x, _x_i1, _x_i2) ->
11604 let _x = o#loc _x in
11605 let _x_i1 = o#string _x_i1 in
11606 let _x_i2 = o#patt _x_i2 in PaOlb (_x, _x_i1, _x_i2)
11607 | PaOlbi (_x, _x_i1, _x_i2, _x_i3) ->
11608 let _x = o#loc _x in
11609 let _x_i1 = o#string _x_i1 in
11610 let _x_i2 = o#patt _x_i2 in
11611 let _x_i3 = o#expr _x_i3
11612 in PaOlbi (_x, _x_i1, _x_i2, _x_i3)
11613 | PaOrp (_x, _x_i1, _x_i2) ->
11614 let _x = o#loc _x in
11615 let _x_i1 = o#patt _x_i1 in
11616 let _x_i2 = o#patt _x_i2 in PaOrp (_x, _x_i1, _x_i2)
11617 | PaRng (_x, _x_i1, _x_i2) ->
11618 let _x = o#loc _x in
11619 let _x_i1 = o#patt _x_i1 in
11620 let _x_i2 = o#patt _x_i2 in PaRng (_x, _x_i1, _x_i2)
11621 | PaRec (_x, _x_i1) ->
11622 let _x = o#loc _x in
11623 let _x_i1 = o#patt _x_i1 in PaRec (_x, _x_i1)
11624 | PaEq (_x, _x_i1, _x_i2) ->
11625 let _x = o#loc _x in
11626 let _x_i1 = o#ident _x_i1 in
11627 let _x_i2 = o#patt _x_i2 in PaEq (_x, _x_i1, _x_i2)
11628 | PaStr (_x, _x_i1) ->
11629 let _x = o#loc _x in
11630 let _x_i1 = o#string _x_i1 in PaStr (_x, _x_i1)
11631 | PaTup (_x, _x_i1) ->
11632 let _x = o#loc _x in
11633 let _x_i1 = o#patt _x_i1 in PaTup (_x, _x_i1)
11634 | PaTyc (_x, _x_i1, _x_i2) ->
11635 let _x = o#loc _x in
11636 let _x_i1 = o#patt _x_i1 in
11637 let _x_i2 = o#ctyp _x_i2 in PaTyc (_x, _x_i1, _x_i2)
11638 | PaTyp (_x, _x_i1) ->
11639 let _x = o#loc _x in
11640 let _x_i1 = o#ident _x_i1 in PaTyp (_x, _x_i1)
11641 | PaVrn (_x, _x_i1) ->
11642 let _x = o#loc _x in
11643 let _x_i1 = o#string _x_i1 in PaVrn (_x, _x_i1)
11644 | PaLaz (_x, _x_i1) ->
11645 let _x = o#loc _x in
11646 let _x_i1 = o#patt _x_i1 in PaLaz (_x, _x_i1)
11648 method module_type : module_type -> module_type =
11650 | MtNil _x -> let _x = o#loc _x in MtNil _x
11651 | MtId (_x, _x_i1) ->
11652 let _x = o#loc _x in
11653 let _x_i1 = o#ident _x_i1 in MtId (_x, _x_i1)
11654 | MtFun (_x, _x_i1, _x_i2, _x_i3) ->
11655 let _x = o#loc _x in
11656 let _x_i1 = o#string _x_i1 in
11657 let _x_i2 = o#module_type _x_i2 in
11658 let _x_i3 = o#module_type _x_i3
11659 in MtFun (_x, _x_i1, _x_i2, _x_i3)
11660 | MtQuo (_x, _x_i1) ->
11661 let _x = o#loc _x in
11662 let _x_i1 = o#string _x_i1 in MtQuo (_x, _x_i1)
11663 | MtSig (_x, _x_i1) ->
11664 let _x = o#loc _x in
11665 let _x_i1 = o#sig_item _x_i1 in MtSig (_x, _x_i1)
11666 | MtWit (_x, _x_i1, _x_i2) ->
11667 let _x = o#loc _x in
11668 let _x_i1 = o#module_type _x_i1 in
11669 let _x_i2 = o#with_constr _x_i2
11670 in MtWit (_x, _x_i1, _x_i2)
11671 | MtAnt (_x, _x_i1) ->
11672 let _x = o#loc _x in
11673 let _x_i1 = o#string _x_i1 in MtAnt (_x, _x_i1)
11675 method module_expr : module_expr -> module_expr =
11677 | MeNil _x -> let _x = o#loc _x in MeNil _x
11678 | MeId (_x, _x_i1) ->
11679 let _x = o#loc _x in
11680 let _x_i1 = o#ident _x_i1 in MeId (_x, _x_i1)
11681 | MeApp (_x, _x_i1, _x_i2) ->
11682 let _x = o#loc _x in
11683 let _x_i1 = o#module_expr _x_i1 in
11684 let _x_i2 = o#module_expr _x_i2
11685 in MeApp (_x, _x_i1, _x_i2)
11686 | MeFun (_x, _x_i1, _x_i2, _x_i3) ->
11687 let _x = o#loc _x in
11688 let _x_i1 = o#string _x_i1 in
11689 let _x_i2 = o#module_type _x_i2 in
11690 let _x_i3 = o#module_expr _x_i3
11691 in MeFun (_x, _x_i1, _x_i2, _x_i3)
11692 | MeStr (_x, _x_i1) ->
11693 let _x = o#loc _x in
11694 let _x_i1 = o#str_item _x_i1 in MeStr (_x, _x_i1)
11695 | MeTyc (_x, _x_i1, _x_i2) ->
11696 let _x = o#loc _x in
11697 let _x_i1 = o#module_expr _x_i1 in
11698 let _x_i2 = o#module_type _x_i2
11699 in MeTyc (_x, _x_i1, _x_i2)
11700 | MeAnt (_x, _x_i1) ->
11701 let _x = o#loc _x in
11702 let _x_i1 = o#string _x_i1 in MeAnt (_x, _x_i1)
11704 method module_binding : module_binding -> module_binding =
11706 | MbNil _x -> let _x = o#loc _x in MbNil _x
11707 | MbAnd (_x, _x_i1, _x_i2) ->
11708 let _x = o#loc _x in
11709 let _x_i1 = o#module_binding _x_i1 in
11710 let _x_i2 = o#module_binding _x_i2
11711 in MbAnd (_x, _x_i1, _x_i2)
11712 | MbColEq (_x, _x_i1, _x_i2, _x_i3) ->
11713 let _x = o#loc _x in
11714 let _x_i1 = o#string _x_i1 in
11715 let _x_i2 = o#module_type _x_i2 in
11716 let _x_i3 = o#module_expr _x_i3
11717 in MbColEq (_x, _x_i1, _x_i2, _x_i3)
11718 | MbCol (_x, _x_i1, _x_i2) ->
11719 let _x = o#loc _x in
11720 let _x_i1 = o#string _x_i1 in
11721 let _x_i2 = o#module_type _x_i2
11722 in MbCol (_x, _x_i1, _x_i2)
11723 | MbAnt (_x, _x_i1) ->
11724 let _x = o#loc _x in
11725 let _x_i1 = o#string _x_i1 in MbAnt (_x, _x_i1)
11727 method meta_option :
11729 ('self_type -> 'a -> 'a_out) ->
11730 'a meta_option -> 'a_out meta_option =
11734 | OSome _x -> let _x = _f_a o _x in OSome _x
11735 | OAnt _x -> let _x = o#string _x in OAnt _x
11739 ('self_type -> 'a -> 'a_out) ->
11740 'a meta_list -> 'a_out meta_list =
11744 | LCons (_x, _x_i1) ->
11745 let _x = _f_a o _x in
11746 let _x_i1 = o#meta_list _f_a _x_i1
11747 in LCons (_x, _x_i1)
11748 | LAnt _x -> let _x = o#string _x in LAnt _x
11750 method meta_bool : meta_bool -> meta_bool =
11754 | BAnt _x -> let _x = o#string _x in BAnt _x
11756 method match_case : match_case -> match_case =
11758 | McNil _x -> let _x = o#loc _x in McNil _x
11759 | McOr (_x, _x_i1, _x_i2) ->
11760 let _x = o#loc _x in
11761 let _x_i1 = o#match_case _x_i1 in
11762 let _x_i2 = o#match_case _x_i2
11763 in McOr (_x, _x_i1, _x_i2)
11764 | McArr (_x, _x_i1, _x_i2, _x_i3) ->
11765 let _x = o#loc _x in
11766 let _x_i1 = o#patt _x_i1 in
11767 let _x_i2 = o#expr _x_i2 in
11768 let _x_i3 = o#expr _x_i3
11769 in McArr (_x, _x_i1, _x_i2, _x_i3)
11770 | McAnt (_x, _x_i1) ->
11771 let _x = o#loc _x in
11772 let _x_i1 = o#string _x_i1 in McAnt (_x, _x_i1)
11774 method loc : loc -> loc = o#unknown
11776 method ident : ident -> ident =
11778 | IdAcc (_x, _x_i1, _x_i2) ->
11779 let _x = o#loc _x in
11780 let _x_i1 = o#ident _x_i1 in
11781 let _x_i2 = o#ident _x_i2 in IdAcc (_x, _x_i1, _x_i2)
11782 | IdApp (_x, _x_i1, _x_i2) ->
11783 let _x = o#loc _x in
11784 let _x_i1 = o#ident _x_i1 in
11785 let _x_i2 = o#ident _x_i2 in IdApp (_x, _x_i1, _x_i2)
11786 | IdLid (_x, _x_i1) ->
11787 let _x = o#loc _x in
11788 let _x_i1 = o#string _x_i1 in IdLid (_x, _x_i1)
11789 | IdUid (_x, _x_i1) ->
11790 let _x = o#loc _x in
11791 let _x_i1 = o#string _x_i1 in IdUid (_x, _x_i1)
11792 | IdAnt (_x, _x_i1) ->
11793 let _x = o#loc _x in
11794 let _x_i1 = o#string _x_i1 in IdAnt (_x, _x_i1)
11796 method expr : expr -> expr =
11798 | ExNil _x -> let _x = o#loc _x in ExNil _x
11799 | ExId (_x, _x_i1) ->
11800 let _x = o#loc _x in
11801 let _x_i1 = o#ident _x_i1 in ExId (_x, _x_i1)
11802 | ExAcc (_x, _x_i1, _x_i2) ->
11803 let _x = o#loc _x in
11804 let _x_i1 = o#expr _x_i1 in
11805 let _x_i2 = o#expr _x_i2 in ExAcc (_x, _x_i1, _x_i2)
11806 | ExAnt (_x, _x_i1) ->
11807 let _x = o#loc _x in
11808 let _x_i1 = o#string _x_i1 in ExAnt (_x, _x_i1)
11809 | ExApp (_x, _x_i1, _x_i2) ->
11810 let _x = o#loc _x in
11811 let _x_i1 = o#expr _x_i1 in
11812 let _x_i2 = o#expr _x_i2 in ExApp (_x, _x_i1, _x_i2)
11813 | ExAre (_x, _x_i1, _x_i2) ->
11814 let _x = o#loc _x in
11815 let _x_i1 = o#expr _x_i1 in
11816 let _x_i2 = o#expr _x_i2 in ExAre (_x, _x_i1, _x_i2)
11817 | ExArr (_x, _x_i1) ->
11818 let _x = o#loc _x in
11819 let _x_i1 = o#expr _x_i1 in ExArr (_x, _x_i1)
11820 | ExSem (_x, _x_i1, _x_i2) ->
11821 let _x = o#loc _x in
11822 let _x_i1 = o#expr _x_i1 in
11823 let _x_i2 = o#expr _x_i2 in ExSem (_x, _x_i1, _x_i2)
11824 | ExAsf _x -> let _x = o#loc _x in ExAsf _x
11825 | ExAsr (_x, _x_i1) ->
11826 let _x = o#loc _x in
11827 let _x_i1 = o#expr _x_i1 in ExAsr (_x, _x_i1)
11828 | ExAss (_x, _x_i1, _x_i2) ->
11829 let _x = o#loc _x in
11830 let _x_i1 = o#expr _x_i1 in
11831 let _x_i2 = o#expr _x_i2 in ExAss (_x, _x_i1, _x_i2)
11832 | ExChr (_x, _x_i1) ->
11833 let _x = o#loc _x in
11834 let _x_i1 = o#string _x_i1 in ExChr (_x, _x_i1)
11835 | ExCoe (_x, _x_i1, _x_i2, _x_i3) ->
11836 let _x = o#loc _x in
11837 let _x_i1 = o#expr _x_i1 in
11838 let _x_i2 = o#ctyp _x_i2 in
11839 let _x_i3 = o#ctyp _x_i3
11840 in ExCoe (_x, _x_i1, _x_i2, _x_i3)
11841 | ExFlo (_x, _x_i1) ->
11842 let _x = o#loc _x in
11843 let _x_i1 = o#string _x_i1 in ExFlo (_x, _x_i1)
11844 | ExFor (_x, _x_i1, _x_i2, _x_i3, _x_i4, _x_i5) ->
11845 let _x = o#loc _x in
11846 let _x_i1 = o#string _x_i1 in
11847 let _x_i2 = o#expr _x_i2 in
11848 let _x_i3 = o#expr _x_i3 in
11849 let _x_i4 = o#meta_bool _x_i4 in
11850 let _x_i5 = o#expr _x_i5
11851 in ExFor (_x, _x_i1, _x_i2, _x_i3, _x_i4, _x_i5)
11852 | ExFun (_x, _x_i1) ->
11853 let _x = o#loc _x in
11854 let _x_i1 = o#match_case _x_i1 in ExFun (_x, _x_i1)
11855 | ExIfe (_x, _x_i1, _x_i2, _x_i3) ->
11856 let _x = o#loc _x in
11857 let _x_i1 = o#expr _x_i1 in
11858 let _x_i2 = o#expr _x_i2 in
11859 let _x_i3 = o#expr _x_i3
11860 in ExIfe (_x, _x_i1, _x_i2, _x_i3)
11861 | ExInt (_x, _x_i1) ->
11862 let _x = o#loc _x in
11863 let _x_i1 = o#string _x_i1 in ExInt (_x, _x_i1)
11864 | ExInt32 (_x, _x_i1) ->
11865 let _x = o#loc _x in
11866 let _x_i1 = o#string _x_i1 in ExInt32 (_x, _x_i1)
11867 | ExInt64 (_x, _x_i1) ->
11868 let _x = o#loc _x in
11869 let _x_i1 = o#string _x_i1 in ExInt64 (_x, _x_i1)
11870 | ExNativeInt (_x, _x_i1) ->
11871 let _x = o#loc _x in
11872 let _x_i1 = o#string _x_i1 in ExNativeInt (_x, _x_i1)
11873 | ExLab (_x, _x_i1, _x_i2) ->
11874 let _x = o#loc _x in
11875 let _x_i1 = o#string _x_i1 in
11876 let _x_i2 = o#expr _x_i2 in ExLab (_x, _x_i1, _x_i2)
11877 | ExLaz (_x, _x_i1) ->
11878 let _x = o#loc _x in
11879 let _x_i1 = o#expr _x_i1 in ExLaz (_x, _x_i1)
11880 | ExLet (_x, _x_i1, _x_i2, _x_i3) ->
11881 let _x = o#loc _x in
11882 let _x_i1 = o#meta_bool _x_i1 in
11883 let _x_i2 = o#binding _x_i2 in
11884 let _x_i3 = o#expr _x_i3
11885 in ExLet (_x, _x_i1, _x_i2, _x_i3)
11886 | ExLmd (_x, _x_i1, _x_i2, _x_i3) ->
11887 let _x = o#loc _x in
11888 let _x_i1 = o#string _x_i1 in
11889 let _x_i2 = o#module_expr _x_i2 in
11890 let _x_i3 = o#expr _x_i3
11891 in ExLmd (_x, _x_i1, _x_i2, _x_i3)
11892 | ExMat (_x, _x_i1, _x_i2) ->
11893 let _x = o#loc _x in
11894 let _x_i1 = o#expr _x_i1 in
11895 let _x_i2 = o#match_case _x_i2
11896 in ExMat (_x, _x_i1, _x_i2)
11897 | ExNew (_x, _x_i1) ->
11898 let _x = o#loc _x in
11899 let _x_i1 = o#ident _x_i1 in ExNew (_x, _x_i1)
11900 | ExObj (_x, _x_i1, _x_i2) ->
11901 let _x = o#loc _x in
11902 let _x_i1 = o#patt _x_i1 in
11903 let _x_i2 = o#class_str_item _x_i2
11904 in ExObj (_x, _x_i1, _x_i2)
11905 | ExOlb (_x, _x_i1, _x_i2) ->
11906 let _x = o#loc _x in
11907 let _x_i1 = o#string _x_i1 in
11908 let _x_i2 = o#expr _x_i2 in ExOlb (_x, _x_i1, _x_i2)
11909 | ExOvr (_x, _x_i1) ->
11910 let _x = o#loc _x in
11911 let _x_i1 = o#rec_binding _x_i1 in ExOvr (_x, _x_i1)
11912 | ExRec (_x, _x_i1, _x_i2) ->
11913 let _x = o#loc _x in
11914 let _x_i1 = o#rec_binding _x_i1 in
11915 let _x_i2 = o#expr _x_i2 in ExRec (_x, _x_i1, _x_i2)
11916 | ExSeq (_x, _x_i1) ->
11917 let _x = o#loc _x in
11918 let _x_i1 = o#expr _x_i1 in ExSeq (_x, _x_i1)
11919 | ExSnd (_x, _x_i1, _x_i2) ->
11920 let _x = o#loc _x in
11921 let _x_i1 = o#expr _x_i1 in
11922 let _x_i2 = o#string _x_i2 in ExSnd (_x, _x_i1, _x_i2)
11923 | ExSte (_x, _x_i1, _x_i2) ->
11924 let _x = o#loc _x in
11925 let _x_i1 = o#expr _x_i1 in
11926 let _x_i2 = o#expr _x_i2 in ExSte (_x, _x_i1, _x_i2)
11927 | ExStr (_x, _x_i1) ->
11928 let _x = o#loc _x in
11929 let _x_i1 = o#string _x_i1 in ExStr (_x, _x_i1)
11930 | ExTry (_x, _x_i1, _x_i2) ->
11931 let _x = o#loc _x in
11932 let _x_i1 = o#expr _x_i1 in
11933 let _x_i2 = o#match_case _x_i2
11934 in ExTry (_x, _x_i1, _x_i2)
11935 | ExTup (_x, _x_i1) ->
11936 let _x = o#loc _x in
11937 let _x_i1 = o#expr _x_i1 in ExTup (_x, _x_i1)
11938 | ExCom (_x, _x_i1, _x_i2) ->
11939 let _x = o#loc _x in
11940 let _x_i1 = o#expr _x_i1 in
11941 let _x_i2 = o#expr _x_i2 in ExCom (_x, _x_i1, _x_i2)
11942 | ExTyc (_x, _x_i1, _x_i2) ->
11943 let _x = o#loc _x in
11944 let _x_i1 = o#expr _x_i1 in
11945 let _x_i2 = o#ctyp _x_i2 in ExTyc (_x, _x_i1, _x_i2)
11946 | ExVrn (_x, _x_i1) ->
11947 let _x = o#loc _x in
11948 let _x_i1 = o#string _x_i1 in ExVrn (_x, _x_i1)
11949 | ExWhi (_x, _x_i1, _x_i2) ->
11950 let _x = o#loc _x in
11951 let _x_i1 = o#expr _x_i1 in
11952 let _x_i2 = o#expr _x_i2 in ExWhi (_x, _x_i1, _x_i2)
11954 method ctyp : ctyp -> ctyp =
11956 | TyNil _x -> let _x = o#loc _x in TyNil _x
11957 | TyAli (_x, _x_i1, _x_i2) ->
11958 let _x = o#loc _x in
11959 let _x_i1 = o#ctyp _x_i1 in
11960 let _x_i2 = o#ctyp _x_i2 in TyAli (_x, _x_i1, _x_i2)
11961 | TyAny _x -> let _x = o#loc _x in TyAny _x
11962 | TyApp (_x, _x_i1, _x_i2) ->
11963 let _x = o#loc _x in
11964 let _x_i1 = o#ctyp _x_i1 in
11965 let _x_i2 = o#ctyp _x_i2 in TyApp (_x, _x_i1, _x_i2)
11966 | TyArr (_x, _x_i1, _x_i2) ->
11967 let _x = o#loc _x in
11968 let _x_i1 = o#ctyp _x_i1 in
11969 let _x_i2 = o#ctyp _x_i2 in TyArr (_x, _x_i1, _x_i2)
11970 | TyCls (_x, _x_i1) ->
11971 let _x = o#loc _x in
11972 let _x_i1 = o#ident _x_i1 in TyCls (_x, _x_i1)
11973 | TyLab (_x, _x_i1, _x_i2) ->
11974 let _x = o#loc _x in
11975 let _x_i1 = o#string _x_i1 in
11976 let _x_i2 = o#ctyp _x_i2 in TyLab (_x, _x_i1, _x_i2)
11977 | TyId (_x, _x_i1) ->
11978 let _x = o#loc _x in
11979 let _x_i1 = o#ident _x_i1 in TyId (_x, _x_i1)
11980 | TyMan (_x, _x_i1, _x_i2) ->
11981 let _x = o#loc _x in
11982 let _x_i1 = o#ctyp _x_i1 in
11983 let _x_i2 = o#ctyp _x_i2 in TyMan (_x, _x_i1, _x_i2)
11984 | TyDcl (_x, _x_i1, _x_i2, _x_i3, _x_i4) ->
11985 let _x = o#loc _x in
11986 let _x_i1 = o#string _x_i1 in
11987 let _x_i2 = o#list (fun o -> o#ctyp) _x_i2 in
11988 let _x_i3 = o#ctyp _x_i3 in
11991 (fun o (_x, _x_i1) ->
11992 let _x = o#ctyp _x in
11993 let _x_i1 = o#ctyp _x_i1 in (_x, _x_i1))
11995 in TyDcl (_x, _x_i1, _x_i2, _x_i3, _x_i4)
11996 | TyObj (_x, _x_i1, _x_i2) ->
11997 let _x = o#loc _x in
11998 let _x_i1 = o#ctyp _x_i1 in
11999 let _x_i2 = o#meta_bool _x_i2
12000 in TyObj (_x, _x_i1, _x_i2)
12001 | TyOlb (_x, _x_i1, _x_i2) ->
12002 let _x = o#loc _x in
12003 let _x_i1 = o#string _x_i1 in
12004 let _x_i2 = o#ctyp _x_i2 in TyOlb (_x, _x_i1, _x_i2)
12005 | TyPol (_x, _x_i1, _x_i2) ->
12006 let _x = o#loc _x in
12007 let _x_i1 = o#ctyp _x_i1 in
12008 let _x_i2 = o#ctyp _x_i2 in TyPol (_x, _x_i1, _x_i2)
12009 | TyQuo (_x, _x_i1) ->
12010 let _x = o#loc _x in
12011 let _x_i1 = o#string _x_i1 in TyQuo (_x, _x_i1)
12012 | TyQuP (_x, _x_i1) ->
12013 let _x = o#loc _x in
12014 let _x_i1 = o#string _x_i1 in TyQuP (_x, _x_i1)
12015 | TyQuM (_x, _x_i1) ->
12016 let _x = o#loc _x in
12017 let _x_i1 = o#string _x_i1 in TyQuM (_x, _x_i1)
12018 | TyVrn (_x, _x_i1) ->
12019 let _x = o#loc _x in
12020 let _x_i1 = o#string _x_i1 in TyVrn (_x, _x_i1)
12021 | TyRec (_x, _x_i1) ->
12022 let _x = o#loc _x in
12023 let _x_i1 = o#ctyp _x_i1 in TyRec (_x, _x_i1)
12024 | TyCol (_x, _x_i1, _x_i2) ->
12025 let _x = o#loc _x in
12026 let _x_i1 = o#ctyp _x_i1 in
12027 let _x_i2 = o#ctyp _x_i2 in TyCol (_x, _x_i1, _x_i2)
12028 | TySem (_x, _x_i1, _x_i2) ->
12029 let _x = o#loc _x in
12030 let _x_i1 = o#ctyp _x_i1 in
12031 let _x_i2 = o#ctyp _x_i2 in TySem (_x, _x_i1, _x_i2)
12032 | TyCom (_x, _x_i1, _x_i2) ->
12033 let _x = o#loc _x in
12034 let _x_i1 = o#ctyp _x_i1 in
12035 let _x_i2 = o#ctyp _x_i2 in TyCom (_x, _x_i1, _x_i2)
12036 | TySum (_x, _x_i1) ->
12037 let _x = o#loc _x in
12038 let _x_i1 = o#ctyp _x_i1 in TySum (_x, _x_i1)
12039 | TyOf (_x, _x_i1, _x_i2) ->
12040 let _x = o#loc _x in
12041 let _x_i1 = o#ctyp _x_i1 in
12042 let _x_i2 = o#ctyp _x_i2 in TyOf (_x, _x_i1, _x_i2)
12043 | TyAnd (_x, _x_i1, _x_i2) ->
12044 let _x = o#loc _x in
12045 let _x_i1 = o#ctyp _x_i1 in
12046 let _x_i2 = o#ctyp _x_i2 in TyAnd (_x, _x_i1, _x_i2)
12047 | TyOr (_x, _x_i1, _x_i2) ->
12048 let _x = o#loc _x in
12049 let _x_i1 = o#ctyp _x_i1 in
12050 let _x_i2 = o#ctyp _x_i2 in TyOr (_x, _x_i1, _x_i2)
12051 | TyPrv (_x, _x_i1) ->
12052 let _x = o#loc _x in
12053 let _x_i1 = o#ctyp _x_i1 in TyPrv (_x, _x_i1)
12054 | TyMut (_x, _x_i1) ->
12055 let _x = o#loc _x in
12056 let _x_i1 = o#ctyp _x_i1 in TyMut (_x, _x_i1)
12057 | TyTup (_x, _x_i1) ->
12058 let _x = o#loc _x in
12059 let _x_i1 = o#ctyp _x_i1 in TyTup (_x, _x_i1)
12060 | TySta (_x, _x_i1, _x_i2) ->
12061 let _x = o#loc _x in
12062 let _x_i1 = o#ctyp _x_i1 in
12063 let _x_i2 = o#ctyp _x_i2 in TySta (_x, _x_i1, _x_i2)
12064 | TyVrnEq (_x, _x_i1) ->
12065 let _x = o#loc _x in
12066 let _x_i1 = o#ctyp _x_i1 in TyVrnEq (_x, _x_i1)
12067 | TyVrnSup (_x, _x_i1) ->
12068 let _x = o#loc _x in
12069 let _x_i1 = o#ctyp _x_i1 in TyVrnSup (_x, _x_i1)
12070 | TyVrnInf (_x, _x_i1) ->
12071 let _x = o#loc _x in
12072 let _x_i1 = o#ctyp _x_i1 in TyVrnInf (_x, _x_i1)
12073 | TyVrnInfSup (_x, _x_i1, _x_i2) ->
12074 let _x = o#loc _x in
12075 let _x_i1 = o#ctyp _x_i1 in
12076 let _x_i2 = o#ctyp _x_i2
12077 in TyVrnInfSup (_x, _x_i1, _x_i2)
12078 | TyAmp (_x, _x_i1, _x_i2) ->
12079 let _x = o#loc _x in
12080 let _x_i1 = o#ctyp _x_i1 in
12081 let _x_i2 = o#ctyp _x_i2 in TyAmp (_x, _x_i1, _x_i2)
12082 | TyOfAmp (_x, _x_i1, _x_i2) ->
12083 let _x = o#loc _x in
12084 let _x_i1 = o#ctyp _x_i1 in
12085 let _x_i2 = o#ctyp _x_i2 in TyOfAmp (_x, _x_i1, _x_i2)
12086 | TyAnt (_x, _x_i1) ->
12087 let _x = o#loc _x in
12088 let _x_i1 = o#string _x_i1 in TyAnt (_x, _x_i1)
12090 method class_type : class_type -> class_type =
12092 | CtNil _x -> let _x = o#loc _x in CtNil _x
12093 | CtCon (_x, _x_i1, _x_i2, _x_i3) ->
12094 let _x = o#loc _x in
12095 let _x_i1 = o#meta_bool _x_i1 in
12096 let _x_i2 = o#ident _x_i2 in
12097 let _x_i3 = o#ctyp _x_i3
12098 in CtCon (_x, _x_i1, _x_i2, _x_i3)
12099 | CtFun (_x, _x_i1, _x_i2) ->
12100 let _x = o#loc _x in
12101 let _x_i1 = o#ctyp _x_i1 in
12102 let _x_i2 = o#class_type _x_i2
12103 in CtFun (_x, _x_i1, _x_i2)
12104 | CtSig (_x, _x_i1, _x_i2) ->
12105 let _x = o#loc _x in
12106 let _x_i1 = o#ctyp _x_i1 in
12107 let _x_i2 = o#class_sig_item _x_i2
12108 in CtSig (_x, _x_i1, _x_i2)
12109 | CtAnd (_x, _x_i1, _x_i2) ->
12110 let _x = o#loc _x in
12111 let _x_i1 = o#class_type _x_i1 in
12112 let _x_i2 = o#class_type _x_i2
12113 in CtAnd (_x, _x_i1, _x_i2)
12114 | CtCol (_x, _x_i1, _x_i2) ->
12115 let _x = o#loc _x in
12116 let _x_i1 = o#class_type _x_i1 in
12117 let _x_i2 = o#class_type _x_i2
12118 in CtCol (_x, _x_i1, _x_i2)
12119 | CtEq (_x, _x_i1, _x_i2) ->
12120 let _x = o#loc _x in
12121 let _x_i1 = o#class_type _x_i1 in
12122 let _x_i2 = o#class_type _x_i2
12123 in CtEq (_x, _x_i1, _x_i2)
12124 | CtAnt (_x, _x_i1) ->
12125 let _x = o#loc _x in
12126 let _x_i1 = o#string _x_i1 in CtAnt (_x, _x_i1)
12128 method class_str_item : class_str_item -> class_str_item =
12130 | CrNil _x -> let _x = o#loc _x in CrNil _x
12131 | CrSem (_x, _x_i1, _x_i2) ->
12132 let _x = o#loc _x in
12133 let _x_i1 = o#class_str_item _x_i1 in
12134 let _x_i2 = o#class_str_item _x_i2
12135 in CrSem (_x, _x_i1, _x_i2)
12136 | CrCtr (_x, _x_i1, _x_i2) ->
12137 let _x = o#loc _x in
12138 let _x_i1 = o#ctyp _x_i1 in
12139 let _x_i2 = o#ctyp _x_i2 in CrCtr (_x, _x_i1, _x_i2)
12140 | CrInh (_x, _x_i1, _x_i2) ->
12141 let _x = o#loc _x in
12142 let _x_i1 = o#class_expr _x_i1 in
12143 let _x_i2 = o#string _x_i2 in CrInh (_x, _x_i1, _x_i2)
12144 | CrIni (_x, _x_i1) ->
12145 let _x = o#loc _x in
12146 let _x_i1 = o#expr _x_i1 in CrIni (_x, _x_i1)
12147 | CrMth (_x, _x_i1, _x_i2, _x_i3, _x_i4) ->
12148 let _x = o#loc _x in
12149 let _x_i1 = o#string _x_i1 in
12150 let _x_i2 = o#meta_bool _x_i2 in
12151 let _x_i3 = o#expr _x_i3 in
12152 let _x_i4 = o#ctyp _x_i4
12153 in CrMth (_x, _x_i1, _x_i2, _x_i3, _x_i4)
12154 | CrVal (_x, _x_i1, _x_i2, _x_i3) ->
12155 let _x = o#loc _x in
12156 let _x_i1 = o#string _x_i1 in
12157 let _x_i2 = o#meta_bool _x_i2 in
12158 let _x_i3 = o#expr _x_i3
12159 in CrVal (_x, _x_i1, _x_i2, _x_i3)
12160 | CrVir (_x, _x_i1, _x_i2, _x_i3) ->
12161 let _x = o#loc _x in
12162 let _x_i1 = o#string _x_i1 in
12163 let _x_i2 = o#meta_bool _x_i2 in
12164 let _x_i3 = o#ctyp _x_i3
12165 in CrVir (_x, _x_i1, _x_i2, _x_i3)
12166 | CrVvr (_x, _x_i1, _x_i2, _x_i3) ->
12167 let _x = o#loc _x in
12168 let _x_i1 = o#string _x_i1 in
12169 let _x_i2 = o#meta_bool _x_i2 in
12170 let _x_i3 = o#ctyp _x_i3
12171 in CrVvr (_x, _x_i1, _x_i2, _x_i3)
12172 | CrAnt (_x, _x_i1) ->
12173 let _x = o#loc _x in
12174 let _x_i1 = o#string _x_i1 in CrAnt (_x, _x_i1)
12176 method class_sig_item : class_sig_item -> class_sig_item =
12178 | CgNil _x -> let _x = o#loc _x in CgNil _x
12179 | CgCtr (_x, _x_i1, _x_i2) ->
12180 let _x = o#loc _x in
12181 let _x_i1 = o#ctyp _x_i1 in
12182 let _x_i2 = o#ctyp _x_i2 in CgCtr (_x, _x_i1, _x_i2)
12183 | CgSem (_x, _x_i1, _x_i2) ->
12184 let _x = o#loc _x in
12185 let _x_i1 = o#class_sig_item _x_i1 in
12186 let _x_i2 = o#class_sig_item _x_i2
12187 in CgSem (_x, _x_i1, _x_i2)
12188 | CgInh (_x, _x_i1) ->
12189 let _x = o#loc _x in
12190 let _x_i1 = o#class_type _x_i1 in CgInh (_x, _x_i1)
12191 | CgMth (_x, _x_i1, _x_i2, _x_i3) ->
12192 let _x = o#loc _x in
12193 let _x_i1 = o#string _x_i1 in
12194 let _x_i2 = o#meta_bool _x_i2 in
12195 let _x_i3 = o#ctyp _x_i3
12196 in CgMth (_x, _x_i1, _x_i2, _x_i3)
12197 | CgVal (_x, _x_i1, _x_i2, _x_i3, _x_i4) ->
12198 let _x = o#loc _x in
12199 let _x_i1 = o#string _x_i1 in
12200 let _x_i2 = o#meta_bool _x_i2 in
12201 let _x_i3 = o#meta_bool _x_i3 in
12202 let _x_i4 = o#ctyp _x_i4
12203 in CgVal (_x, _x_i1, _x_i2, _x_i3, _x_i4)
12204 | CgVir (_x, _x_i1, _x_i2, _x_i3) ->
12205 let _x = o#loc _x in
12206 let _x_i1 = o#string _x_i1 in
12207 let _x_i2 = o#meta_bool _x_i2 in
12208 let _x_i3 = o#ctyp _x_i3
12209 in CgVir (_x, _x_i1, _x_i2, _x_i3)
12210 | CgAnt (_x, _x_i1) ->
12211 let _x = o#loc _x in
12212 let _x_i1 = o#string _x_i1 in CgAnt (_x, _x_i1)
12214 method class_expr : class_expr -> class_expr =
12216 | CeNil _x -> let _x = o#loc _x in CeNil _x
12217 | CeApp (_x, _x_i1, _x_i2) ->
12218 let _x = o#loc _x in
12219 let _x_i1 = o#class_expr _x_i1 in
12220 let _x_i2 = o#expr _x_i2 in CeApp (_x, _x_i1, _x_i2)
12221 | CeCon (_x, _x_i1, _x_i2, _x_i3) ->
12222 let _x = o#loc _x in
12223 let _x_i1 = o#meta_bool _x_i1 in
12224 let _x_i2 = o#ident _x_i2 in
12225 let _x_i3 = o#ctyp _x_i3
12226 in CeCon (_x, _x_i1, _x_i2, _x_i3)
12227 | CeFun (_x, _x_i1, _x_i2) ->
12228 let _x = o#loc _x in
12229 let _x_i1 = o#patt _x_i1 in
12230 let _x_i2 = o#class_expr _x_i2
12231 in CeFun (_x, _x_i1, _x_i2)
12232 | CeLet (_x, _x_i1, _x_i2, _x_i3) ->
12233 let _x = o#loc _x in
12234 let _x_i1 = o#meta_bool _x_i1 in
12235 let _x_i2 = o#binding _x_i2 in
12236 let _x_i3 = o#class_expr _x_i3
12237 in CeLet (_x, _x_i1, _x_i2, _x_i3)
12238 | CeStr (_x, _x_i1, _x_i2) ->
12239 let _x = o#loc _x in
12240 let _x_i1 = o#patt _x_i1 in
12241 let _x_i2 = o#class_str_item _x_i2
12242 in CeStr (_x, _x_i1, _x_i2)
12243 | CeTyc (_x, _x_i1, _x_i2) ->
12244 let _x = o#loc _x in
12245 let _x_i1 = o#class_expr _x_i1 in
12246 let _x_i2 = o#class_type _x_i2
12247 in CeTyc (_x, _x_i1, _x_i2)
12248 | CeAnd (_x, _x_i1, _x_i2) ->
12249 let _x = o#loc _x in
12250 let _x_i1 = o#class_expr _x_i1 in
12251 let _x_i2 = o#class_expr _x_i2
12252 in CeAnd (_x, _x_i1, _x_i2)
12253 | CeEq (_x, _x_i1, _x_i2) ->
12254 let _x = o#loc _x in
12255 let _x_i1 = o#class_expr _x_i1 in
12256 let _x_i2 = o#class_expr _x_i2
12257 in CeEq (_x, _x_i1, _x_i2)
12258 | CeAnt (_x, _x_i1) ->
12259 let _x = o#loc _x in
12260 let _x_i1 = o#string _x_i1 in CeAnt (_x, _x_i1)
12262 method binding : binding -> binding =
12264 | BiNil _x -> let _x = o#loc _x in BiNil _x
12265 | BiAnd (_x, _x_i1, _x_i2) ->
12266 let _x = o#loc _x in
12267 let _x_i1 = o#binding _x_i1 in
12268 let _x_i2 = o#binding _x_i2 in BiAnd (_x, _x_i1, _x_i2)
12269 | BiEq (_x, _x_i1, _x_i2) ->
12270 let _x = o#loc _x in
12271 let _x_i1 = o#patt _x_i1 in
12272 let _x_i2 = o#expr _x_i2 in BiEq (_x, _x_i1, _x_i2)
12273 | BiAnt (_x, _x_i1) ->
12274 let _x = o#loc _x in
12275 let _x_i1 = o#string _x_i1 in BiAnt (_x, _x_i1)
12277 method unknown : 'a. 'a -> 'a = fun x -> x
12282 object ((o : 'self_type))
12283 method string : string -> 'self_type = o#unknown
12287 ('self_type -> 'a -> 'self_type) -> 'a list -> 'self_type =
12292 let o = _f_a o _x in let o = o#list _f_a _x_i1 in o
12294 method with_constr : with_constr -> 'self_type =
12296 | WcNil _x -> let o = o#loc _x in o
12297 | WcTyp (_x, _x_i1, _x_i2) ->
12298 let o = o#loc _x in
12299 let o = o#ctyp _x_i1 in let o = o#ctyp _x_i2 in o
12300 | WcMod (_x, _x_i1, _x_i2) ->
12301 let o = o#loc _x in
12302 let o = o#ident _x_i1 in let o = o#ident _x_i2 in o
12303 | WcAnd (_x, _x_i1, _x_i2) ->
12304 let o = o#loc _x in
12305 let o = o#with_constr _x_i1 in
12306 let o = o#with_constr _x_i2 in o
12307 | WcAnt (_x, _x_i1) ->
12308 let o = o#loc _x in let o = o#string _x_i1 in o
12310 method str_item : str_item -> 'self_type =
12312 | StNil _x -> let o = o#loc _x in o
12313 | StCls (_x, _x_i1) ->
12314 let o = o#loc _x in let o = o#class_expr _x_i1 in o
12315 | StClt (_x, _x_i1) ->
12316 let o = o#loc _x in let o = o#class_type _x_i1 in o
12317 | StSem (_x, _x_i1, _x_i2) ->
12318 let o = o#loc _x in
12319 let o = o#str_item _x_i1 in
12320 let o = o#str_item _x_i2 in o
12321 | StDir (_x, _x_i1, _x_i2) ->
12322 let o = o#loc _x in
12323 let o = o#string _x_i1 in let o = o#expr _x_i2 in o
12324 | StExc (_x, _x_i1, _x_i2) ->
12325 let o = o#loc _x in
12326 let o = o#ctyp _x_i1 in
12327 let o = o#meta_option (fun o -> o#ident) _x_i2 in o
12328 | StExp (_x, _x_i1) ->
12329 let o = o#loc _x in let o = o#expr _x_i1 in o
12330 | StExt (_x, _x_i1, _x_i2, _x_i3) ->
12331 let o = o#loc _x in
12332 let o = o#string _x_i1 in
12333 let o = o#ctyp _x_i2 in
12334 let o = o#meta_list (fun o -> o#string) _x_i3 in o
12335 | StInc (_x, _x_i1) ->
12336 let o = o#loc _x in let o = o#module_expr _x_i1 in o
12337 | StMod (_x, _x_i1, _x_i2) ->
12338 let o = o#loc _x in
12339 let o = o#string _x_i1 in
12340 let o = o#module_expr _x_i2 in o
12341 | StRecMod (_x, _x_i1) ->
12342 let o = o#loc _x in let o = o#module_binding _x_i1 in o
12343 | StMty (_x, _x_i1, _x_i2) ->
12344 let o = o#loc _x in
12345 let o = o#string _x_i1 in
12346 let o = o#module_type _x_i2 in o
12347 | StOpn (_x, _x_i1) ->
12348 let o = o#loc _x in let o = o#ident _x_i1 in o
12349 | StTyp (_x, _x_i1) ->
12350 let o = o#loc _x in let o = o#ctyp _x_i1 in o
12351 | StVal (_x, _x_i1, _x_i2) ->
12352 let o = o#loc _x in
12353 let o = o#meta_bool _x_i1 in
12354 let o = o#binding _x_i2 in o
12355 | StAnt (_x, _x_i1) ->
12356 let o = o#loc _x in let o = o#string _x_i1 in o
12358 method sig_item : sig_item -> 'self_type =
12360 | SgNil _x -> let o = o#loc _x in o
12361 | SgCls (_x, _x_i1) ->
12362 let o = o#loc _x in let o = o#class_type _x_i1 in o
12363 | SgClt (_x, _x_i1) ->
12364 let o = o#loc _x in let o = o#class_type _x_i1 in o
12365 | SgSem (_x, _x_i1, _x_i2) ->
12366 let o = o#loc _x in
12367 let o = o#sig_item _x_i1 in
12368 let o = o#sig_item _x_i2 in o
12369 | SgDir (_x, _x_i1, _x_i2) ->
12370 let o = o#loc _x in
12371 let o = o#string _x_i1 in let o = o#expr _x_i2 in o
12372 | SgExc (_x, _x_i1) ->
12373 let o = o#loc _x in let o = o#ctyp _x_i1 in o
12374 | SgExt (_x, _x_i1, _x_i2, _x_i3) ->
12375 let o = o#loc _x in
12376 let o = o#string _x_i1 in
12377 let o = o#ctyp _x_i2 in
12378 let o = o#meta_list (fun o -> o#string) _x_i3 in o
12379 | SgInc (_x, _x_i1) ->
12380 let o = o#loc _x in let o = o#module_type _x_i1 in o
12381 | SgMod (_x, _x_i1, _x_i2) ->
12382 let o = o#loc _x in
12383 let o = o#string _x_i1 in
12384 let o = o#module_type _x_i2 in o
12385 | SgRecMod (_x, _x_i1) ->
12386 let o = o#loc _x in let o = o#module_binding _x_i1 in o
12387 | SgMty (_x, _x_i1, _x_i2) ->
12388 let o = o#loc _x in
12389 let o = o#string _x_i1 in
12390 let o = o#module_type _x_i2 in o
12391 | SgOpn (_x, _x_i1) ->
12392 let o = o#loc _x in let o = o#ident _x_i1 in o
12393 | SgTyp (_x, _x_i1) ->
12394 let o = o#loc _x in let o = o#ctyp _x_i1 in o
12395 | SgVal (_x, _x_i1, _x_i2) ->
12396 let o = o#loc _x in
12397 let o = o#string _x_i1 in let o = o#ctyp _x_i2 in o
12398 | SgAnt (_x, _x_i1) ->
12399 let o = o#loc _x in let o = o#string _x_i1 in o
12401 method rec_binding : rec_binding -> 'self_type =
12403 | RbNil _x -> let o = o#loc _x in o
12404 | RbSem (_x, _x_i1, _x_i2) ->
12405 let o = o#loc _x in
12406 let o = o#rec_binding _x_i1 in
12407 let o = o#rec_binding _x_i2 in o
12408 | RbEq (_x, _x_i1, _x_i2) ->
12409 let o = o#loc _x in
12410 let o = o#ident _x_i1 in let o = o#expr _x_i2 in o
12411 | RbAnt (_x, _x_i1) ->
12412 let o = o#loc _x in let o = o#string _x_i1 in o
12414 method patt : patt -> 'self_type =
12416 | PaNil _x -> let o = o#loc _x in o
12417 | PaId (_x, _x_i1) ->
12418 let o = o#loc _x in let o = o#ident _x_i1 in o
12419 | PaAli (_x, _x_i1, _x_i2) ->
12420 let o = o#loc _x in
12421 let o = o#patt _x_i1 in let o = o#patt _x_i2 in o
12422 | PaAnt (_x, _x_i1) ->
12423 let o = o#loc _x in let o = o#string _x_i1 in o
12424 | PaAny _x -> let o = o#loc _x in o
12425 | PaApp (_x, _x_i1, _x_i2) ->
12426 let o = o#loc _x in
12427 let o = o#patt _x_i1 in let o = o#patt _x_i2 in o
12428 | PaArr (_x, _x_i1) ->
12429 let o = o#loc _x in let o = o#patt _x_i1 in o
12430 | PaCom (_x, _x_i1, _x_i2) ->
12431 let o = o#loc _x in
12432 let o = o#patt _x_i1 in let o = o#patt _x_i2 in o
12433 | PaSem (_x, _x_i1, _x_i2) ->
12434 let o = o#loc _x in
12435 let o = o#patt _x_i1 in let o = o#patt _x_i2 in o
12436 | PaChr (_x, _x_i1) ->
12437 let o = o#loc _x in let o = o#string _x_i1 in o
12438 | PaInt (_x, _x_i1) ->
12439 let o = o#loc _x in let o = o#string _x_i1 in o
12440 | PaInt32 (_x, _x_i1) ->
12441 let o = o#loc _x in let o = o#string _x_i1 in o
12442 | PaInt64 (_x, _x_i1) ->
12443 let o = o#loc _x in let o = o#string _x_i1 in o
12444 | PaNativeInt (_x, _x_i1) ->
12445 let o = o#loc _x in let o = o#string _x_i1 in o
12446 | PaFlo (_x, _x_i1) ->
12447 let o = o#loc _x in let o = o#string _x_i1 in o
12448 | PaLab (_x, _x_i1, _x_i2) ->
12449 let o = o#loc _x in
12450 let o = o#string _x_i1 in let o = o#patt _x_i2 in o
12451 | PaOlb (_x, _x_i1, _x_i2) ->
12452 let o = o#loc _x in
12453 let o = o#string _x_i1 in let o = o#patt _x_i2 in o
12454 | PaOlbi (_x, _x_i1, _x_i2, _x_i3) ->
12455 let o = o#loc _x in
12456 let o = o#string _x_i1 in
12457 let o = o#patt _x_i2 in let o = o#expr _x_i3 in o
12458 | PaOrp (_x, _x_i1, _x_i2) ->
12459 let o = o#loc _x in
12460 let o = o#patt _x_i1 in let o = o#patt _x_i2 in o
12461 | PaRng (_x, _x_i1, _x_i2) ->
12462 let o = o#loc _x in
12463 let o = o#patt _x_i1 in let o = o#patt _x_i2 in o
12464 | PaRec (_x, _x_i1) ->
12465 let o = o#loc _x in let o = o#patt _x_i1 in o
12466 | PaEq (_x, _x_i1, _x_i2) ->
12467 let o = o#loc _x in
12468 let o = o#ident _x_i1 in let o = o#patt _x_i2 in o
12469 | PaStr (_x, _x_i1) ->
12470 let o = o#loc _x in let o = o#string _x_i1 in o
12471 | PaTup (_x, _x_i1) ->
12472 let o = o#loc _x in let o = o#patt _x_i1 in o
12473 | PaTyc (_x, _x_i1, _x_i2) ->
12474 let o = o#loc _x in
12475 let o = o#patt _x_i1 in let o = o#ctyp _x_i2 in o
12476 | PaTyp (_x, _x_i1) ->
12477 let o = o#loc _x in let o = o#ident _x_i1 in o
12478 | PaVrn (_x, _x_i1) ->
12479 let o = o#loc _x in let o = o#string _x_i1 in o
12480 | PaLaz (_x, _x_i1) ->
12481 let o = o#loc _x in let o = o#patt _x_i1 in o
12483 method module_type : module_type -> 'self_type =
12485 | MtNil _x -> let o = o#loc _x in o
12486 | MtId (_x, _x_i1) ->
12487 let o = o#loc _x in let o = o#ident _x_i1 in o
12488 | MtFun (_x, _x_i1, _x_i2, _x_i3) ->
12489 let o = o#loc _x in
12490 let o = o#string _x_i1 in
12491 let o = o#module_type _x_i2 in
12492 let o = o#module_type _x_i3 in o
12493 | MtQuo (_x, _x_i1) ->
12494 let o = o#loc _x in let o = o#string _x_i1 in o
12495 | MtSig (_x, _x_i1) ->
12496 let o = o#loc _x in let o = o#sig_item _x_i1 in o
12497 | MtWit (_x, _x_i1, _x_i2) ->
12498 let o = o#loc _x in
12499 let o = o#module_type _x_i1 in
12500 let o = o#with_constr _x_i2 in o
12501 | MtAnt (_x, _x_i1) ->
12502 let o = o#loc _x in let o = o#string _x_i1 in o
12504 method module_expr : module_expr -> 'self_type =
12506 | MeNil _x -> let o = o#loc _x in o
12507 | MeId (_x, _x_i1) ->
12508 let o = o#loc _x in let o = o#ident _x_i1 in o
12509 | MeApp (_x, _x_i1, _x_i2) ->
12510 let o = o#loc _x in
12511 let o = o#module_expr _x_i1 in
12512 let o = o#module_expr _x_i2 in o
12513 | MeFun (_x, _x_i1, _x_i2, _x_i3) ->
12514 let o = o#loc _x in
12515 let o = o#string _x_i1 in
12516 let o = o#module_type _x_i2 in
12517 let o = o#module_expr _x_i3 in o
12518 | MeStr (_x, _x_i1) ->
12519 let o = o#loc _x in let o = o#str_item _x_i1 in o
12520 | MeTyc (_x, _x_i1, _x_i2) ->
12521 let o = o#loc _x in
12522 let o = o#module_expr _x_i1 in
12523 let o = o#module_type _x_i2 in o
12524 | MeAnt (_x, _x_i1) ->
12525 let o = o#loc _x in let o = o#string _x_i1 in o
12527 method module_binding : module_binding -> 'self_type =
12529 | MbNil _x -> let o = o#loc _x in o
12530 | MbAnd (_x, _x_i1, _x_i2) ->
12531 let o = o#loc _x in
12532 let o = o#module_binding _x_i1 in
12533 let o = o#module_binding _x_i2 in o
12534 | MbColEq (_x, _x_i1, _x_i2, _x_i3) ->
12535 let o = o#loc _x in
12536 let o = o#string _x_i1 in
12537 let o = o#module_type _x_i2 in
12538 let o = o#module_expr _x_i3 in o
12539 | MbCol (_x, _x_i1, _x_i2) ->
12540 let o = o#loc _x in
12541 let o = o#string _x_i1 in
12542 let o = o#module_type _x_i2 in o
12543 | MbAnt (_x, _x_i1) ->
12544 let o = o#loc _x in let o = o#string _x_i1 in o
12546 method meta_option :
12548 ('self_type -> 'a -> 'self_type) ->
12549 'a meta_option -> 'self_type =
12553 | OSome _x -> let o = _f_a o _x in o
12554 | OAnt _x -> let o = o#string _x in o
12558 ('self_type -> 'a -> 'self_type) ->
12559 'a meta_list -> 'self_type =
12563 | LCons (_x, _x_i1) ->
12564 let o = _f_a o _x in
12565 let o = o#meta_list _f_a _x_i1 in o
12566 | LAnt _x -> let o = o#string _x in o
12568 method meta_bool : meta_bool -> 'self_type =
12572 | BAnt _x -> let o = o#string _x in o
12574 method match_case : match_case -> 'self_type =
12576 | McNil _x -> let o = o#loc _x in o
12577 | McOr (_x, _x_i1, _x_i2) ->
12578 let o = o#loc _x in
12579 let o = o#match_case _x_i1 in
12580 let o = o#match_case _x_i2 in o
12581 | McArr (_x, _x_i1, _x_i2, _x_i3) ->
12582 let o = o#loc _x in
12583 let o = o#patt _x_i1 in
12584 let o = o#expr _x_i2 in let o = o#expr _x_i3 in o
12585 | McAnt (_x, _x_i1) ->
12586 let o = o#loc _x in let o = o#string _x_i1 in o
12588 method loc : loc -> 'self_type = o#unknown
12590 method ident : ident -> 'self_type =
12592 | IdAcc (_x, _x_i1, _x_i2) ->
12593 let o = o#loc _x in
12594 let o = o#ident _x_i1 in let o = o#ident _x_i2 in o
12595 | IdApp (_x, _x_i1, _x_i2) ->
12596 let o = o#loc _x in
12597 let o = o#ident _x_i1 in let o = o#ident _x_i2 in o
12598 | IdLid (_x, _x_i1) ->
12599 let o = o#loc _x in let o = o#string _x_i1 in o
12600 | IdUid (_x, _x_i1) ->
12601 let o = o#loc _x in let o = o#string _x_i1 in o
12602 | IdAnt (_x, _x_i1) ->
12603 let o = o#loc _x in let o = o#string _x_i1 in o
12605 method expr : expr -> 'self_type =
12607 | ExNil _x -> let o = o#loc _x in o
12608 | ExId (_x, _x_i1) ->
12609 let o = o#loc _x in let o = o#ident _x_i1 in o
12610 | ExAcc (_x, _x_i1, _x_i2) ->
12611 let o = o#loc _x in
12612 let o = o#expr _x_i1 in let o = o#expr _x_i2 in o
12613 | ExAnt (_x, _x_i1) ->
12614 let o = o#loc _x in let o = o#string _x_i1 in o
12615 | ExApp (_x, _x_i1, _x_i2) ->
12616 let o = o#loc _x in
12617 let o = o#expr _x_i1 in let o = o#expr _x_i2 in o
12618 | ExAre (_x, _x_i1, _x_i2) ->
12619 let o = o#loc _x in
12620 let o = o#expr _x_i1 in let o = o#expr _x_i2 in o
12621 | ExArr (_x, _x_i1) ->
12622 let o = o#loc _x in let o = o#expr _x_i1 in o
12623 | ExSem (_x, _x_i1, _x_i2) ->
12624 let o = o#loc _x in
12625 let o = o#expr _x_i1 in let o = o#expr _x_i2 in o
12626 | ExAsf _x -> let o = o#loc _x in o
12627 | ExAsr (_x, _x_i1) ->
12628 let o = o#loc _x in let o = o#expr _x_i1 in o
12629 | ExAss (_x, _x_i1, _x_i2) ->
12630 let o = o#loc _x in
12631 let o = o#expr _x_i1 in let o = o#expr _x_i2 in o
12632 | ExChr (_x, _x_i1) ->
12633 let o = o#loc _x in let o = o#string _x_i1 in o
12634 | ExCoe (_x, _x_i1, _x_i2, _x_i3) ->
12635 let o = o#loc _x in
12636 let o = o#expr _x_i1 in
12637 let o = o#ctyp _x_i2 in let o = o#ctyp _x_i3 in o
12638 | ExFlo (_x, _x_i1) ->
12639 let o = o#loc _x in let o = o#string _x_i1 in o
12640 | ExFor (_x, _x_i1, _x_i2, _x_i3, _x_i4, _x_i5) ->
12641 let o = o#loc _x in
12642 let o = o#string _x_i1 in
12643 let o = o#expr _x_i2 in
12644 let o = o#expr _x_i3 in
12645 let o = o#meta_bool _x_i4 in let o = o#expr _x_i5 in o
12646 | ExFun (_x, _x_i1) ->
12647 let o = o#loc _x in let o = o#match_case _x_i1 in o
12648 | ExIfe (_x, _x_i1, _x_i2, _x_i3) ->
12649 let o = o#loc _x in
12650 let o = o#expr _x_i1 in
12651 let o = o#expr _x_i2 in let o = o#expr _x_i3 in o
12652 | ExInt (_x, _x_i1) ->
12653 let o = o#loc _x in let o = o#string _x_i1 in o
12654 | ExInt32 (_x, _x_i1) ->
12655 let o = o#loc _x in let o = o#string _x_i1 in o
12656 | ExInt64 (_x, _x_i1) ->
12657 let o = o#loc _x in let o = o#string _x_i1 in o
12658 | ExNativeInt (_x, _x_i1) ->
12659 let o = o#loc _x in let o = o#string _x_i1 in o
12660 | ExLab (_x, _x_i1, _x_i2) ->
12661 let o = o#loc _x in
12662 let o = o#string _x_i1 in let o = o#expr _x_i2 in o
12663 | ExLaz (_x, _x_i1) ->
12664 let o = o#loc _x in let o = o#expr _x_i1 in o
12665 | ExLet (_x, _x_i1, _x_i2, _x_i3) ->
12666 let o = o#loc _x in
12667 let o = o#meta_bool _x_i1 in
12668 let o = o#binding _x_i2 in let o = o#expr _x_i3 in o
12669 | ExLmd (_x, _x_i1, _x_i2, _x_i3) ->
12670 let o = o#loc _x in
12671 let o = o#string _x_i1 in
12672 let o = o#module_expr _x_i2 in
12673 let o = o#expr _x_i3 in o
12674 | ExMat (_x, _x_i1, _x_i2) ->
12675 let o = o#loc _x in
12676 let o = o#expr _x_i1 in let o = o#match_case _x_i2 in o
12677 | ExNew (_x, _x_i1) ->
12678 let o = o#loc _x in let o = o#ident _x_i1 in o
12679 | ExObj (_x, _x_i1, _x_i2) ->
12680 let o = o#loc _x in
12681 let o = o#patt _x_i1 in
12682 let o = o#class_str_item _x_i2 in o
12683 | ExOlb (_x, _x_i1, _x_i2) ->
12684 let o = o#loc _x in
12685 let o = o#string _x_i1 in let o = o#expr _x_i2 in o
12686 | ExOvr (_x, _x_i1) ->
12687 let o = o#loc _x in let o = o#rec_binding _x_i1 in o
12688 | ExRec (_x, _x_i1, _x_i2) ->
12689 let o = o#loc _x in
12690 let o = o#rec_binding _x_i1 in
12691 let o = o#expr _x_i2 in o
12692 | ExSeq (_x, _x_i1) ->
12693 let o = o#loc _x in let o = o#expr _x_i1 in o
12694 | ExSnd (_x, _x_i1, _x_i2) ->
12695 let o = o#loc _x in
12696 let o = o#expr _x_i1 in let o = o#string _x_i2 in o
12697 | ExSte (_x, _x_i1, _x_i2) ->
12698 let o = o#loc _x in
12699 let o = o#expr _x_i1 in let o = o#expr _x_i2 in o
12700 | ExStr (_x, _x_i1) ->
12701 let o = o#loc _x in let o = o#string _x_i1 in o
12702 | ExTry (_x, _x_i1, _x_i2) ->
12703 let o = o#loc _x in
12704 let o = o#expr _x_i1 in let o = o#match_case _x_i2 in o
12705 | ExTup (_x, _x_i1) ->
12706 let o = o#loc _x in let o = o#expr _x_i1 in o
12707 | ExCom (_x, _x_i1, _x_i2) ->
12708 let o = o#loc _x in
12709 let o = o#expr _x_i1 in let o = o#expr _x_i2 in o
12710 | ExTyc (_x, _x_i1, _x_i2) ->
12711 let o = o#loc _x in
12712 let o = o#expr _x_i1 in let o = o#ctyp _x_i2 in o
12713 | ExVrn (_x, _x_i1) ->
12714 let o = o#loc _x in let o = o#string _x_i1 in o
12715 | ExWhi (_x, _x_i1, _x_i2) ->
12716 let o = o#loc _x in
12717 let o = o#expr _x_i1 in let o = o#expr _x_i2 in o
12719 method ctyp : ctyp -> 'self_type =
12721 | TyNil _x -> let o = o#loc _x in o
12722 | TyAli (_x, _x_i1, _x_i2) ->
12723 let o = o#loc _x in
12724 let o = o#ctyp _x_i1 in let o = o#ctyp _x_i2 in o
12725 | TyAny _x -> let o = o#loc _x in o
12726 | TyApp (_x, _x_i1, _x_i2) ->
12727 let o = o#loc _x in
12728 let o = o#ctyp _x_i1 in let o = o#ctyp _x_i2 in o
12729 | TyArr (_x, _x_i1, _x_i2) ->
12730 let o = o#loc _x in
12731 let o = o#ctyp _x_i1 in let o = o#ctyp _x_i2 in o
12732 | TyCls (_x, _x_i1) ->
12733 let o = o#loc _x in let o = o#ident _x_i1 in o
12734 | TyLab (_x, _x_i1, _x_i2) ->
12735 let o = o#loc _x in
12736 let o = o#string _x_i1 in let o = o#ctyp _x_i2 in o
12737 | TyId (_x, _x_i1) ->
12738 let o = o#loc _x in let o = o#ident _x_i1 in o
12739 | TyMan (_x, _x_i1, _x_i2) ->
12740 let o = o#loc _x in
12741 let o = o#ctyp _x_i1 in let o = o#ctyp _x_i2 in o
12742 | TyDcl (_x, _x_i1, _x_i2, _x_i3, _x_i4) ->
12743 let o = o#loc _x in
12744 let o = o#string _x_i1 in
12745 let o = o#list (fun o -> o#ctyp) _x_i2 in
12746 let o = o#ctyp _x_i3 in
12749 (fun o (_x, _x_i1) ->
12750 let o = o#ctyp _x in let o = o#ctyp _x_i1 in o)
12753 | TyObj (_x, _x_i1, _x_i2) ->
12754 let o = o#loc _x in
12755 let o = o#ctyp _x_i1 in let o = o#meta_bool _x_i2 in o
12756 | TyOlb (_x, _x_i1, _x_i2) ->
12757 let o = o#loc _x in
12758 let o = o#string _x_i1 in let o = o#ctyp _x_i2 in o
12759 | TyPol (_x, _x_i1, _x_i2) ->
12760 let o = o#loc _x in
12761 let o = o#ctyp _x_i1 in let o = o#ctyp _x_i2 in o
12762 | TyQuo (_x, _x_i1) ->
12763 let o = o#loc _x in let o = o#string _x_i1 in o
12764 | TyQuP (_x, _x_i1) ->
12765 let o = o#loc _x in let o = o#string _x_i1 in o
12766 | TyQuM (_x, _x_i1) ->
12767 let o = o#loc _x in let o = o#string _x_i1 in o
12768 | TyVrn (_x, _x_i1) ->
12769 let o = o#loc _x in let o = o#string _x_i1 in o
12770 | TyRec (_x, _x_i1) ->
12771 let o = o#loc _x in let o = o#ctyp _x_i1 in o
12772 | TyCol (_x, _x_i1, _x_i2) ->
12773 let o = o#loc _x in
12774 let o = o#ctyp _x_i1 in let o = o#ctyp _x_i2 in o
12775 | TySem (_x, _x_i1, _x_i2) ->
12776 let o = o#loc _x in
12777 let o = o#ctyp _x_i1 in let o = o#ctyp _x_i2 in o
12778 | TyCom (_x, _x_i1, _x_i2) ->
12779 let o = o#loc _x in
12780 let o = o#ctyp _x_i1 in let o = o#ctyp _x_i2 in o
12781 | TySum (_x, _x_i1) ->
12782 let o = o#loc _x in let o = o#ctyp _x_i1 in o
12783 | TyOf (_x, _x_i1, _x_i2) ->
12784 let o = o#loc _x in
12785 let o = o#ctyp _x_i1 in let o = o#ctyp _x_i2 in o
12786 | TyAnd (_x, _x_i1, _x_i2) ->
12787 let o = o#loc _x in
12788 let o = o#ctyp _x_i1 in let o = o#ctyp _x_i2 in o
12789 | TyOr (_x, _x_i1, _x_i2) ->
12790 let o = o#loc _x in
12791 let o = o#ctyp _x_i1 in let o = o#ctyp _x_i2 in o
12792 | TyPrv (_x, _x_i1) ->
12793 let o = o#loc _x in let o = o#ctyp _x_i1 in o
12794 | TyMut (_x, _x_i1) ->
12795 let o = o#loc _x in let o = o#ctyp _x_i1 in o
12796 | TyTup (_x, _x_i1) ->
12797 let o = o#loc _x in let o = o#ctyp _x_i1 in o
12798 | TySta (_x, _x_i1, _x_i2) ->
12799 let o = o#loc _x in
12800 let o = o#ctyp _x_i1 in let o = o#ctyp _x_i2 in o
12801 | TyVrnEq (_x, _x_i1) ->
12802 let o = o#loc _x in let o = o#ctyp _x_i1 in o
12803 | TyVrnSup (_x, _x_i1) ->
12804 let o = o#loc _x in let o = o#ctyp _x_i1 in o
12805 | TyVrnInf (_x, _x_i1) ->
12806 let o = o#loc _x in let o = o#ctyp _x_i1 in o
12807 | TyVrnInfSup (_x, _x_i1, _x_i2) ->
12808 let o = o#loc _x in
12809 let o = o#ctyp _x_i1 in let o = o#ctyp _x_i2 in o
12810 | TyAmp (_x, _x_i1, _x_i2) ->
12811 let o = o#loc _x in
12812 let o = o#ctyp _x_i1 in let o = o#ctyp _x_i2 in o
12813 | TyOfAmp (_x, _x_i1, _x_i2) ->
12814 let o = o#loc _x in
12815 let o = o#ctyp _x_i1 in let o = o#ctyp _x_i2 in o
12816 | TyAnt (_x, _x_i1) ->
12817 let o = o#loc _x in let o = o#string _x_i1 in o
12819 method class_type : class_type -> 'self_type =
12821 | CtNil _x -> let o = o#loc _x in o
12822 | CtCon (_x, _x_i1, _x_i2, _x_i3) ->
12823 let o = o#loc _x in
12824 let o = o#meta_bool _x_i1 in
12825 let o = o#ident _x_i2 in let o = o#ctyp _x_i3 in o
12826 | CtFun (_x, _x_i1, _x_i2) ->
12827 let o = o#loc _x in
12828 let o = o#ctyp _x_i1 in let o = o#class_type _x_i2 in o
12829 | CtSig (_x, _x_i1, _x_i2) ->
12830 let o = o#loc _x in
12831 let o = o#ctyp _x_i1 in
12832 let o = o#class_sig_item _x_i2 in o
12833 | CtAnd (_x, _x_i1, _x_i2) ->
12834 let o = o#loc _x in
12835 let o = o#class_type _x_i1 in
12836 let o = o#class_type _x_i2 in o
12837 | CtCol (_x, _x_i1, _x_i2) ->
12838 let o = o#loc _x in
12839 let o = o#class_type _x_i1 in
12840 let o = o#class_type _x_i2 in o
12841 | CtEq (_x, _x_i1, _x_i2) ->
12842 let o = o#loc _x in
12843 let o = o#class_type _x_i1 in
12844 let o = o#class_type _x_i2 in o
12845 | CtAnt (_x, _x_i1) ->
12846 let o = o#loc _x in let o = o#string _x_i1 in o
12848 method class_str_item : class_str_item -> 'self_type =
12850 | CrNil _x -> let o = o#loc _x in o
12851 | CrSem (_x, _x_i1, _x_i2) ->
12852 let o = o#loc _x in
12853 let o = o#class_str_item _x_i1 in
12854 let o = o#class_str_item _x_i2 in o
12855 | CrCtr (_x, _x_i1, _x_i2) ->
12856 let o = o#loc _x in
12857 let o = o#ctyp _x_i1 in let o = o#ctyp _x_i2 in o
12858 | CrInh (_x, _x_i1, _x_i2) ->
12859 let o = o#loc _x in
12860 let o = o#class_expr _x_i1 in
12861 let o = o#string _x_i2 in o
12862 | CrIni (_x, _x_i1) ->
12863 let o = o#loc _x in let o = o#expr _x_i1 in o
12864 | CrMth (_x, _x_i1, _x_i2, _x_i3, _x_i4) ->
12865 let o = o#loc _x in
12866 let o = o#string _x_i1 in
12867 let o = o#meta_bool _x_i2 in
12868 let o = o#expr _x_i3 in let o = o#ctyp _x_i4 in o
12869 | CrVal (_x, _x_i1, _x_i2, _x_i3) ->
12870 let o = o#loc _x in
12871 let o = o#string _x_i1 in
12872 let o = o#meta_bool _x_i2 in let o = o#expr _x_i3 in o
12873 | CrVir (_x, _x_i1, _x_i2, _x_i3) ->
12874 let o = o#loc _x in
12875 let o = o#string _x_i1 in
12876 let o = o#meta_bool _x_i2 in let o = o#ctyp _x_i3 in o
12877 | CrVvr (_x, _x_i1, _x_i2, _x_i3) ->
12878 let o = o#loc _x in
12879 let o = o#string _x_i1 in
12880 let o = o#meta_bool _x_i2 in let o = o#ctyp _x_i3 in o
12881 | CrAnt (_x, _x_i1) ->
12882 let o = o#loc _x in let o = o#string _x_i1 in o
12884 method class_sig_item : class_sig_item -> 'self_type =
12886 | CgNil _x -> let o = o#loc _x in o
12887 | CgCtr (_x, _x_i1, _x_i2) ->
12888 let o = o#loc _x in
12889 let o = o#ctyp _x_i1 in let o = o#ctyp _x_i2 in o
12890 | CgSem (_x, _x_i1, _x_i2) ->
12891 let o = o#loc _x in
12892 let o = o#class_sig_item _x_i1 in
12893 let o = o#class_sig_item _x_i2 in o
12894 | CgInh (_x, _x_i1) ->
12895 let o = o#loc _x in let o = o#class_type _x_i1 in o
12896 | CgMth (_x, _x_i1, _x_i2, _x_i3) ->
12897 let o = o#loc _x in
12898 let o = o#string _x_i1 in
12899 let o = o#meta_bool _x_i2 in let o = o#ctyp _x_i3 in o
12900 | CgVal (_x, _x_i1, _x_i2, _x_i3, _x_i4) ->
12901 let o = o#loc _x in
12902 let o = o#string _x_i1 in
12903 let o = o#meta_bool _x_i2 in
12904 let o = o#meta_bool _x_i3 in let o = o#ctyp _x_i4 in o
12905 | CgVir (_x, _x_i1, _x_i2, _x_i3) ->
12906 let o = o#loc _x in
12907 let o = o#string _x_i1 in
12908 let o = o#meta_bool _x_i2 in let o = o#ctyp _x_i3 in o
12909 | CgAnt (_x, _x_i1) ->
12910 let o = o#loc _x in let o = o#string _x_i1 in o
12912 method class_expr : class_expr -> 'self_type =
12914 | CeNil _x -> let o = o#loc _x in o
12915 | CeApp (_x, _x_i1, _x_i2) ->
12916 let o = o#loc _x in
12917 let o = o#class_expr _x_i1 in let o = o#expr _x_i2 in o
12918 | CeCon (_x, _x_i1, _x_i2, _x_i3) ->
12919 let o = o#loc _x in
12920 let o = o#meta_bool _x_i1 in
12921 let o = o#ident _x_i2 in let o = o#ctyp _x_i3 in o
12922 | CeFun (_x, _x_i1, _x_i2) ->
12923 let o = o#loc _x in
12924 let o = o#patt _x_i1 in let o = o#class_expr _x_i2 in o
12925 | CeLet (_x, _x_i1, _x_i2, _x_i3) ->
12926 let o = o#loc _x in
12927 let o = o#meta_bool _x_i1 in
12928 let o = o#binding _x_i2 in
12929 let o = o#class_expr _x_i3 in o
12930 | CeStr (_x, _x_i1, _x_i2) ->
12931 let o = o#loc _x in
12932 let o = o#patt _x_i1 in
12933 let o = o#class_str_item _x_i2 in o
12934 | CeTyc (_x, _x_i1, _x_i2) ->
12935 let o = o#loc _x in
12936 let o = o#class_expr _x_i1 in
12937 let o = o#class_type _x_i2 in o
12938 | CeAnd (_x, _x_i1, _x_i2) ->
12939 let o = o#loc _x in
12940 let o = o#class_expr _x_i1 in
12941 let o = o#class_expr _x_i2 in o
12942 | CeEq (_x, _x_i1, _x_i2) ->
12943 let o = o#loc _x in
12944 let o = o#class_expr _x_i1 in
12945 let o = o#class_expr _x_i2 in o
12946 | CeAnt (_x, _x_i1) ->
12947 let o = o#loc _x in let o = o#string _x_i1 in o
12949 method binding : binding -> 'self_type =
12951 | BiNil _x -> let o = o#loc _x in o
12952 | BiAnd (_x, _x_i1, _x_i2) ->
12953 let o = o#loc _x in
12954 let o = o#binding _x_i1 in let o = o#binding _x_i2 in o
12955 | BiEq (_x, _x_i1, _x_i2) ->
12956 let o = o#loc _x in
12957 let o = o#patt _x_i1 in let o = o#expr _x_i2 in o
12958 | BiAnt (_x, _x_i1) ->
12959 let o = o#loc _x in let o = o#string _x_i1 in o
12961 method unknown : 'a. 'a -> 'self_type = fun _ -> o
12967 inherit map as super
12969 method expr = fun x -> f (super#expr x)
12975 inherit map as super
12977 method patt = fun x -> f (super#patt x)
12983 inherit map as super
12985 method ctyp = fun x -> f (super#ctyp x)
12989 let map_str_item f =
12991 inherit map as super
12993 method str_item = fun x -> f (super#str_item x)
12997 let map_sig_item f =
12999 inherit map as super
13001 method sig_item = fun x -> f (super#sig_item x)
13007 inherit map as super
13009 method loc = fun x -> f (super#loc x)
13019 module Make (Ast : Sig.Ast) : Sig.DynAst with module Ast = Ast =
13033 | Tag_class_sig_item
13035 | Tag_class_str_item
13040 | Tag_module_binding
13042 let string_of_tag =
13044 | Tag_ctyp -> "ctyp"
13045 | Tag_patt -> "patt"
13046 | Tag_expr -> "expr"
13047 | Tag_module_type -> "module_type"
13048 | Tag_sig_item -> "sig_item"
13049 | Tag_with_constr -> "with_constr"
13050 | Tag_module_expr -> "module_expr"
13051 | Tag_str_item -> "str_item"
13052 | Tag_class_type -> "class_type"
13053 | Tag_class_sig_item -> "class_sig_item"
13054 | Tag_class_expr -> "class_expr"
13055 | Tag_class_str_item -> "class_str_item"
13056 | Tag_match_case -> "match_case"
13057 | Tag_ident -> "ident"
13058 | Tag_binding -> "binding"
13059 | Tag_rec_binding -> "rec_binding"
13060 | Tag_module_binding -> "module_binding"
13062 let ctyp_tag = Tag_ctyp
13064 let patt_tag = Tag_patt
13066 let expr_tag = Tag_expr
13068 let module_type_tag = Tag_module_type
13070 let sig_item_tag = Tag_sig_item
13072 let with_constr_tag = Tag_with_constr
13074 let module_expr_tag = Tag_module_expr
13076 let str_item_tag = Tag_str_item
13078 let class_type_tag = Tag_class_type
13080 let class_sig_item_tag = Tag_class_sig_item
13082 let class_expr_tag = Tag_class_expr
13084 let class_str_item_tag = Tag_class_str_item
13086 let match_case_tag = Tag_match_case
13088 let ident_tag = Tag_ident
13090 let binding_tag = Tag_binding
13092 let rec_binding_tag = Tag_rec_binding
13094 let module_binding_tag = Tag_module_binding
13098 external dyn_tag : 'a tag -> dyn tag = "%identity"
13100 module Pack (X : sig type 'a t
13103 type pack = ((dyn tag) * Obj.t)
13105 exception Pack_error
13107 let pack tag v = ((dyn_tag tag), (Obj.repr v))
13109 let unpack (tag : 'a tag) (tag', obj) =
13110 if (dyn_tag tag) = tag'
13111 then (Obj.obj obj : 'a X.t)
13112 else raise Pack_error
13114 let print_tag f (tag, _) =
13115 Format.pp_print_string f (string_of_tag tag)
13125 module Make (Ast : Sig.Camlp4Ast) :
13126 Sig.Quotation with module Ast = Ast =
13130 module DynAst = DynAst.Make(Ast)
13132 module Loc = Ast.Loc
13138 type 'a expand_fun = Loc.t -> string option -> string -> 'a
13140 module Exp_key = DynAst.Pack(struct type 'a t = unit
13144 DynAst.Pack(struct type 'a t = 'a expand_fun
13147 let expanders_table :
13148 (((string * Exp_key.pack) * Exp_fun.pack) list) ref = ref []
13150 let default = ref ""
13152 let translate = ref (fun x -> x)
13154 let expander_name name =
13155 match !translate name with | "" -> !default | name -> name
13157 let find name tag =
13158 let key = ((expander_name name), (Exp_key.pack tag ()))
13159 in Exp_fun.unpack tag (List.assoc key !expanders_table)
13161 let add name tag f =
13162 let elt = ((name, (Exp_key.pack tag ())), (Exp_fun.pack tag f))
13163 in expanders_table := elt :: !expanders_table
13165 let dump_file = ref None
13172 | ParsingResult of Loc.t * string
13175 type t = (string * string * error * exn)
13179 let print ppf (name, position, ctx, exn) =
13180 let name = if name = "" then !default else name in
13182 fprintf ppf "@?@[<2>While %s %S in a position of %S:" x
13187 (pp "finding quotation";
13188 if !expanders_table = []
13191 "@ There is no quotation expander available."
13194 "@ @[<hv2>Available quotation expanders are:@\n";
13196 (fun ((s, t), _) ->
13198 "@[<2>%s@ (in@ a@ position@ of %a)@]@ " s
13199 Exp_key.print_tag t)
13202 | Expanding -> pp "expanding quotation"
13203 | Locating -> pp "parsing"
13204 | ParsingResult (loc, str) ->
13205 let () = pp "parsing result of quotation"
13207 (match !dump_file with
13208 | Some dump_file ->
13209 let () = fprintf ppf " dumping result...\n"
13212 let oc = open_out_bin dump_file
13214 (output_string oc str;
13215 output_string oc "\n";
13218 fprintf ppf "%a:" Loc.print
13219 (Loc.set_file_name dump_file loc))
13223 "Error while dumping result in file %S; dump aborted"
13227 "\n(consider setting variable Quotation.dump_file, or using the -QD option)")
13228 in fprintf ppf "@\n%a@]@." ErrorHandler.print exn
13231 let b = Buffer.create 50 in
13232 let () = bprintf b "%a" print x in Buffer.contents b
13236 let _ = let module M = ErrorHandler.Register(Error) in ()
13240 let expand_quotation loc expander pos_tag quot =
13242 if quot.q_loc = "" then None else Some quot.q_loc
13244 try expander loc loc_name_opt quot.q_contents
13245 with | (Loc.Exc_located (_, (Error.E _)) as exc) -> raise exc
13246 | Loc.Exc_located (iloc, exc) ->
13248 Error.E (((quot.q_name), pos_tag, Expanding, exc))
13249 in raise (Loc.Exc_located (iloc, exc1))
13252 Error.E (((quot.q_name), pos_tag, Expanding, exc))
13253 in raise (Loc.Exc_located (loc, exc1))
13255 let parse_quotation_result parse loc quot pos_tag str =
13258 | Loc.Exc_located (iloc,
13259 (Error.E ((n, pos_tag, Expanding, exc)))) ->
13260 let ctx = ParsingResult (iloc, quot.q_contents) in
13261 let exc1 = Error.E ((n, pos_tag, ctx, exc))
13262 in raise (Loc.Exc_located (iloc, exc1))
13263 | Loc.Exc_located (iloc, ((Error.E _ as exc))) ->
13264 raise (Loc.Exc_located (iloc, exc))
13265 | Loc.Exc_located (iloc, exc) ->
13266 let ctx = ParsingResult (iloc, quot.q_contents) in
13267 let exc1 = Error.E (((quot.q_name), pos_tag, ctx, exc))
13268 in raise (Loc.Exc_located (iloc, exc1))
13270 let expand loc quotation tag =
13271 let pos_tag = DynAst.string_of_tag tag in
13272 let name = quotation.q_name in
13275 with | (Loc.Exc_located (_, (Error.E _)) as exc) -> raise exc
13276 | Loc.Exc_located (qloc, exc) ->
13278 (Loc.Exc_located (qloc,
13279 Error.E ((name, pos_tag, Finding, exc))))
13282 (Loc.Exc_located (loc,
13283 Error.E ((name, pos_tag, Finding, exc)))) in
13284 let loc = Loc.join (Loc.move `start quotation.q_shift loc)
13285 in expand_quotation loc expander pos_tag quotation
13291 module AstFilters =
13293 module Make (Ast : Sig.Camlp4Ast) :
13294 Sig.AstFilters with module Ast = Ast =
13298 type 'a filter = 'a -> 'a
13300 let interf_filters = Queue.create ()
13302 let fold_interf_filters f i = Queue.fold f i interf_filters
13304 let implem_filters = Queue.create ()
13306 let fold_implem_filters f i = Queue.fold f i implem_filters
13308 let topphrase_filters = Queue.create ()
13310 let fold_topphrase_filters f i = Queue.fold f i topphrase_filters
13312 let register_sig_item_filter f = Queue.add f interf_filters
13314 let register_str_item_filter f = Queue.add f implem_filters
13316 let register_topphrase_filter f = Queue.add f topphrase_filters
13322 module Camlp4Ast2OCamlAst :
13324 module Make (Camlp4Ast : Sig.Camlp4Ast) :
13328 val sig_item : sig_item -> Camlp4_import.Parsetree.signature
13330 val str_item : str_item -> Camlp4_import.Parsetree.structure
13332 val phrase : str_item -> Camlp4_import.Parsetree.toplevel_phrase
13338 module Make (Ast : Sig.Camlp4Ast) =
13342 open Camlp4_import.Parsetree
13344 open Camlp4_import.Longident
13346 open Camlp4_import.Asttypes
13350 let constructors_arity () = !Camlp4_config.constructors_arity
13352 let error loc str = Loc.raise loc (Failure str)
13354 let char_of_char_token loc s =
13355 try Token.Eval.char s
13356 with | (Failure _ as exn) -> Loc.raise loc exn
13358 let string_of_string_token loc s =
13359 try Token.Eval.string s
13360 with | (Failure _ as exn) -> Loc.raise loc exn
13362 let remove_underscores s =
13363 let l = String.length s in
13364 let rec remove src dst =
13366 then if dst >= l then s else String.sub s 0 dst
13368 (match s.[src] with
13369 | '_' -> remove (src + 1) dst
13370 | c -> (s.[dst] <- c; remove (src + 1) (dst + 1)))
13373 let mkloc = Loc.to_ocaml_location
13375 let mkghloc loc = Loc.to_ocaml_location (Loc.ghostify loc)
13377 let mktyp loc d = { ptyp_desc = d; ptyp_loc = mkloc loc; }
13379 let mkpat loc d = { ppat_desc = d; ppat_loc = mkloc loc; }
13381 let mkghpat loc d = { ppat_desc = d; ppat_loc = mkghloc loc; }
13383 let mkexp loc d = { pexp_desc = d; pexp_loc = mkloc loc; }
13385 let mkmty loc d = { pmty_desc = d; pmty_loc = mkloc loc; }
13387 let mksig loc d = { psig_desc = d; psig_loc = mkloc loc; }
13389 let mkmod loc d = { pmod_desc = d; pmod_loc = mkloc loc; }
13391 let mkstr loc d = { pstr_desc = d; pstr_loc = mkloc loc; }
13393 let mkfield loc d = { pfield_desc = d; pfield_loc = mkloc loc; }
13395 let mkcty loc d = { pcty_desc = d; pcty_loc = mkloc loc; }
13397 let mkpcl loc d = { pcl_desc = d; pcl_loc = mkloc loc; }
13400 match t.ptyp_desc with
13401 | Ptyp_poly (_, _) -> t
13402 | _ -> { (t) with ptyp_desc = Ptyp_poly ([], t); }
13406 | Ast.BTrue -> true
13407 | Ast.BFalse -> false
13408 | Ast.BAnt _ -> assert false
13410 let mkvirtual m = if mb2b m then Virtual else Concrete
13412 let lident s = Lident s
13414 let ldot l s = Ldot (l, s)
13416 let lapply l s = Lapply (l, s)
13419 let t = Hashtbl.create 73
13421 (List.iter (fun (s, s') -> Hashtbl.add t s s')
13422 [ ("True", "true"); ("False", "false"); (" True", "True");
13423 (" False", "False") ];
13424 fun s -> try Hashtbl.find t s with | Not_found -> s)
13427 let t = Hashtbl.create 73
13429 (List.iter (fun (s, s') -> Hashtbl.add t s s')
13430 [ ("val", "contents") ];
13431 fun s -> try Hashtbl.find t s with | Not_found -> s)
13433 let array_function str name =
13435 (if !Camlp4_config.unsafe then "unsafe_" ^ name else name)
13439 | Ast.BTrue -> Recursive
13440 | Ast.BFalse -> Nonrecursive
13441 | Ast.BAnt _ -> assert false
13445 function | i :: il -> loop (ldot (f i)) il | [] -> f s
13448 let rec ctyp_fa al =
13450 | TyApp (_, f, a) -> ctyp_fa (a :: al) f
13453 let ident_tag ?(conv_lid = fun x -> x) i =
13454 let rec self i acc =
13456 | Ast.IdAcc (_, i1, i2) -> self i2 (Some (self i1 acc))
13457 | Ast.IdApp (_, i1, i2) ->
13459 Lapply (fst (self i1 None), fst (self i2 None)) in
13464 error (loc_of_ident i) "invalid long identifier")
13466 | Ast.IdUid (_, s) ->
13470 | Some ((acc, (`uident | `app))) -> ldot acc s
13472 error (loc_of_ident i) "invalid long identifier")
13474 | Ast.IdLid (_, s) ->
13477 | None -> lident (conv_lid s)
13478 | Some ((acc, (`uident | `app))) ->
13479 ldot acc (conv_lid s)
13481 error (loc_of_ident i) "invalid long identifier")
13483 | _ -> error (loc_of_ident i) "invalid long identifier"
13486 let ident ?conv_lid i = fst (ident_tag ?conv_lid i)
13488 let long_lident msg i =
13489 match ident_tag i with
13490 | (i, `lident) -> i
13491 | _ -> error (loc_of_ident i) msg
13493 let long_type_ident = long_lident "invalid long identifier type"
13495 let long_class_ident = long_lident "invalid class name"
13497 let long_uident ?(conv_con = fun x -> x) i =
13498 match ident_tag i with
13499 | (Ldot (i, s), `uident) -> ldot i (conv_con s)
13500 | (Lident s, `uident) -> lident (conv_con s)
13502 | _ -> error (loc_of_ident i) "uppercase identifier expected"
13504 let rec ctyp_long_id_prefix t =
13506 | Ast.TyId (_, i) -> ident i
13507 | Ast.TyApp (_, m1, m2) ->
13508 let li1 = ctyp_long_id_prefix m1 in
13509 let li2 = ctyp_long_id_prefix m2 in Lapply (li1, li2)
13510 | t -> error (loc_of_ctyp t) "invalid module expression"
13512 let ctyp_long_id t =
13514 | Ast.TyId (_, i) -> (false, (long_type_ident i))
13515 | TyApp (loc, _, _) -> error loc "invalid type name"
13516 | TyCls (_, i) -> (true, (ident i))
13517 | t -> error (loc_of_ctyp t) "invalid type"
13519 let rec ty_var_list_of_ctyp =
13521 | Ast.TyApp (_, t1, t2) ->
13522 (ty_var_list_of_ctyp t1) @ (ty_var_list_of_ctyp t2)
13523 | Ast.TyQuo (_, s) -> [ s ]
13524 | _ -> assert false
13529 let li = long_type_ident i
13530 in mktyp loc (Ptyp_constr (li, []))
13531 | TyAli (loc, t1, t2) ->
13533 (match (t1, t2) with
13534 | (t, TyQuo (_, s)) -> (t, s)
13535 | (TyQuo (_, s), t) -> (t, s)
13536 | _ -> error loc "invalid alias type")
13537 in mktyp loc (Ptyp_alias (ctyp t, i))
13538 | TyAny loc -> mktyp loc Ptyp_any
13539 | (TyApp (loc, _, _) as f) ->
13540 let (f, al) = ctyp_fa [] f in
13541 let (is_cls, li) = ctyp_long_id f
13544 then mktyp loc (Ptyp_class (li, List.map ctyp al, []))
13545 else mktyp loc (Ptyp_constr (li, List.map ctyp al))
13546 | TyArr (loc, (TyLab (_, lab, t1)), t2) ->
13547 mktyp loc (Ptyp_arrow (lab, ctyp t1, ctyp t2))
13548 | TyArr (loc, (TyOlb (loc1, lab, t1)), t2) ->
13550 TyApp (loc1, Ast.TyId (loc1, Ast.IdLid (loc1, "option")),
13552 in mktyp loc (Ptyp_arrow ("?" ^ lab, ctyp t1, ctyp t2))
13553 | TyArr (loc, t1, t2) ->
13554 mktyp loc (Ptyp_arrow ("", ctyp t1, ctyp t2))
13555 | Ast.TyObj (loc, fl, Ast.BFalse) ->
13556 mktyp loc (Ptyp_object (meth_list fl []))
13557 | Ast.TyObj (loc, fl, Ast.BTrue) ->
13559 (Ptyp_object (meth_list fl [ mkfield loc Pfield_var ]))
13560 | TyCls (loc, id) -> mktyp loc (Ptyp_class (ident id, [], []))
13561 | TyLab (loc, _, _) ->
13562 error loc "labelled type not allowed here"
13563 | TyMan (loc, _, _) ->
13564 error loc "manifest type not allowed here"
13565 | TyOlb (loc, _, _) ->
13566 error loc "labelled type not allowed here"
13567 | TyPol (loc, t1, t2) ->
13568 mktyp loc (Ptyp_poly (ty_var_list_of_ctyp t1, ctyp t2))
13569 | TyQuo (loc, s) -> mktyp loc (Ptyp_var s)
13570 | TyRec (loc, _) -> error loc "record type not allowed here"
13571 | TySum (loc, _) -> error loc "sum type not allowed here"
13572 | TyPrv (loc, _) -> error loc "private type not allowed here"
13573 | TyMut (loc, _) -> error loc "mutable type not allowed here"
13574 | TyOr (loc, _, _) ->
13575 error loc "type1 | type2 not allowed here"
13576 | TyAnd (loc, _, _) ->
13577 error loc "type1 and type2 not allowed here"
13578 | TyOf (loc, _, _) ->
13579 error loc "type1 of type2 not allowed here"
13580 | TyCol (loc, _, _) ->
13581 error loc "type1 : type2 not allowed here"
13582 | TySem (loc, _, _) ->
13583 error loc "type1 ; type2 not allowed here"
13584 | Ast.TyTup (loc, (Ast.TySta (_, t1, t2))) ->
13587 (List.map ctyp (list_of_ctyp t1 (list_of_ctyp t2 []))))
13588 | Ast.TyVrnEq (loc, t) ->
13589 mktyp loc (Ptyp_variant (row_field t, true, None))
13590 | Ast.TyVrnSup (loc, t) ->
13591 mktyp loc (Ptyp_variant (row_field t, false, None))
13592 | Ast.TyVrnInf (loc, t) ->
13593 mktyp loc (Ptyp_variant (row_field t, true, Some []))
13594 | Ast.TyVrnInfSup (loc, t, t') ->
13596 (Ptyp_variant (row_field t, true, Some (name_tags t')))
13597 | TyAnt (loc, _) -> error loc "antiquotation not allowed here"
13598 | TyOfAmp (_, _, _) | TyAmp (_, _, _) | TySta (_, _, _) |
13599 TyCom (_, _, _) | TyVrn (_, _) | TyQuM (_, _) |
13600 TyQuP (_, _) | TyDcl (_, _, _, _, _) |
13601 TyObj (_, _, (BAnt _)) | TyNil _ | TyTup (_, _) ->
13605 | Ast.TyNil _ -> []
13606 | Ast.TyVrn (_, i) -> [ Rtag (i, true, []) ]
13607 | Ast.TyOfAmp (_, (Ast.TyVrn (_, i)), t) ->
13608 [ Rtag (i, true, List.map ctyp (list_of_ctyp t [])) ]
13609 | Ast.TyOf (_, (Ast.TyVrn (_, i)), t) ->
13610 [ Rtag (i, false, List.map ctyp (list_of_ctyp t [])) ]
13611 | Ast.TyOr (_, t1, t2) -> (row_field t1) @ (row_field t2)
13612 | t -> [ Rinherit (ctyp t) ]
13615 | Ast.TyApp (_, t1, t2) -> (name_tags t1) @ (name_tags t2)
13616 | Ast.TyVrn (_, s) -> [ s ]
13617 | _ -> assert false
13618 and meth_list fl acc =
13620 | Ast.TyNil _ -> acc
13621 | Ast.TySem (_, t1, t2) -> meth_list t1 (meth_list t2 acc)
13622 | Ast.TyCol (loc, (Ast.TyId (_, (Ast.IdLid (_, lab)))), t) ->
13623 (mkfield loc (Pfield (lab, mkpolytype (ctyp t)))) :: acc
13624 | _ -> assert false
13626 let mktype loc tl cl tk tp tm =
13627 let (params, variance) = List.split tl
13630 ptype_params = params;
13633 ptype_private = tp;
13634 ptype_manifest = tm;
13635 ptype_loc = mkloc loc;
13636 ptype_variance = variance;
13639 let mkprivate' m = if m then Private else Public
13641 let mkprivate m = mkprivate' (mb2b m)
13645 | Ast.TyCol (loc, (Ast.TyId (_, (Ast.IdLid (_, s)))),
13646 (Ast.TyMut (_, t))) ->
13647 (s, Mutable, (mkpolytype (ctyp t)), (mkloc loc))
13648 | Ast.TyCol (loc, (Ast.TyId (_, (Ast.IdLid (_, s)))), t) ->
13649 (s, Immutable, (mkpolytype (ctyp t)), (mkloc loc))
13650 | _ -> assert false
13654 | Ast.TyId (loc, (Ast.IdUid (_, s))) ->
13655 ((conv_con s), [], (mkloc loc))
13656 | Ast.TyOf (loc, (Ast.TyId (_, (Ast.IdUid (_, s)))), t) ->
13657 ((conv_con s), (List.map ctyp (list_of_ctyp t [])),
13659 | _ -> assert false
13661 let rec type_decl tl cl loc m pflag =
13663 | Ast.TyMan (_, t1, t2) ->
13664 type_decl tl cl loc (Some (ctyp t1)) pflag t2
13665 | Ast.TyPrv (_, t) -> type_decl tl cl loc m true t
13666 | Ast.TyRec (_, t) ->
13668 (Ptype_record (List.map mktrecord (list_of_ctyp t [])))
13669 (mkprivate' pflag) m
13670 | Ast.TySum (_, t) ->
13672 (Ptype_variant (List.map mkvariant (list_of_ctyp t [])))
13673 (mkprivate' pflag) m
13677 error loc "only one manifest type allowed by definition"
13681 | Ast.TyNil _ -> None
13682 | _ -> Some (ctyp t)
13683 in mktype loc tl cl Ptype_abstract (mkprivate' pflag) m)
13685 let type_decl tl cl t =
13686 type_decl tl cl (loc_of_ctyp t) None false t
13688 let mkvalue_desc t p = { pval_type = ctyp t; pval_prim = p; }
13690 let rec list_of_meta_list =
13693 | Ast.LCons (x, xs) -> x :: (list_of_meta_list xs)
13694 | Ast.LAnt _ -> assert false
13696 let mkmutable m = if mb2b m then Mutable else Immutable
13699 match (lab, p) with
13701 (Ast.PaId (_, (Ast.IdLid (_, i))) |
13702 Ast.PaTyc (_, (Ast.PaId (_, (Ast.IdLid (_, i)))), _)))
13704 | ("", p) -> error (loc_of_patt p) "bad ast in label"
13707 let opt_private_ctyp =
13709 | Ast.TyPrv (_, t) -> (Ptype_abstract, Private, (ctyp t))
13710 | t -> (Ptype_abstract, Public, (ctyp t))
13712 let rec type_parameters t acc =
13714 | Ast.TyApp (_, t1, t2) ->
13715 type_parameters t1 (type_parameters t2 acc)
13716 | Ast.TyQuP (_, s) -> (s, (true, false)) :: acc
13717 | Ast.TyQuM (_, s) -> (s, (false, true)) :: acc
13718 | Ast.TyQuo (_, s) -> (s, (false, false)) :: acc
13719 | _ -> assert false
13721 let rec class_parameters t acc =
13723 | Ast.TyCom (_, t1, t2) ->
13724 class_parameters t1 (class_parameters t2 acc)
13725 | Ast.TyQuP (_, s) -> (s, (true, false)) :: acc
13726 | Ast.TyQuM (_, s) -> (s, (false, true)) :: acc
13727 | Ast.TyQuo (_, s) -> (s, (false, false)) :: acc
13728 | _ -> assert false
13730 let rec type_parameters_and_type_name t acc =
13732 | Ast.TyApp (_, t1, t2) ->
13733 type_parameters_and_type_name t1 (type_parameters t2 acc)
13734 | Ast.TyId (_, i) -> ((ident i), acc)
13735 | _ -> assert false
13737 let rec mkwithc wc acc =
13740 | WcTyp (loc, id_tpl, ct) ->
13741 let (id, tpl) = type_parameters_and_type_name id_tpl [] in
13742 let (params, variance) = List.split tpl in
13743 let (kind, priv, ct) = opt_private_ctyp ct
13748 ptype_params = params;
13751 ptype_private = priv;
13752 ptype_manifest = Some ct;
13753 ptype_loc = mkloc loc;
13754 ptype_variance = variance;
13757 | WcMod (_, i1, i2) ->
13758 ((long_uident i1), (Pwith_module (long_uident i2))) :: acc
13759 | Ast.WcAnd (_, wc1, wc2) -> mkwithc wc1 (mkwithc wc2 acc)
13760 | Ast.WcAnt (loc, _) ->
13761 error loc "bad with constraint (antiquotation)"
13763 let rec patt_fa al =
13765 | PaApp (_, f, a) -> patt_fa (a :: al) f
13768 let rec deep_mkrangepat loc c1 c2 =
13770 then mkghpat loc (Ppat_constant (Const_char c1))
13773 (Ppat_or (mkghpat loc (Ppat_constant (Const_char c1)),
13774 deep_mkrangepat loc (Char.chr ((Char.code c1) + 1)) c2))
13776 let rec mkrangepat loc c1 c2 =
13778 then mkrangepat loc c2 c1
13781 then mkpat loc (Ppat_constant (Const_char c1))
13784 (Ppat_or (mkghpat loc (Ppat_constant (Const_char c1)),
13785 deep_mkrangepat loc (Char.chr ((Char.code c1) + 1)) c2))
13789 | Ast.PaId (loc, (Ast.IdLid (_, s))) -> mkpat loc (Ppat_var s)
13790 | Ast.PaId (loc, i) ->
13792 Ppat_construct (long_uident ~conv_con i, None,
13793 constructors_arity ())
13795 | PaAli (loc, p1, p2) ->
13797 (match (p1, p2) with
13798 | (p, Ast.PaId (_, (Ast.IdLid (_, s)))) -> (p, s)
13799 | (Ast.PaId (_, (Ast.IdLid (_, s))), p) -> (p, s)
13800 | _ -> error loc "invalid alias pattern")
13801 in mkpat loc (Ppat_alias (patt p, i))
13802 | PaAnt (loc, _) -> error loc "antiquotation not allowed here"
13803 | PaAny loc -> mkpat loc Ppat_any
13804 | Ast.PaApp (loc, (Ast.PaId (_, (Ast.IdUid (_, s)))),
13805 (Ast.PaTup (_, (Ast.PaAny loc_any)))) ->
13807 (Ppat_construct (lident (conv_con s),
13808 Some (mkpat loc_any Ppat_any), false))
13809 | (PaApp (loc, _, _) as f) ->
13810 let (f, al) = patt_fa [] f in
13811 let al = List.map patt al
13813 (match (patt f).ppat_desc with
13814 | Ppat_construct (li, None, _) ->
13815 if constructors_arity ()
13818 (Ppat_construct (li,
13819 Some (mkpat loc (Ppat_tuple al)), true))
13824 | _ -> mkpat loc (Ppat_tuple al)
13825 in mkpat loc (Ppat_construct (li, Some a, false)))
13826 | Ppat_variant (s, None) ->
13828 if constructors_arity ()
13829 then mkpat loc (Ppat_tuple al)
13833 | _ -> mkpat loc (Ppat_tuple al))
13834 in mkpat loc (Ppat_variant (s, Some a))
13836 error (loc_of_patt f)
13837 "this is not a constructor, it cannot be applied in a pattern")
13838 | PaArr (loc, p) ->
13839 mkpat loc (Ppat_array (List.map patt (list_of_patt p [])))
13840 | PaChr (loc, s) ->
13842 (Ppat_constant (Const_char (char_of_char_token loc s)))
13843 | PaInt (loc, s) ->
13845 (try int_of_string s
13849 "Integer literal exceeds the range of representable integers of type int")
13850 in mkpat loc (Ppat_constant (Const_int i))
13851 | PaInt32 (loc, s) ->
13853 (try Int32.of_string s
13857 "Integer literal exceeds the range of representable integers of type int32")
13858 in mkpat loc (Ppat_constant (Const_int32 i32))
13859 | PaInt64 (loc, s) ->
13861 (try Int64.of_string s
13865 "Integer literal exceeds the range of representable integers of type int64")
13866 in mkpat loc (Ppat_constant (Const_int64 i64))
13867 | PaNativeInt (loc, s) ->
13869 (try Nativeint.of_string s
13873 "Integer literal exceeds the range of representable integers of type nativeint")
13874 in mkpat loc (Ppat_constant (Const_nativeint nati))
13875 | PaFlo (loc, s) ->
13877 (Ppat_constant (Const_float (remove_underscores s)))
13878 | PaLab (loc, _, _) ->
13879 error loc "labeled pattern not allowed here"
13880 | PaOlb (loc, _, _) | PaOlbi (loc, _, _, _) ->
13881 error loc "labeled pattern not allowed here"
13882 | PaOrp (loc, p1, p2) -> mkpat loc (Ppat_or (patt p1, patt p2))
13883 | PaRng (loc, p1, p2) ->
13884 (match (p1, p2) with
13885 | (PaChr (loc1, c1), PaChr (loc2, c2)) ->
13886 let c1 = char_of_char_token loc1 c1 in
13887 let c2 = char_of_char_token loc2 c2
13888 in mkrangepat loc c1 c2
13890 error loc "range pattern allowed only for characters")
13891 | PaRec (loc, p) ->
13893 (Ppat_record (List.map mklabpat (list_of_patt p [])))
13894 | PaStr (loc, s) ->
13897 (Const_string (string_of_string_token loc s)))
13898 | Ast.PaTup (loc, (Ast.PaCom (_, p1, p2))) ->
13901 (List.map patt (list_of_patt p1 (list_of_patt p2 []))))
13902 | Ast.PaTup (loc, _) -> error loc "singleton tuple pattern"
13903 | PaTyc (loc, p, t) ->
13904 mkpat loc (Ppat_constraint (patt p, ctyp t))
13905 | PaTyp (loc, i) -> mkpat loc (Ppat_type (long_type_ident i))
13906 | PaVrn (loc, s) -> mkpat loc (Ppat_variant (s, None))
13907 | PaLaz (loc, p) -> mkpat loc (Ppat_lazy (patt p))
13908 | (PaEq (_, _, _) | PaSem (_, _, _) | PaCom (_, _, _) | PaNil _
13909 as p) -> error (loc_of_patt p) "invalid pattern"
13912 | Ast.PaEq (_, i, p) ->
13913 ((ident ~conv_lid: conv_lab i), (patt p))
13914 | p -> error (loc_of_patt p) "invalid pattern"
13916 let rec expr_fa al =
13918 | ExApp (_, f, a) -> expr_fa (a :: al) f
13921 let rec class_expr_fa al =
13923 | CeApp (_, ce, a) -> class_expr_fa (a :: al) ce
13926 let rec sep_expr_acc l =
13928 | ExAcc (_, e1, e2) -> sep_expr_acc (sep_expr_acc l e2) e1
13929 | (Ast.ExId (loc, (Ast.IdUid (_, s))) as e) ->
13931 | [] -> [ (loc, [], e) ]
13932 | (loc', sl, e) :: l ->
13933 ((Loc.merge loc loc'), (s :: sl), e) :: l)
13934 | Ast.ExId (_, ((Ast.IdAcc (_, _, _) as i))) ->
13935 let rec normalize_acc =
13937 | Ast.IdAcc (_loc, i1, i2) ->
13938 Ast.ExAcc (_loc, normalize_acc i1, normalize_acc i2)
13939 | Ast.IdApp (_loc, i1, i2) ->
13940 Ast.ExApp (_loc, normalize_acc i1, normalize_acc i2)
13941 | (Ast.IdAnt (_loc, _) | Ast.IdUid (_loc, _) |
13942 Ast.IdLid (_loc, _)
13943 as i) -> Ast.ExId (_loc, i))
13944 in sep_expr_acc l (normalize_acc i)
13945 | e -> ((loc_of_expr e), [], e) :: l
13947 let list_of_opt_ctyp ot acc =
13948 match ot with | Ast.TyNil _ -> acc | t -> list_of_ctyp t acc
13952 | Ast.ExAcc (loc, x, (Ast.ExId (_, (Ast.IdLid (_, "val"))))) ->
13954 (Pexp_apply (mkexp loc (Pexp_ident (Lident "!")),
13955 [ ("", (expr x)) ]))
13956 | (ExAcc (loc, _, _) | Ast.ExId (loc, (Ast.IdAcc (_, _, _))) as
13959 (match sep_expr_acc [] e with
13960 | (loc, ml, Ast.ExId (_, (Ast.IdUid (_, s)))) :: l ->
13961 let ca = constructors_arity ()
13964 (Pexp_construct (mkli (conv_con s) ml, None,
13967 | (loc, ml, Ast.ExId (_, (Ast.IdLid (_, s)))) :: l ->
13968 ((mkexp loc (Pexp_ident (mkli s ml))), l)
13969 | (_, [], e) :: l -> ((expr e), l)
13970 | _ -> error loc "bad ast in expression") in
13973 (fun (loc_bp, e1) (loc_ep, ml, e2) ->
13975 | Ast.ExId (_, (Ast.IdLid (_, s))) ->
13976 let loc = Loc.merge loc_bp loc_ep
13980 (Pexp_field (e1, mkli (conv_lab s) ml))))
13982 error (loc_of_expr e2)
13983 "lowercase identifier expected")
13986 | ExAnt (loc, _) -> error loc "antiquotation not allowed here"
13987 | (ExApp (loc, _, _) as f) ->
13988 let (f, al) = expr_fa [] f in
13989 let al = List.map label_expr al
13991 (match (expr f).pexp_desc with
13992 | Pexp_construct (li, None, _) ->
13993 let al = List.map snd al
13995 if constructors_arity ()
13998 (Pexp_construct (li,
13999 Some (mkexp loc (Pexp_tuple al)), true))
14004 | _ -> mkexp loc (Pexp_tuple al)
14007 (Pexp_construct (li, Some a, false)))
14008 | Pexp_variant (s, None) ->
14009 let al = List.map snd al in
14011 if constructors_arity ()
14012 then mkexp loc (Pexp_tuple al)
14016 | _ -> mkexp loc (Pexp_tuple al))
14017 in mkexp loc (Pexp_variant (s, Some a))
14018 | _ -> mkexp loc (Pexp_apply (expr f, al)))
14019 | ExAre (loc, e1, e2) ->
14022 (mkexp loc (Pexp_ident (array_function "Array" "get")),
14023 [ ("", (expr e1)); ("", (expr e2)) ]))
14024 | ExArr (loc, e) ->
14025 mkexp loc (Pexp_array (List.map expr (list_of_expr e [])))
14026 | ExAsf loc -> mkexp loc Pexp_assertfalse
14027 | ExAss (loc, e, v) ->
14030 | Ast.ExAcc (loc, x,
14031 (Ast.ExId (_, (Ast.IdLid (_, "val"))))) ->
14032 Pexp_apply (mkexp loc (Pexp_ident (Lident ":=")),
14033 [ ("", (expr x)); ("", (expr v)) ])
14034 | ExAcc (loc, _, _) ->
14035 (match (expr e).pexp_desc with
14036 | Pexp_field (e, lab) ->
14037 Pexp_setfield (e, lab, expr v)
14038 | _ -> error loc "bad record access")
14039 | ExAre (_, e1, e2) ->
14042 (Pexp_ident (array_function "Array" "set")),
14043 [ ("", (expr e1)); ("", (expr e2)); ("", (expr v)) ])
14044 | Ast.ExId (_, (Ast.IdLid (_, lab))) ->
14045 Pexp_setinstvar (lab, expr v)
14046 | ExSte (_, e1, e2) ->
14049 (Pexp_ident (array_function "String" "set")),
14050 [ ("", (expr e1)); ("", (expr e2)); ("", (expr v)) ])
14051 | _ -> error loc "bad left part of assignment")
14053 | ExAsr (loc, e) -> mkexp loc (Pexp_assert (expr e))
14054 | ExChr (loc, s) ->
14056 (Pexp_constant (Const_char (char_of_char_token loc s)))
14057 | ExCoe (loc, e, t1, t2) ->
14059 (match t1 with | Ast.TyNil _ -> None | t -> Some (ctyp t))
14060 in mkexp loc (Pexp_constraint (expr e, t1, Some (ctyp t2)))
14061 | ExFlo (loc, s) ->
14063 (Pexp_constant (Const_float (remove_underscores s)))
14064 | ExFor (loc, i, e1, e2, df, el) ->
14065 let e3 = ExSeq (loc, el) in
14066 let df = if mb2b df then Upto else Downto
14067 in mkexp loc (Pexp_for (i, expr e1, expr e2, df, expr e3))
14068 | Ast.ExFun (loc, (Ast.McArr (_, (PaLab (_, lab, po)), w, e)))
14071 (Pexp_function (lab, None,
14072 [ ((patt_of_lab loc lab po), (when_expr e w)) ]))
14074 (Ast.McArr (_, (PaOlbi (_, lab, p, e1)), w, e2))) ->
14075 let lab = paolab lab p
14078 (Pexp_function ("?" ^ lab, Some (expr e1),
14079 [ ((patt p), (when_expr e2 w)) ]))
14080 | Ast.ExFun (loc, (Ast.McArr (_, (PaOlb (_, lab, p)), w, e)))
14082 let lab = paolab lab p
14085 (Pexp_function ("?" ^ lab, None,
14086 [ ((patt_of_lab loc lab p), (when_expr e w)) ]))
14087 | ExFun (loc, a) ->
14088 mkexp loc (Pexp_function ("", None, match_case a []))
14089 | ExIfe (loc, e1, e2, e3) ->
14091 (Pexp_ifthenelse (expr e1, expr e2, Some (expr e3)))
14092 | ExInt (loc, s) ->
14094 (try int_of_string s
14098 "Integer literal exceeds the range of representable integers of type int")
14099 in mkexp loc (Pexp_constant (Const_int i))
14100 | ExInt32 (loc, s) ->
14102 (try Int32.of_string s
14106 "Integer literal exceeds the range of representable integers of type int32")
14107 in mkexp loc (Pexp_constant (Const_int32 i32))
14108 | ExInt64 (loc, s) ->
14110 (try Int64.of_string s
14114 "Integer literal exceeds the range of representable integers of type int64")
14115 in mkexp loc (Pexp_constant (Const_int64 i64))
14116 | ExNativeInt (loc, s) ->
14118 (try Nativeint.of_string s
14122 "Integer literal exceeds the range of representable integers of type nativeint")
14123 in mkexp loc (Pexp_constant (Const_nativeint nati))
14124 | ExLab (loc, _, _) ->
14125 error loc "labeled expression not allowed here"
14126 | ExLaz (loc, e) -> mkexp loc (Pexp_lazy (expr e))
14127 | ExLet (loc, rf, bi, e) ->
14128 mkexp loc (Pexp_let (mkrf rf, binding bi [], expr e))
14129 | ExLmd (loc, i, me, e) ->
14130 mkexp loc (Pexp_letmodule (i, module_expr me, expr e))
14131 | ExMat (loc, e, a) ->
14132 mkexp loc (Pexp_match (expr e, match_case a []))
14133 | ExNew (loc, id) -> mkexp loc (Pexp_new (long_type_ident id))
14134 | ExObj (loc, po, cfl) ->
14136 (match po with | Ast.PaNil _ -> Ast.PaAny loc | p -> p) in
14137 let cil = class_str_item cfl []
14138 in mkexp loc (Pexp_object (((patt p), cil)))
14139 | ExOlb (loc, _, _) ->
14140 error loc "labeled expression not allowed here"
14141 | ExOvr (loc, iel) ->
14142 mkexp loc (Pexp_override (mkideexp iel []))
14143 | ExRec (loc, lel, eo) ->
14145 | Ast.RbNil _ -> error loc "empty record"
14149 | Ast.ExNil _ -> None
14150 | e -> Some (expr e))
14151 in mkexp loc (Pexp_record (mklabexp lel [], eo)))
14152 | ExSeq (_loc, e) ->
14155 | [] -> expr (Ast.ExId (_loc, Ast.IdUid (_loc, "()")))
14158 let _loc = Loc.merge (loc_of_expr e) _loc
14159 in mkexp _loc (Pexp_sequence (expr e, loop el)))
14160 in loop (list_of_expr e [])
14161 | ExSnd (loc, e, s) -> mkexp loc (Pexp_send (expr e, s))
14162 | ExSte (loc, e1, e2) ->
14166 (Pexp_ident (array_function "String" "get")),
14167 [ ("", (expr e1)); ("", (expr e2)) ]))
14168 | ExStr (loc, s) ->
14171 (Const_string (string_of_string_token loc s)))
14172 | ExTry (loc, e, a) ->
14173 mkexp loc (Pexp_try (expr e, match_case a []))
14174 | Ast.ExTup (loc, (Ast.ExCom (_, e1, e2))) ->
14177 (List.map expr (list_of_expr e1 (list_of_expr e2 []))))
14178 | Ast.ExTup (loc, _) -> error loc "singleton tuple"
14179 | ExTyc (loc, e, t) ->
14180 mkexp loc (Pexp_constraint (expr e, Some (ctyp t), None))
14181 | Ast.ExId (loc, (Ast.IdUid (_, "()"))) ->
14182 mkexp loc (Pexp_construct (lident "()", None, true))
14183 | Ast.ExId (loc, (Ast.IdLid (_, s))) ->
14184 mkexp loc (Pexp_ident (lident s))
14185 | Ast.ExId (loc, (Ast.IdUid (_, s))) ->
14187 (Pexp_construct (lident (conv_con s), None, true))
14188 | ExVrn (loc, s) -> mkexp loc (Pexp_variant (s, None))
14189 | ExWhi (loc, e1, el) ->
14190 let e2 = ExSeq (loc, el)
14191 in mkexp loc (Pexp_while (expr e1, expr e2))
14192 | Ast.ExCom (loc, _, _) ->
14193 error loc "expr, expr: not allowed here"
14194 | Ast.ExSem (loc, _, _) ->
14196 "expr; expr: not allowed here, use do {...} or [|...|] to surround them"
14197 | (ExId (_, _) | ExNil _ as e) ->
14198 error (loc_of_expr e) "invalid expr"
14199 and patt_of_lab _loc lab =
14201 | Ast.PaNil _ -> patt (Ast.PaId (_loc, Ast.IdLid (_loc, lab)))
14203 and expr_of_lab _loc lab =
14205 | Ast.ExNil _ -> expr (Ast.ExId (_loc, Ast.IdLid (_loc, lab)))
14209 | ExLab (loc, lab, eo) -> (lab, (expr_of_lab loc lab eo))
14210 | ExOlb (loc, lab, eo) ->
14211 (("?" ^ lab), (expr_of_lab loc lab eo))
14212 | e -> ("", (expr e))
14213 and binding x acc =
14215 | Ast.BiAnd (_, x, y) -> binding x (binding y acc)
14216 | Ast.BiEq (_, p, e) -> ((patt p), (expr e)) :: acc
14217 | Ast.BiNil _ -> acc
14218 | _ -> assert false
14219 and match_case x acc =
14221 | Ast.McOr (_, x, y) -> match_case x (match_case y acc)
14222 | Ast.McArr (_, p, w, e) -> ((patt p), (when_expr e w)) :: acc
14223 | Ast.McNil _ -> acc
14224 | _ -> assert false
14225 and when_expr e w =
14227 | Ast.ExNil _ -> expr e
14228 | w -> mkexp (loc_of_expr w) (Pexp_when (expr w, expr e))
14229 and mklabexp x acc =
14231 | Ast.RbSem (_, x, y) -> mklabexp x (mklabexp y acc)
14232 | Ast.RbEq (_, i, e) ->
14233 ((ident ~conv_lid: conv_lab i), (expr e)) :: acc
14234 | _ -> assert false
14235 and mkideexp x acc =
14237 | Ast.RbNil _ -> acc
14238 | Ast.RbSem (_, x, y) -> mkideexp x (mkideexp y acc)
14239 | Ast.RbEq (_, (Ast.IdLid (_, s)), e) -> (s, (expr e)) :: acc
14240 | _ -> assert false
14241 and mktype_decl x acc =
14243 | Ast.TyAnd (_, x, y) -> mktype_decl x (mktype_decl y acc)
14244 | Ast.TyDcl (_, c, tl, td, cl) ->
14249 Loc.merge (loc_of_ctyp t1) (loc_of_ctyp t2)
14250 in ((ctyp t1), (ctyp t2), (mkloc loc)))
14254 (type_decl (List.fold_right type_parameters tl []) cl td)) ::
14256 | _ -> assert false
14260 error loc "abstract/nil module type not allowed here"
14261 | Ast.MtId (loc, i) -> mkmty loc (Pmty_ident (long_uident i))
14262 | Ast.MtFun (loc, n, nt, mt) ->
14264 (Pmty_functor (n, module_type nt, module_type mt))
14265 | Ast.MtQuo (loc, _) ->
14266 error loc "module type variable not allowed here"
14267 | Ast.MtSig (loc, sl) ->
14268 mkmty loc (Pmty_signature (sig_item sl []))
14269 | Ast.MtWit (loc, mt, wc) ->
14270 mkmty loc (Pmty_with (module_type mt, mkwithc wc []))
14271 | Ast.MtAnt (_, _) -> assert false
14275 | SgCls (loc, cd) ->
14278 (List.map class_info_class_type
14279 (list_of_class_type cd [])))) ::
14281 | SgClt (loc, ctd) ->
14284 (List.map class_info_class_type
14285 (list_of_class_type ctd [])))) ::
14287 | Ast.SgSem (_, sg1, sg2) -> sig_item sg1 (sig_item sg2 l)
14288 | SgDir (_, _, _) -> l
14289 | Ast.SgExc (loc, (Ast.TyId (_, (Ast.IdUid (_, s))))) ->
14290 (mksig loc (Psig_exception (conv_con s, []))) :: l
14292 (Ast.TyOf (_, (Ast.TyId (_, (Ast.IdUid (_, s)))), t))) ->
14294 (Psig_exception (conv_con s,
14295 List.map ctyp (list_of_ctyp t [])))) ::
14297 | SgExc (_, _) -> assert false
14298 | SgExt (loc, n, t, sl) ->
14300 (Psig_value (n, mkvalue_desc t (list_of_meta_list sl)))) ::
14302 | SgInc (loc, mt) ->
14303 (mksig loc (Psig_include (module_type mt))) :: l
14304 | SgMod (loc, n, mt) ->
14305 (mksig loc (Psig_module (n, module_type mt))) :: l
14306 | SgRecMod (loc, mb) ->
14307 (mksig loc (Psig_recmodule (module_sig_binding mb []))) ::
14309 | SgMty (loc, n, mt) ->
14312 | MtQuo (_, _) -> Pmodtype_abstract
14313 | _ -> Pmodtype_manifest (module_type mt))
14314 in (mksig loc (Psig_modtype (n, si))) :: l
14315 | SgOpn (loc, id) ->
14316 (mksig loc (Psig_open (long_uident id))) :: l
14317 | SgTyp (loc, tdl) ->
14318 (mksig loc (Psig_type (mktype_decl tdl []))) :: l
14319 | SgVal (loc, n, t) ->
14320 (mksig loc (Psig_value (n, mkvalue_desc t []))) :: l
14321 | Ast.SgAnt (loc, _) -> error loc "antiquotation in sig_item"
14322 and module_sig_binding x acc =
14324 | Ast.MbAnd (_, x, y) ->
14325 module_sig_binding x (module_sig_binding y acc)
14326 | Ast.MbCol (_, s, mt) -> (s, (module_type mt)) :: acc
14327 | _ -> assert false
14328 and module_str_binding x acc =
14330 | Ast.MbAnd (_, x, y) ->
14331 module_str_binding x (module_str_binding y acc)
14332 | Ast.MbColEq (_, s, mt, me) ->
14333 (s, (module_type mt), (module_expr me)) :: acc
14334 | _ -> assert false
14337 | Ast.MeNil loc -> error loc "nil module expression"
14338 | Ast.MeId (loc, i) -> mkmod loc (Pmod_ident (long_uident i))
14339 | Ast.MeApp (loc, me1, me2) ->
14340 mkmod loc (Pmod_apply (module_expr me1, module_expr me2))
14341 | Ast.MeFun (loc, n, mt, me) ->
14343 (Pmod_functor (n, module_type mt, module_expr me))
14344 | Ast.MeStr (loc, sl) ->
14345 mkmod loc (Pmod_structure (str_item sl []))
14346 | Ast.MeTyc (loc, me, mt) ->
14348 (Pmod_constraint (module_expr me, module_type mt))
14349 | Ast.MeAnt (loc, _) ->
14350 error loc "antiquotation in module_expr"
14354 | StCls (loc, cd) ->
14357 (List.map class_info_class_expr
14358 (list_of_class_expr cd [])))) ::
14360 | StClt (loc, ctd) ->
14363 (List.map class_info_class_type
14364 (list_of_class_type ctd [])))) ::
14366 | Ast.StSem (_, st1, st2) -> str_item st1 (str_item st2 l)
14367 | StDir (_, _, _) -> l
14368 | Ast.StExc (loc, (Ast.TyId (_, (Ast.IdUid (_, s)))), Ast.
14370 (mkstr loc (Pstr_exception (conv_con s, []))) :: l
14372 (Ast.TyOf (_, (Ast.TyId (_, (Ast.IdUid (_, s)))), t)), Ast.
14375 (Pstr_exception (conv_con s,
14376 List.map ctyp (list_of_ctyp t [])))) ::
14378 | Ast.StExc (loc, (Ast.TyId (_, (Ast.IdUid (_, s)))),
14380 (mkstr loc (Pstr_exn_rebind (conv_con s, ident i))) :: l
14381 | StExc (_, _, _) -> assert false
14382 | StExp (loc, e) -> (mkstr loc (Pstr_eval (expr e))) :: l
14383 | StExt (loc, n, t, sl) ->
14385 (Pstr_primitive (n,
14386 mkvalue_desc t (list_of_meta_list sl)))) ::
14388 | StInc (loc, me) ->
14389 (mkstr loc (Pstr_include (module_expr me))) :: l
14390 | StMod (loc, n, me) ->
14391 (mkstr loc (Pstr_module (n, module_expr me))) :: l
14392 | StRecMod (loc, mb) ->
14393 (mkstr loc (Pstr_recmodule (module_str_binding mb []))) ::
14395 | StMty (loc, n, mt) ->
14396 (mkstr loc (Pstr_modtype (n, module_type mt))) :: l
14397 | StOpn (loc, id) ->
14398 (mkstr loc (Pstr_open (long_uident id))) :: l
14399 | StTyp (loc, tdl) ->
14400 (mkstr loc (Pstr_type (mktype_decl tdl []))) :: l
14401 | StVal (loc, rf, bi) ->
14402 (mkstr loc (Pstr_value (mkrf rf, binding bi []))) :: l
14403 | Ast.StAnt (loc, _) -> error loc "antiquotation in str_item"
14406 | CtCon (loc, Ast.BFalse, id, tl) ->
14408 (Pcty_constr (long_class_ident id,
14409 List.map ctyp (list_of_opt_ctyp tl [])))
14410 | CtFun (loc, (TyLab (_, lab, t)), ct) ->
14411 mkcty loc (Pcty_fun (lab, ctyp t, class_type ct))
14412 | CtFun (loc, (TyOlb (loc1, lab, t)), ct) ->
14414 TyApp (loc1, Ast.TyId (loc1, Ast.IdLid (loc1, "option")),
14416 in mkcty loc (Pcty_fun ("?" ^ lab, ctyp t, class_type ct))
14417 | CtFun (loc, t, ct) ->
14418 mkcty loc (Pcty_fun ("", ctyp t, class_type ct))
14419 | CtSig (loc, t_o, ctfl) ->
14421 (match t_o with | Ast.TyNil _ -> Ast.TyAny loc | t -> t) in
14422 let cil = class_sig_item ctfl []
14423 in mkcty loc (Pcty_signature (((ctyp t), cil)))
14424 | CtCon (loc, _, _, _) ->
14425 error loc "invalid virtual class inside a class type"
14426 | CtAnt (_, _) | CtEq (_, _, _) | CtCol (_, _, _) |
14427 CtAnd (_, _, _) | CtNil _ -> assert false
14428 and class_info_class_expr ci =
14430 | CeEq (_, (CeCon (loc, vir, (IdLid (_, name)), params)), ce)
14432 let (loc_params, (params, variance)) =
14434 | Ast.TyNil _ -> (loc, ([], []))
14437 (List.split (class_parameters t []))))
14440 pci_virt = if mb2b vir then Virtual else Concrete;
14441 pci_params = (params, (mkloc loc_params));
14443 pci_expr = class_expr ce;
14444 pci_loc = mkloc loc;
14445 pci_variance = variance;
14447 | ce -> error (loc_of_class_expr ce) "bad class definition"
14448 and class_info_class_type ci =
14450 | CtEq (_, (CtCon (loc, vir, (IdLid (_, name)), params)), ct) |
14451 CtCol (_, (CtCon (loc, vir, (IdLid (_, name)), params)),
14454 let (loc_params, (params, variance)) =
14456 | Ast.TyNil _ -> (loc, ([], []))
14459 (List.split (class_parameters t []))))
14462 pci_virt = if mb2b vir then Virtual else Concrete;
14463 pci_params = (params, (mkloc loc_params));
14465 pci_expr = class_type ct;
14466 pci_loc = mkloc loc;
14467 pci_variance = variance;
14470 error (loc_of_class_type ct)
14471 "bad class/class type declaration/definition"
14472 and class_sig_item c l =
14475 | CgCtr (loc, t1, t2) ->
14476 (Pctf_cstr (((ctyp t1), (ctyp t2), (mkloc loc)))) :: l
14477 | Ast.CgSem (_, csg1, csg2) ->
14478 class_sig_item csg1 (class_sig_item csg2 l)
14479 | CgInh (_, ct) -> (Pctf_inher (class_type ct)) :: l
14480 | CgMth (loc, s, pf, t) ->
14482 ((s, (mkprivate pf), (mkpolytype (ctyp t)), (mkloc loc)))) ::
14484 | CgVal (loc, s, b, v, t) ->
14486 ((s, (mkmutable b), (mkvirtual v), (ctyp t),
14489 | CgVir (loc, s, b, t) ->
14491 ((s, (mkprivate b), (mkpolytype (ctyp t)), (mkloc loc)))) ::
14493 | CgAnt (_, _) -> assert false
14496 | (CeApp (loc, _, _) as c) ->
14497 let (ce, el) = class_expr_fa [] c in
14498 let el = List.map label_expr el
14499 in mkpcl loc (Pcl_apply (class_expr ce, el))
14500 | CeCon (loc, Ast.BFalse, id, tl) ->
14502 (Pcl_constr (long_class_ident id,
14503 List.map ctyp (list_of_opt_ctyp tl [])))
14504 | CeFun (loc, (PaLab (_, lab, po)), ce) ->
14506 (Pcl_fun (lab, None, patt_of_lab loc lab po,
14508 | CeFun (loc, (PaOlbi (_, lab, p, e)), ce) ->
14509 let lab = paolab lab p
14512 (Pcl_fun ("?" ^ lab, Some (expr e), patt p,
14514 | CeFun (loc, (PaOlb (_, lab, p)), ce) ->
14515 let lab = paolab lab p
14518 (Pcl_fun ("?" ^ lab, None, patt_of_lab loc lab p,
14520 | CeFun (loc, p, ce) ->
14521 mkpcl loc (Pcl_fun ("", None, patt p, class_expr ce))
14522 | CeLet (loc, rf, bi, ce) ->
14523 mkpcl loc (Pcl_let (mkrf rf, binding bi [], class_expr ce))
14524 | CeStr (loc, po, cfl) ->
14526 (match po with | Ast.PaNil _ -> Ast.PaAny loc | p -> p) in
14527 let cil = class_str_item cfl []
14528 in mkpcl loc (Pcl_structure (((patt p), cil)))
14529 | CeTyc (loc, ce, ct) ->
14530 mkpcl loc (Pcl_constraint (class_expr ce, class_type ct))
14531 | CeCon (loc, _, _, _) ->
14532 error loc "invalid virtual class inside a class expression"
14533 | CeAnt (_, _) | CeEq (_, _, _) | CeAnd (_, _, _) | CeNil _ ->
14535 and class_str_item c l =
14538 | CrCtr (loc, t1, t2) ->
14539 (Pcf_cstr (((ctyp t1), (ctyp t2), (mkloc loc)))) :: l
14540 | Ast.CrSem (_, cst1, cst2) ->
14541 class_str_item cst1 (class_str_item cst2 l)
14542 | CrInh (_, ce, "") -> (Pcf_inher (class_expr ce, None)) :: l
14543 | CrInh (_, ce, pb) ->
14544 (Pcf_inher (class_expr ce, Some pb)) :: l
14545 | CrIni (_, e) -> (Pcf_init (expr e)) :: l
14546 | CrMth (loc, s, b, e, t) ->
14549 | Ast.TyNil _ -> None
14550 | t -> Some (mkpolytype (ctyp t))) in
14551 let e = mkexp loc (Pexp_poly (expr e, t))
14552 in (Pcf_meth ((s, (mkprivate b), e, (mkloc loc)))) :: l
14553 | CrVal (loc, s, b, e) ->
14554 (Pcf_val ((s, (mkmutable b), (expr e), (mkloc loc)))) :: l
14555 | CrVir (loc, s, b, t) ->
14557 ((s, (mkprivate b), (mkpolytype (ctyp t)), (mkloc loc)))) ::
14559 | CrVvr (loc, s, b, t) ->
14560 (Pcf_valvirt ((s, (mkmutable b), (ctyp t), (mkloc loc)))) ::
14562 | CrAnt (_, _) -> assert false
14564 let sig_item ast = sig_item ast []
14566 let str_item ast = str_item ast []
14570 | Ast.ExNil _ -> Pdir_none
14571 | ExStr (_, s) -> Pdir_string s
14572 | ExInt (_, i) -> Pdir_int (int_of_string i)
14573 | Ast.ExId (_, (Ast.IdUid (_, "True"))) -> Pdir_bool true
14574 | Ast.ExId (_, (Ast.IdUid (_, "False"))) -> Pdir_bool false
14575 | e -> Pdir_ident (ident (ident_of_expr e))
14579 | StDir (_, d, dp) -> Ptop_dir (d, directive dp)
14580 | si -> Ptop_def (str_item si)
14588 module Make (Ast : Sig.Camlp4Ast) =
14591 object inherit Ast.map as super
14593 method with_constr =
14595 match super#with_constr wc with
14596 | Ast.WcAnd (_, (Ast.WcNil _), wc) |
14597 Ast.WcAnd (_, wc, (Ast.WcNil _)) -> wc
14602 match super#expr e with
14603 | Ast.ExLet (_, _, (Ast.BiNil _), e) |
14604 Ast.ExRec (_, (Ast.RbNil _), e) |
14605 Ast.ExCom (_, (Ast.ExNil _), e) |
14606 Ast.ExCom (_, e, (Ast.ExNil _)) |
14607 Ast.ExSem (_, (Ast.ExNil _), e) |
14608 Ast.ExSem (_, e, (Ast.ExNil _)) -> e
14613 match super#patt p with
14614 | Ast.PaAli (_, p, (Ast.PaNil _)) |
14615 Ast.PaOrp (_, (Ast.PaNil _), p) |
14616 Ast.PaOrp (_, p, (Ast.PaNil _)) |
14617 Ast.PaCom (_, (Ast.PaNil _), p) |
14618 Ast.PaCom (_, p, (Ast.PaNil _)) |
14619 Ast.PaSem (_, (Ast.PaNil _), p) |
14620 Ast.PaSem (_, p, (Ast.PaNil _)) -> p
14623 method match_case =
14625 match super#match_case mc with
14626 | Ast.McOr (_, (Ast.McNil _), mc) |
14627 Ast.McOr (_, mc, (Ast.McNil _)) -> mc
14632 match super#binding bi with
14633 | Ast.BiAnd (_, (Ast.BiNil _), bi) |
14634 Ast.BiAnd (_, bi, (Ast.BiNil _)) -> bi
14637 method rec_binding =
14639 match super#rec_binding rb with
14640 | Ast.RbSem (_, (Ast.RbNil _), bi) |
14641 Ast.RbSem (_, bi, (Ast.RbNil _)) -> bi
14644 method module_binding =
14646 match super#module_binding mb with
14647 | Ast.MbAnd (_, (Ast.MbNil _), mb) |
14648 Ast.MbAnd (_, mb, (Ast.MbNil _)) -> mb
14653 match super#ctyp t with
14654 | Ast.TyPol (_, (Ast.TyNil _), t) |
14655 Ast.TyAli (_, (Ast.TyNil _), t) |
14656 Ast.TyAli (_, t, (Ast.TyNil _)) |
14657 Ast.TyArr (_, t, (Ast.TyNil _)) |
14658 Ast.TyArr (_, (Ast.TyNil _), t) |
14659 Ast.TyOr (_, (Ast.TyNil _), t) |
14660 Ast.TyOr (_, t, (Ast.TyNil _)) |
14661 Ast.TyOf (_, t, (Ast.TyNil _)) |
14662 Ast.TyAnd (_, (Ast.TyNil _), t) |
14663 Ast.TyAnd (_, t, (Ast.TyNil _)) |
14664 Ast.TySem (_, t, (Ast.TyNil _)) |
14665 Ast.TySem (_, (Ast.TyNil _), t) |
14666 Ast.TyCom (_, (Ast.TyNil _), t) |
14667 Ast.TyCom (_, t, (Ast.TyNil _)) |
14668 Ast.TyAmp (_, t, (Ast.TyNil _)) |
14669 Ast.TyAmp (_, (Ast.TyNil _), t) |
14670 Ast.TySta (_, (Ast.TyNil _), t) |
14671 Ast.TySta (_, t, (Ast.TyNil _)) -> t
14676 match super#sig_item sg with
14677 | Ast.SgSem (_, (Ast.SgNil _), sg) |
14678 Ast.SgSem (_, sg, (Ast.SgNil _)) -> sg
14679 | Ast.SgTyp (loc, (Ast.TyNil _)) -> Ast.SgNil loc
14684 match super#str_item st with
14685 | Ast.StSem (_, (Ast.StNil _), st) |
14686 Ast.StSem (_, st, (Ast.StNil _)) -> st
14687 | Ast.StTyp (loc, (Ast.TyNil _)) -> Ast.StNil loc
14688 | Ast.StVal (loc, _, (Ast.BiNil _)) -> Ast.StNil loc
14691 method module_type =
14693 match super#module_type mt with
14694 | Ast.MtWit (_, mt, (Ast.WcNil _)) -> mt
14697 method class_expr =
14699 match super#class_expr ce with
14700 | Ast.CeAnd (_, (Ast.CeNil _), ce) |
14701 Ast.CeAnd (_, ce, (Ast.CeNil _)) -> ce
14704 method class_type =
14706 match super#class_type ct with
14707 | Ast.CtAnd (_, (Ast.CtNil _), ct) |
14708 Ast.CtAnd (_, ct, (Ast.CtNil _)) -> ct
14711 method class_sig_item =
14713 match super#class_sig_item csg with
14714 | Ast.CgSem (_, (Ast.CgNil _), csg) |
14715 Ast.CgSem (_, csg, (Ast.CgNil _)) -> csg
14718 method class_str_item =
14720 match super#class_str_item cst with
14721 | Ast.CrSem (_, (Ast.CrNil _), cst) |
14722 Ast.CrSem (_, cst, (Ast.CrNil _)) -> cst
14731 module CommentFilter :
14733 module Make (Token : Sig.Camlp4Token) :
14741 val define : Token.Filter.t -> t -> unit
14744 t -> (Token.t * Loc.t) Stream.t -> (Token.t * Loc.t) Stream.t
14746 val take_list : t -> (string * Loc.t) list
14748 val take_stream : t -> (string * Loc.t) Stream.t
14754 module Make (Token : Sig.Camlp4Token) =
14759 (((string * Loc.t) Stream.t) * ((string * Loc.t) Queue.t))
14762 let q = Queue.create () in
14763 let f _ = try Some (Queue.take q) with | Queue.Empty -> None
14764 in ((Stream.from f), q)
14766 let filter (_, q) =
14767 let rec self (__strm : _ Stream.t) =
14768 match Stream.peek __strm with
14769 | Some ((Sig.COMMENT x, loc)) ->
14770 (Stream.junk __strm;
14771 let xs = __strm in (Queue.add (x, loc) q; self xs))
14773 (Stream.junk __strm;
14775 in Stream.icons x (Stream.slazy (fun _ -> self xs)))
14776 | _ -> Stream.sempty
14779 let take_list (_, q) =
14780 let rec self accu =
14781 if Queue.is_empty q
14783 else self ((Queue.take q) :: accu)
14786 let take_stream = fst
14788 let define token_fiter comments_strm =
14789 Token.Filter.define_filter token_fiter
14790 (fun previous strm -> previous (filter comments_strm strm))
14796 module DynLoader : sig include Sig.DynLoader
14799 type t = string Queue.t
14801 exception Error of string * string
14803 let include_dir x y = Queue.add y x
14805 let fold_load_path x f acc = Queue.fold (fun x y -> f y x) acc x
14807 let mk ?(ocaml_stdlib = true) ?(camlp4_stdlib = true) () =
14808 let q = Queue.create ()
14811 then include_dir q Camlp4_config.ocaml_standard_library
14815 (include_dir q Camlp4_config.camlp4_standard_library;
14817 (Filename.concat Camlp4_config.camlp4_standard_library
14820 (Filename.concat Camlp4_config.camlp4_standard_library
14823 (Filename.concat Camlp4_config.camlp4_standard_library
14829 let find_in_path x name =
14830 if not (Filename.is_implicit name)
14831 then if Sys.file_exists name then name else raise Not_found
14838 let fullname = Filename.concat dir name
14840 if Sys.file_exists fullname
14845 in match res with | None -> raise Not_found | Some x -> x)
14848 let _initialized = ref false
14851 (if not !_initialized
14855 Dynlink.allow_unsafe_modules true;
14856 _initialized := true)
14858 | Dynlink.Error e ->
14860 (Error ("Camlp4's dynamic loader initialization",
14861 Dynlink.error_message e)))
14864 try find_in_path _path file
14867 raise (Error (file, "file not found in path"))
14869 try Dynlink.loadfile fname
14871 | Dynlink.Error e ->
14872 raise (Error (fname, Dynlink.error_message e)))
14874 let is_native = Dynlink.is_native
14878 module EmptyError : sig include Sig.Error
14885 let print _ = assert false
14887 let to_string _ = assert false
14891 module EmptyPrinter :
14892 sig module Make (Ast : Sig.Ast) : Sig.Printer(Ast).S
14895 module Make (Ast : Sig.Ast) =
14897 let print_interf ?input_file:(_) ?output_file:(_) _ =
14898 failwith "No interface printer"
14900 let print_implem ?input_file:(_) ?output_file:(_) _ =
14901 failwith "No implementation printer"
14909 module Make (Ast : Sig.Camlp4Ast) :
14911 module S : Set.S with type elt = string
14913 val fold_binding_vars :
14914 (string -> 'accu -> 'accu) -> Ast.binding -> 'accu -> 'accu
14916 class ['accu] c_fold_pattern_vars :
14917 (string -> 'accu -> 'accu) ->
14919 object inherit Ast.fold
14925 val fold_pattern_vars :
14926 (string -> 'accu -> 'accu) -> Ast.patt -> 'accu -> 'accu
14928 class ['accu] fold_free_vars :
14929 (string -> 'accu -> 'accu) ->
14932 object ('self_type)
14939 method free : 'accu
14941 method set_env : S.t -> 'self_type
14943 method add_atom : string -> 'self_type
14945 method add_patt : Ast.patt -> 'self_type
14947 method add_binding : Ast.binding -> 'self_type
14951 val free_vars : S.t -> Ast.expr -> S.t
14957 module Make (Ast : Sig.Camlp4Ast) =
14959 module S = Set.Make(String)
14961 class ['accu] c_fold_pattern_vars f init =
14962 object inherit Ast.fold as super
14966 method acc : 'accu = acc
14970 | Ast.PaId (_, (Ast.IdLid (_, s))) |
14971 Ast.PaLab (_, s, (Ast.PaNil _)) |
14972 Ast.PaOlb (_, s, (Ast.PaNil _)) -> {< acc = f s acc; >}
14973 | p -> super#patt p
14977 let fold_pattern_vars f p init =
14978 ((new c_fold_pattern_vars f init)#patt p)#acc
14980 let rec fold_binding_vars f bi acc =
14982 | Ast.BiAnd (_, bi1, bi2) ->
14983 fold_binding_vars f bi1 (fold_binding_vars f bi2 acc)
14984 | Ast.BiEq (_, p, _) -> fold_pattern_vars f p acc
14985 | Ast.BiNil _ -> acc
14986 | Ast.BiAnt (_, _) -> assert false
14988 class ['accu] fold_free_vars (f : string -> 'accu -> 'accu)
14989 ?(env_init = S.empty) free_init =
14991 inherit Ast.fold as super
14993 val free = (free_init : 'accu)
14995 val env = (env_init : S.t)
14999 method set_env = fun env -> {< env = env; >}
15001 method add_atom = fun s -> {< env = S.add s env; >}
15004 fun p -> {< env = fold_pattern_vars S.add p env; >}
15006 method add_binding =
15007 fun bi -> {< env = fold_binding_vars S.add bi env; >}
15011 | Ast.ExId (_, (Ast.IdLid (_, s))) |
15012 Ast.ExLab (_, s, (Ast.ExNil _)) |
15013 Ast.ExOlb (_, s, (Ast.ExNil _)) ->
15014 if S.mem s env then o else {< free = f s free; >}
15015 | Ast.ExLet (_, Ast.BFalse, bi, e) ->
15016 (((o#add_binding bi)#expr e)#set_env env)#binding bi
15017 | Ast.ExLet (_, Ast.BTrue, bi, e) ->
15018 (((o#add_binding bi)#expr e)#binding bi)#set_env env
15019 | Ast.ExFor (_, s, e1, e2, _, e3) ->
15020 ((((o#expr e1)#expr e2)#add_atom s)#expr e3)#set_env
15022 | Ast.ExId (_, _) | Ast.ExNew (_, _) -> o
15023 | Ast.ExObj (_, p, cst) ->
15024 ((o#add_patt p)#class_str_item cst)#set_env env
15025 | e -> super#expr e
15027 method match_case =
15029 | Ast.McArr (_, p, e1, e2) ->
15030 (((o#add_patt p)#expr e1)#expr e2)#set_env env
15031 | m -> super#match_case m
15035 | Ast.StExt (_, s, t, _) -> (o#ctyp t)#add_atom s
15036 | Ast.StVal (_, Ast.BFalse, bi) ->
15037 (o#binding bi)#add_binding bi
15038 | Ast.StVal (_, Ast.BTrue, bi) ->
15039 (o#add_binding bi)#binding bi
15040 | st -> super#str_item st
15042 method class_expr =
15044 | Ast.CeFun (_, p, ce) ->
15045 ((o#add_patt p)#class_expr ce)#set_env env
15046 | Ast.CeLet (_, Ast.BFalse, bi, ce) ->
15047 (((o#binding bi)#add_binding bi)#class_expr ce)#set_env
15049 | Ast.CeLet (_, Ast.BTrue, bi, ce) ->
15050 (((o#add_binding bi)#binding bi)#class_expr ce)#set_env
15052 | Ast.CeStr (_, p, cst) ->
15053 ((o#add_patt p)#class_str_item cst)#set_env env
15054 | ce -> super#class_expr ce
15056 method class_str_item =
15058 | (Ast.CrInh (_, _, "") as cst) -> super#class_str_item cst
15059 | Ast.CrInh (_, ce, s) -> (o#class_expr ce)#add_atom s
15060 | Ast.CrVal (_, s, _, e) -> (o#expr e)#add_atom s
15061 | Ast.CrVvr (_, s, _, t) -> (o#ctyp t)#add_atom s
15062 | cst -> super#class_str_item cst
15064 method module_expr =
15066 | Ast.MeStr (_, st) -> (o#str_item st)#set_env env
15067 | me -> super#module_expr me
15071 let free_vars env_init e =
15072 let fold = new fold_free_vars S.add ~env_init S.empty
15073 in (fold#expr e)#free
15085 module Token : Sig.Token
15091 val call_with_ctx :
15092 (Token.t * Loc.t) Stream.t -> (t -> 'a) -> 'a
15094 val loc_bp : t -> Loc.t
15096 val loc_ep : t -> Loc.t
15098 val stream : t -> (Token.t * Loc.t) Stream.t
15100 val peek_nth : t -> int -> (Token.t * Loc.t) option
15102 val njunk : t -> int -> unit
15104 val junk : (Token.t * Loc.t) Stream.t -> unit
15106 val bp : (Token.t * Loc.t) Stream.t -> Loc.t
15110 module Make (Token : Sig.Token) : S with module Token = Token =
15112 module Token = Token
15117 { mutable strm : (Token.t * Loc.t) Stream.t;
15118 mutable loc : Loc.t
15122 match Stream.peek c.strm with
15123 | None -> Loc.ghost
15124 | Some ((_, loc)) -> loc
15126 let loc_ep c = c.loc
15129 match Stream.peek c.strm with
15130 | Some ((_, loc)) -> c.loc <- loc
15134 match Stream.peek strm with
15135 | Some ((_, loc)) -> { strm = strm; loc = loc; }
15136 | None -> { strm = strm; loc = Loc.ghost; }
15138 let stream c = c.strm
15141 let list = Stream.npeek n c.strm in
15142 let rec loop list n =
15143 match (list, n) with
15144 | ((((_, loc) as x)) :: _, 1) -> (c.loc <- loc; Some x)
15145 | (_ :: l, n) -> loop l (n - 1)
15150 (for i = 1 to n do Stream.junk c.strm done; set_loc c)
15152 let streams = ref []
15156 let () = streams := (strm, c) :: !streams in c
15159 (set_loc (List.assq strm !streams); Stream.junk strm)
15161 let bp strm = loc_bp (List.assq strm !streams)
15163 let call_with_ctx strm f =
15164 let streams_v = !streams in
15167 with | exc -> (streams := streams_v; raise exc)
15168 in (streams := streams_v; r)
15180 module Loc : Sig.Loc
15182 module Token : Sig.Token with module Loc = Loc
15184 module Lexer : Sig.Lexer with module Loc = Loc
15185 and module Token = Token
15187 module Context : Context.S with module Token = Token
15189 module Action : Sig.Grammar.Action
15192 { gfilter : Token.Filter.t;
15193 gkeywords : (string, int ref) Hashtbl.t;
15195 Loc.t -> char Stream.t -> (Token.t * Loc.t) Stream.t;
15196 warning_verbose : bool ref; error_verbose : bool ref
15200 Context.t -> (Token.t * Loc.t) Stream.t -> Action.t
15202 type token_pattern = ((Token.t -> bool) * string)
15204 type internal_entry =
15205 { egram : gram; ename : string;
15206 mutable estart : int -> efun;
15207 mutable econtinue : int -> Loc.t -> Action.t -> efun;
15208 mutable edesc : desc
15211 | Dlevels of level list
15212 | Dparser of ((Token.t * Loc.t) Stream.t -> Action.t)
15214 { assoc : assoc; lname : string option; lsuffix : tree;
15218 | Smeta of string * symbol list * Action.t
15219 | Snterm of internal_entry
15220 | Snterml of internal_entry * string
15222 | Slist0sep of symbol * symbol
15224 | Slist1sep of symbol * symbol
15228 | Stoken of token_pattern
15229 | Skeyword of string
15233 | LocAct of Action.t * Action.t list
15236 { node : symbol; son : tree; brother : tree
15239 type production_rule = ((symbol list) * Action.t)
15241 type single_extend_statment =
15242 ((string option) * (assoc option) * (production_rule list))
15244 type extend_statment =
15245 ((position option) * (single_extend_statment list))
15247 type delete_statment = symbol list
15249 type ('a, 'b, 'c) fold =
15251 symbol list -> ('a Stream.t -> 'b) -> 'a Stream.t -> 'c
15253 type ('a, 'b, 'c) foldsep =
15256 ('a Stream.t -> 'b) ->
15257 ('a Stream.t -> unit) -> 'a Stream.t -> 'c
15259 val get_filter : gram -> Token.Filter.t
15261 val using : gram -> string -> unit
15263 val removing : gram -> string -> unit
15267 module Make (Lexer : Sig.Lexer) =
15269 module Loc = Lexer.Loc
15271 module Token = Lexer.Token
15273 module Action : Sig.Grammar.Action =
15283 let getf2 = Obj.obj
15287 module Lexer = Lexer
15290 { gfilter : Token.Filter.t;
15291 gkeywords : (string, int ref) Hashtbl.t;
15293 Loc.t -> char Stream.t -> (Token.t * Loc.t) Stream.t;
15294 warning_verbose : bool ref; error_verbose : bool ref
15297 module Context = Context.Make(Token)
15300 Context.t -> (Token.t * Loc.t) Stream.t -> Action.t
15302 type token_pattern = ((Token.t -> bool) * string)
15304 type internal_entry =
15305 { egram : gram; ename : string;
15306 mutable estart : int -> efun;
15307 mutable econtinue : int -> Loc.t -> Action.t -> efun;
15308 mutable edesc : desc
15311 | Dlevels of level list
15312 | Dparser of ((Token.t * Loc.t) Stream.t -> Action.t)
15314 { assoc : assoc; lname : string option; lsuffix : tree;
15318 | Smeta of string * symbol list * Action.t
15319 | Snterm of internal_entry
15320 | Snterml of internal_entry * string
15322 | Slist0sep of symbol * symbol
15324 | Slist1sep of symbol * symbol
15328 | Stoken of token_pattern
15329 | Skeyword of string
15333 | LocAct of Action.t * Action.t list
15336 { node : symbol; son : tree; brother : tree
15339 type production_rule = ((symbol list) * Action.t)
15341 type single_extend_statment =
15342 ((string option) * (assoc option) * (production_rule list))
15344 type extend_statment =
15345 ((position option) * (single_extend_statment list))
15347 type delete_statment = symbol list
15349 type ('a, 'b, 'c) fold =
15351 symbol list -> ('a Stream.t -> 'b) -> 'a Stream.t -> 'c
15353 type ('a, 'b, 'c) foldsep =
15356 ('a Stream.t -> 'b) ->
15357 ('a Stream.t -> unit) -> 'a Stream.t -> 'c
15359 let get_filter g = g.gfilter
15361 type 'a not_filtered = 'a
15363 let using { gkeywords = table; gfilter = filter } kwd =
15365 try Hashtbl.find table kwd
15368 let r = ref 0 in (Hashtbl.add table kwd r; r)
15369 in (Token.Filter.keyword_added filter kwd (!r = 0); incr r)
15371 let removing { gkeywords = table; gfilter = filter } kwd =
15372 let r = Hashtbl.find table kwd in
15377 (Token.Filter.keyword_removed filter kwd;
15378 Hashtbl.remove table kwd)
15387 module Make (Structure : Structure.S) =
15391 let tree_in_entry prev_symb tree =
15393 | Dlevels levels ->
15394 let rec search_levels =
15397 | level :: levels ->
15398 (match search_level level with
15399 | Some tree -> tree
15400 | None -> search_levels levels))
15401 and search_level level =
15402 (match search_tree level.lsuffix with
15406 { node = Sself; son = t; brother = DeadEnd;
15408 | None -> search_tree level.lprefix)
15409 and search_tree t =
15410 if (tree <> DeadEnd) && (t == tree)
15415 (match search_symbol n.node with
15425 (match search_tree n.son with
15434 | None -> search_tree n.brother))
15435 | LocAct (_, _) | DeadEnd -> None)
15436 and search_symbol symb =
15438 | Snterm _ | Snterml (_, _) | Slist0 _ |
15439 Slist0sep (_, _) | Slist1 _ | Slist1sep (_, _) |
15440 Sopt _ | Stoken _ | Stree _ | Skeyword _ when
15441 symb == prev_symb -> Some symb
15443 (match search_symbol symb with
15444 | Some symb -> Some (Slist0 symb)
15446 | Slist0sep (symb, sep) ->
15447 (match search_symbol symb with
15448 | Some symb -> Some (Slist0sep (symb, sep))
15450 (match search_symbol sep with
15451 | Some sep -> Some (Slist0sep (symb, sep))
15454 (match search_symbol symb with
15455 | Some symb -> Some (Slist1 symb)
15457 | Slist1sep (symb, sep) ->
15458 (match search_symbol symb with
15459 | Some symb -> Some (Slist1sep (symb, sep))
15461 (match search_symbol sep with
15462 | Some sep -> Some (Slist1sep (symb, sep))
15465 (match search_symbol symb with
15466 | Some symb -> Some (Sopt symb)
15469 (match search_tree t with
15470 | Some t -> Some (Stree t)
15473 in search_levels levels
15474 | Dparser _ -> tree
15482 module Make (Structure : Structure.S) =
15486 let empty_entry ename _ _ _ =
15487 raise (Stream.Error ("entry [" ^ (ename ^ "] is empty")))
15489 let is_level_labelled n lev =
15490 match lev.lname with | Some n1 -> n = n1 | None -> false
15492 let warning_verbose = ref true
15494 let rec get_token_list entry tokl last_tok tree =
15498 node = (Stoken _ | Skeyword _ as tok);
15501 } -> get_token_list entry (last_tok :: tokl) tok son
15507 (((List.rev (last_tok :: tokl)), last_tok, tree))
15509 let is_antiquot s =
15510 let len = String.length s in (len > 1) && (s.[0] = '$')
15512 let eq_Stoken_ids s1 s2 =
15513 (not (is_antiquot s1)) &&
15514 ((not (is_antiquot s2)) && (s1 = s2))
15516 let logically_eq_symbols entry =
15517 let rec eq_symbols s1 s2 =
15518 match (s1, s2) with
15519 | (Snterm e1, Snterm e2) -> e1.ename = e2.ename
15520 | (Snterm e1, Sself) -> e1.ename = entry.ename
15521 | (Sself, Snterm e2) -> entry.ename = e2.ename
15522 | (Snterml (e1, l1), Snterml (e2, l2)) ->
15523 (e1.ename = e2.ename) && (l1 = l2)
15524 | (Slist0 s1, Slist0 s2) -> eq_symbols s1 s2
15525 | (Slist0sep (s1, sep1), Slist0sep (s2, sep2)) ->
15526 (eq_symbols s1 s2) && (eq_symbols sep1 sep2)
15527 | (Slist1 s1, Slist1 s2) -> eq_symbols s1 s2
15528 | (Slist1sep (s1, sep1), Slist1sep (s2, sep2)) ->
15529 (eq_symbols s1 s2) && (eq_symbols sep1 sep2)
15530 | (Sopt s1, Sopt s2) -> eq_symbols s1 s2
15531 | (Stree t1, Stree t2) -> eq_trees t1 t2
15532 | (Stoken ((_, s1)), Stoken ((_, s2))) ->
15533 eq_Stoken_ids s1 s2
15535 and eq_trees t1 t2 =
15536 match (t1, t2) with
15537 | (Node n1, Node n2) ->
15538 (eq_symbols n1.node n2.node) &&
15539 ((eq_trees n1.son n2.son) &&
15540 (eq_trees n1.brother n2.brother))
15541 | ((LocAct (_, _) | DeadEnd), (LocAct (_, _) | DeadEnd))
15546 let rec eq_symbol s1 s2 =
15547 match (s1, s2) with
15548 | (Snterm e1, Snterm e2) -> e1 == e2
15549 | (Snterml (e1, l1), Snterml (e2, l2)) ->
15550 (e1 == e2) && (l1 = l2)
15551 | (Slist0 s1, Slist0 s2) -> eq_symbol s1 s2
15552 | (Slist0sep (s1, sep1), Slist0sep (s2, sep2)) ->
15553 (eq_symbol s1 s2) && (eq_symbol sep1 sep2)
15554 | (Slist1 s1, Slist1 s2) -> eq_symbol s1 s2
15555 | (Slist1sep (s1, sep1), Slist1sep (s2, sep2)) ->
15556 (eq_symbol s1 s2) && (eq_symbol sep1 sep2)
15557 | (Sopt s1, Sopt s2) -> eq_symbol s1 s2
15558 | (Stree _, Stree _) -> false
15559 | (Stoken ((_, s1)), Stoken ((_, s2))) ->
15560 eq_Stoken_ids s1 s2
15569 module Make (Structure : Structure.S) :
15572 Structure.tree -> (Structure.symbol list) list
15575 Format.formatter -> Structure.symbol -> unit
15578 Format.formatter -> string -> Structure.symbol list -> unit
15580 val print_symbol1 :
15581 Format.formatter -> Structure.symbol -> unit
15584 Format.formatter -> Structure.symbol list -> unit
15587 Format.formatter ->
15588 (Format.formatter -> unit -> unit) ->
15589 (Structure.symbol list) list -> unit
15591 val levels : Format.formatter -> Structure.level list -> unit
15594 Format.formatter -> Structure.internal_entry -> unit
15598 module MakeDump (Structure : Structure.S) :
15601 Format.formatter -> Structure.symbol -> unit
15604 Format.formatter -> string -> Structure.symbol list -> unit
15606 val print_symbol1 :
15607 Format.formatter -> Structure.symbol -> unit
15610 Format.formatter -> Structure.symbol list -> unit
15613 Format.formatter ->
15614 (Format.formatter -> unit -> unit) ->
15615 (Structure.symbol list) list -> unit
15617 val levels : Format.formatter -> Structure.level list -> unit
15620 Format.formatter -> Structure.internal_entry -> unit
15626 module Make (Structure : Structure.S) =
15634 let rec flatten_tree =
15637 | LocAct (_, _) -> [ [] ]
15638 | Node { node = n; brother = b; son = s } ->
15639 (List.map (fun l -> n :: l) (flatten_tree s)) @
15642 let rec print_symbol ppf =
15644 | Smeta (n, sl, _) -> print_meta ppf n sl
15645 | Slist0 s -> fprintf ppf "LIST0 %a" print_symbol1 s
15646 | Slist0sep (s, t) ->
15647 fprintf ppf "LIST0 %a SEP %a" print_symbol1 s
15649 | Slist1 s -> fprintf ppf "LIST1 %a" print_symbol1 s
15650 | Slist1sep (s, t) ->
15651 fprintf ppf "LIST1 %a SEP %a" print_symbol1 s
15653 | Sopt s -> fprintf ppf "OPT %a" print_symbol1 s
15654 | Snterml (e, l) -> fprintf ppf "%s@ LEVEL@ %S" e.ename l
15655 | (Snterm _ | Snext | Sself | Stree _ | Stoken _ |
15657 as s) -> print_symbol1 ppf s
15658 and print_meta ppf n sl =
15664 (try String.index_from n i ' '
15665 with | Not_found -> String.length n)
15667 (fprintf ppf "%s %a" (String.sub n i (j - i))
15673 loop (min (j + 1) (String.length n)) sl))
15675 and print_symbol1 ppf =
15677 | Snterm e -> pp_print_string ppf e.ename
15678 | Sself -> pp_print_string ppf "SELF"
15679 | Snext -> pp_print_string ppf "NEXT"
15680 | Stoken ((_, descr)) -> pp_print_string ppf descr
15681 | Skeyword s -> fprintf ppf "%S" s
15683 print_level ppf pp_print_space (flatten_tree t)
15684 | (Smeta (_, _, _) | Snterml (_, _) | Slist0 _ |
15685 Slist0sep (_, _) | Slist1 _ | Slist1sep (_, _) |
15687 as s) -> fprintf ppf "(%a)" print_symbol s
15688 and print_rule ppf symbols =
15689 (fprintf ppf "@[<hov 0>";
15693 (fprintf ppf "%t%a" sep print_symbol symbol;
15694 fun ppf -> fprintf ppf ";@ "))
15695 (fun _ -> ()) symbols
15696 in fprintf ppf "@]")
15697 and print_level ppf pp_print_space rules =
15698 (fprintf ppf "@[<hov 0>[ ";
15702 (fprintf ppf "%t%a" sep print_rule rule;
15703 fun ppf -> fprintf ppf "%a| " pp_print_space ()))
15704 (fun _ -> ()) rules
15705 in fprintf ppf " ]@]")
15707 let levels ppf elev =
15712 (List.map (fun t -> Sself :: t)
15713 (flatten_tree lev.lsuffix))
15714 @ (flatten_tree lev.lprefix)
15716 (fprintf ppf "%t@[<hov 2>" sep;
15717 (match lev.lname with
15718 | Some n -> fprintf ppf "%S@;<1 2>" n
15720 (match lev.assoc with
15721 | LeftA -> fprintf ppf "LEFTA"
15722 | RightA -> fprintf ppf "RIGHTA"
15723 | NonA -> fprintf ppf "NONA");
15724 fprintf ppf "@]@;<1 2>";
15725 print_level ppf pp_force_newline rules;
15726 fun ppf -> fprintf ppf "@,| "))
15731 (fprintf ppf "@[<v 0>%s: [ " e.ename;
15732 (match e.edesc with
15733 | Dlevels elev -> levels ppf elev
15734 | Dparser _ -> fprintf ppf "<parser>");
15735 fprintf ppf " ]@]")
15739 module MakeDump (Structure : Structure.S) =
15747 type brothers = | Bro of symbol * brothers list
15749 let rec print_tree ppf tree =
15750 let rec get_brothers acc =
15752 | DeadEnd -> List.rev acc
15753 | LocAct (_, _) -> List.rev acc
15754 | Node { node = n; brother = b; son = s } ->
15755 get_brothers ((Bro (n, get_brothers [] s)) :: acc) b
15756 and print_brothers ppf brothers =
15758 then fprintf ppf "@ []"
15763 (fprintf ppf "@ @[<hv2>- %a" print_symbol n;
15768 print_children ppf (get_children [] xs)
15771 fprintf ppf ":%a" print_brothers xs)
15772 | _ -> fprintf ppf ":%a" print_brothers xs);
15775 and print_children ppf =
15776 List.iter (fprintf ppf ";@ %a" print_symbol)
15777 and get_children acc =
15779 | [] -> List.rev acc
15780 | [ Bro (n, x) ] -> get_children (n :: acc) x
15782 in print_brothers ppf (get_brothers [] tree)
15783 and print_symbol ppf =
15785 | Smeta (n, sl, _) -> print_meta ppf n sl
15786 | Slist0 s -> fprintf ppf "LIST0 %a" print_symbol1 s
15787 | Slist0sep (s, t) ->
15788 fprintf ppf "LIST0 %a SEP %a" print_symbol1 s
15790 | Slist1 s -> fprintf ppf "LIST1 %a" print_symbol1 s
15791 | Slist1sep (s, t) ->
15792 fprintf ppf "LIST1 %a SEP %a" print_symbol1 s
15794 | Sopt s -> fprintf ppf "OPT %a" print_symbol1 s
15795 | Snterml (e, l) -> fprintf ppf "%s@ LEVEL@ %S" e.ename l
15796 | (Snterm _ | Snext | Sself | Stree _ | Stoken _ |
15798 as s) -> print_symbol1 ppf s
15799 and print_meta ppf n sl =
15805 (try String.index_from n i ' '
15806 with | Not_found -> String.length n)
15808 (fprintf ppf "%s %a" (String.sub n i (j - i))
15814 loop (min (j + 1) (String.length n)) sl))
15816 and print_symbol1 ppf =
15818 | Snterm e -> pp_print_string ppf e.ename
15819 | Sself -> pp_print_string ppf "SELF"
15820 | Snext -> pp_print_string ppf "NEXT"
15821 | Stoken ((_, descr)) -> pp_print_string ppf descr
15822 | Skeyword s -> fprintf ppf "%S" s
15823 | Stree t -> print_tree ppf t
15824 | (Smeta (_, _, _) | Snterml (_, _) | Slist0 _ |
15825 Slist0sep (_, _) | Slist1 _ | Slist1sep (_, _) |
15827 as s) -> fprintf ppf "(%a)" print_symbol s
15828 and print_rule ppf symbols =
15829 (fprintf ppf "@[<hov 0>";
15833 (fprintf ppf "%t%a" sep print_symbol symbol;
15834 fun ppf -> fprintf ppf ";@ "))
15835 (fun _ -> ()) symbols
15836 in fprintf ppf "@]")
15837 and print_level ppf pp_print_space rules =
15838 (fprintf ppf "@[<hov 0>[ ";
15842 (fprintf ppf "%t%a" sep print_rule rule;
15843 fun ppf -> fprintf ppf "%a| " pp_print_space ()))
15844 (fun _ -> ()) rules
15845 in fprintf ppf " ]@]")
15847 let levels ppf elev =
15851 (fprintf ppf "%t@[<v2>" sep;
15852 (match lev.lname with
15853 | Some n -> fprintf ppf "%S@;<1 2>" n
15855 (match lev.assoc with
15856 | LeftA -> fprintf ppf "LEFTA"
15857 | RightA -> fprintf ppf "RIGHTA"
15858 | NonA -> fprintf ppf "NONA");
15859 fprintf ppf "@]@;<1 2>";
15860 fprintf ppf "@[<v2>suffix:@ ";
15861 print_tree ppf lev.lsuffix;
15862 fprintf ppf "@]@ @[<v2>prefix:@ ";
15863 print_tree ppf lev.lprefix;
15865 fun ppf -> fprintf ppf "@,| "))
15870 (fprintf ppf "@[<v 0>%s: [ " e.ename;
15871 (match e.edesc with
15872 | Dlevels elev -> levels ppf elev
15873 | Dparser _ -> fprintf ppf "<parser>");
15874 fprintf ppf " ]@]")
15882 module Make (Structure : Structure.S) =
15884 module Tools = Tools.Make(Structure)
15886 module Search = Search.Make(Structure)
15888 module Print = Print.Make(Structure)
15894 let rec name_of_symbol entry =
15896 | Snterm e -> "[" ^ (e.ename ^ "]")
15897 | Snterml (e, l) ->
15898 "[" ^ (e.ename ^ (" level " ^ (l ^ "]")))
15899 | Sself | Snext -> "[" ^ (entry.ename ^ "]")
15900 | Stoken ((_, descr)) -> descr
15901 | Skeyword kwd -> "\"" ^ (kwd ^ "\"")
15904 let rec name_of_symbol_failed entry =
15906 | Slist0 s -> name_of_symbol_failed entry s
15907 | Slist0sep (s, _) -> name_of_symbol_failed entry s
15908 | Slist1 s -> name_of_symbol_failed entry s
15909 | Slist1sep (s, _) -> name_of_symbol_failed entry s
15910 | Sopt s -> name_of_symbol_failed entry s
15911 | Stree t -> name_of_tree_failed entry t
15912 | s -> name_of_symbol entry s
15913 and name_of_tree_failed entry =
15915 | Node { node = s; brother = bro; son = son } ->
15918 | Stoken _ | Skeyword _ ->
15919 Tools.get_token_list entry [] s son
15924 let txt = name_of_symbol_failed entry s in
15926 (match (s, son) with
15927 | (Sopt _, Node _) ->
15930 (name_of_tree_failed entry son))
15934 | DeadEnd | LocAct (_, _) -> txt
15938 (name_of_tree_failed entry bro)))
15940 | Some ((tokl, _, _)) ->
15943 (if s = "" then "" else s ^ " then ") ^
15945 | Stoken ((_, descr)) -> descr
15946 | Skeyword kwd -> kwd
15947 | _ -> assert false))
15949 | DeadEnd | LocAct (_, _) -> "???"
15951 let magic _s x = Obj.magic x
15953 let tree_failed entry prev_symb_result prev_symb tree =
15954 let txt = name_of_tree_failed entry tree in
15956 match prev_symb with
15958 let txt1 = name_of_symbol_failed entry s
15959 in txt1 ^ (" or " ^ (txt ^ " expected"))
15961 let txt1 = name_of_symbol_failed entry s
15962 in txt1 ^ (" or " ^ (txt ^ " expected"))
15963 | Slist0sep (s, sep) ->
15964 (match magic "tree_failed: 'a -> list 'b"
15968 let txt1 = name_of_symbol_failed entry s
15969 in txt1 ^ (" or " ^ (txt ^ " expected"))
15971 let txt1 = name_of_symbol_failed entry sep
15972 in txt1 ^ (" or " ^ (txt ^ " expected")))
15973 | Slist1sep (s, sep) ->
15974 (match magic "tree_failed: 'a -> list 'b"
15978 let txt1 = name_of_symbol_failed entry s
15979 in txt1 ^ (" or " ^ (txt ^ " expected"))
15981 let txt1 = name_of_symbol_failed entry sep
15982 in txt1 ^ (" or " ^ (txt ^ " expected")))
15983 | Sopt _ | Stree _ -> txt ^ " expected"
15986 (" expected after " ^
15987 (name_of_symbol entry prev_symb))
15989 (if !(entry.egram.error_verbose)
15992 Search.tree_in_entry prev_symb tree entry.edesc in
15993 let ppf = err_formatter
15995 (fprintf ppf "@[<v 0>@,";
15996 fprintf ppf "----------------------------------@,";
15998 "Parse error in entry [%s], rule:@;<0 2>"
16001 Print.print_level ppf pp_force_newline
16002 (Print.flatten_tree tree);
16003 fprintf ppf "@]@,";
16004 fprintf ppf "----------------------------------@,";
16005 fprintf ppf "@]@."))
16007 txt ^ (" (in [" ^ (entry.ename ^ "])")))
16009 let symb_failed entry prev_symb_result prev_symb symb =
16011 Node { node = symb; brother = DeadEnd; son = DeadEnd; }
16012 in tree_failed entry prev_symb_result prev_symb tree
16014 let symb_failed_txt e s1 s2 = symb_failed e 0 s1 s2
16022 module Make (Structure : Structure.S) =
16024 module Tools = Tools.Make(Structure)
16026 module Failed = Failed.Make(Structure)
16028 module Print = Print.Make(Structure)
16038 let junk strm = Context.junk strm
16040 let count strm = Context.bp strm
16044 let add_loc c bp parse_fun strm =
16045 let x = parse_fun c strm in
16046 let ep = Context.loc_ep c in
16047 let loc = Loc.merge bp ep in (x, loc)
16049 let level_number entry lab =
16050 let rec lookup levn =
16052 | [] -> failwith ("unknown level " ^ lab)
16054 if Tools.is_level_labelled lab lev
16056 else lookup (succ levn) levs
16058 match entry.edesc with
16059 | Dlevels elev -> lookup 0 elev
16060 | Dparser _ -> raise Not_found
16062 let strict_parsing = ref false
16064 let strict_parsing_warning = ref false
16066 let rec top_symb entry =
16068 | Sself | Snext -> Snterm entry
16069 | Snterml (e, _) -> Snterm e
16070 | Slist1sep (s, sep) -> Slist1sep (top_symb entry s, sep)
16071 | _ -> raise Stream.Failure
16073 let top_tree entry =
16075 | Node { node = s; brother = bro; son = son } ->
16077 { node = top_symb entry s; brother = bro; son = son;
16079 | LocAct (_, _) | DeadEnd -> raise Stream.Failure
16081 let entry_of_symb entry =
16083 | Sself | Snext -> entry
16085 | Snterml (e, _) -> e
16086 | _ -> raise Stream.Failure
16088 let continue entry loc a s c son p1 (__strm : _ Stream.t) =
16090 (entry_of_symb entry s).econtinue 0 loc a c __strm in
16094 | Stream.Failure ->
16096 (Stream.Error (Failed.tree_failed entry a s son))
16097 in Action.mk (fun _ -> Action.getf act a)
16099 let skip_if_empty c bp _ =
16100 if (Context.loc_bp c) = bp
16101 then Action.mk (fun _ -> raise Stream.Failure)
16102 else raise Stream.Failure
16104 let do_recover parser_of_tree entry nlevn alevn loc a s c son
16105 (__strm : _ Stream.t) =
16107 parser_of_tree entry nlevn alevn (top_tree entry son) c
16110 | Stream.Failure ->
16111 (try skip_if_empty c loc __strm
16113 | Stream.Failure ->
16114 continue entry loc a s c son
16115 (parser_of_tree entry nlevn alevn son c) __strm)
16117 let recover parser_of_tree entry nlevn alevn loc a s c son
16121 raise (Stream.Error (Failed.tree_failed entry a s son))
16124 if !strict_parsing_warning
16126 (let msg = Failed.tree_failed entry a s son
16129 "Warning: trying to recover from syntax error";
16130 if entry.ename <> ""
16131 then Format.eprintf " in [%s]" entry.ename
16133 Format.eprintf "\n%s%a@." msg Loc.print loc))
16136 do_recover parser_of_tree entry nlevn alevn loc a s c
16139 let rec parser_of_tree entry nlevn alevn =
16142 (fun _ (__strm : _ Stream.t) -> raise Stream.Failure)
16143 | LocAct (act, _) -> (fun _ (__strm : _ Stream.t) -> act)
16147 son = LocAct (act, _);
16150 (fun c (__strm : _ Stream.t) ->
16151 let a = entry.estart alevn c __strm
16152 in Action.getf act a)
16153 | Node { node = Sself; son = LocAct (act, _); brother = bro
16155 let p2 = parser_of_tree entry nlevn alevn bro
16157 (fun c (__strm : _ Stream.t) ->
16158 match try Some (entry.estart alevn c __strm)
16159 with | Stream.Failure -> None
16161 | Some a -> Action.getf act a
16162 | _ -> p2 c __strm)
16163 | Node { node = s; son = son; brother = DeadEnd } ->
16166 | Stoken _ | Skeyword _ ->
16167 Tools.get_token_list entry [] s son
16172 let ps = parser_of_symbol entry nlevn s in
16173 let p1 = parser_of_tree entry nlevn alevn son in
16174 let p1 = parser_cont p1 entry nlevn alevn s son
16176 (fun c (__strm : _ Stream.t) ->
16177 let bp = Stream.count __strm in
16178 let a = ps c __strm in
16180 try p1 c bp a __strm
16182 | Stream.Failure ->
16183 raise (Stream.Error "")
16184 in Action.getf act a)
16185 | Some ((tokl, last_tok, son)) ->
16186 let p1 = parser_of_tree entry nlevn alevn son in
16188 parser_cont p1 entry nlevn alevn last_tok son
16189 in parser_of_token_list p1 tokl)
16190 | Node { node = s; son = son; brother = bro } ->
16193 | Stoken _ | Skeyword _ ->
16194 Tools.get_token_list entry [] s son
16199 let ps = parser_of_symbol entry nlevn s in
16200 let p1 = parser_of_tree entry nlevn alevn son in
16202 parser_cont p1 entry nlevn alevn s son in
16203 let p2 = parser_of_tree entry nlevn alevn bro
16205 (fun c (__strm : _ Stream.t) ->
16206 let bp = Stream.count __strm
16208 match try Some (ps c __strm)
16209 with | Stream.Failure -> None
16213 (try p1 c bp a __strm
16215 | Stream.Failure ->
16216 raise (Stream.Error ""))
16217 in Action.getf act a
16218 | _ -> p2 c __strm)
16219 | Some ((tokl, last_tok, son)) ->
16220 let p1 = parser_of_tree entry nlevn alevn son in
16222 parser_cont p1 entry nlevn alevn last_tok son in
16223 let p1 = parser_of_token_list p1 tokl in
16224 let p2 = parser_of_tree entry nlevn alevn bro
16226 (fun c (__strm : _ Stream.t) ->
16228 with | Stream.Failure -> p2 c __strm))
16230 parser_cont p1 entry nlevn alevn s son c loc a
16231 (__strm : _ Stream.t) =
16234 | Stream.Failure ->
16236 recover parser_of_tree entry nlevn alevn loc a s c
16239 | Stream.Failure ->
16241 (Stream.Error (Failed.tree_failed entry a s son)))
16242 and parser_of_token_list p1 tokl =
16245 | Stoken ((tematch, _)) :: tokl ->
16249 (match Context.peek_nth c n with
16250 | Some ((tok, _)) when tematch tok ->
16251 (Context.njunk c n; Action.mk tok)
16252 | _ -> raise Stream.Failure)
16254 (fun c (__strm : _ Stream.t) ->
16255 let bp = Stream.count __strm in
16256 let a = ps c __strm in
16258 try p1 c bp a __strm
16260 | Stream.Failure ->
16261 raise (Stream.Error "")
16262 in Action.getf act a)
16265 (match Context.peek_nth c n with
16266 | Some ((tok, _)) when tematch tok -> tok
16267 | _ -> raise Stream.Failure) in
16268 let p1 = loop (n + 1) tokl
16270 (fun c (__strm : _ Stream.t) ->
16271 let tok = ps c __strm in
16273 let act = p1 c s in Action.getf act tok))
16274 | Skeyword kwd :: tokl ->
16278 (match Context.peek_nth c n with
16279 | Some ((tok, _)) when
16280 Token.match_keyword kwd tok ->
16281 (Context.njunk c n; Action.mk tok)
16282 | _ -> raise Stream.Failure)
16284 (fun c (__strm : _ Stream.t) ->
16285 let bp = Stream.count __strm in
16286 let a = ps c __strm in
16288 try p1 c bp a __strm
16290 | Stream.Failure ->
16291 raise (Stream.Error "")
16292 in Action.getf act a)
16295 (match Context.peek_nth c n with
16296 | Some ((tok, _)) when
16297 Token.match_keyword kwd tok -> tok
16298 | _ -> raise Stream.Failure) in
16299 let p1 = loop (n + 1) tokl
16301 (fun c (__strm : _ Stream.t) ->
16302 let tok = ps c __strm in
16304 let act = p1 c s in Action.getf act tok))
16305 | _ -> invalid_arg "parser_of_token_list"
16307 and parser_of_symbol entry nlevn =
16309 | Smeta (_, symbl, act) ->
16310 let act = Obj.magic act entry symbl in
16311 let pl = List.map (parser_of_symbol entry nlevn) symbl
16316 (fun act p -> Obj.magic act (p c)) act pl))
16318 let ps = parser_of_symbol entry nlevn s in
16319 let rec loop c al (__strm : _ Stream.t) =
16320 (match try Some (ps c __strm)
16321 with | Stream.Failure -> None
16323 | Some a -> loop c (a :: al) __strm
16326 (fun c (__strm : _ Stream.t) ->
16327 let a = loop c [] __strm in Action.mk (List.rev a))
16328 | Slist0sep (symb, sep) ->
16329 let ps = parser_of_symbol entry nlevn symb in
16330 let pt = parser_of_symbol entry nlevn sep in
16331 let rec kont c al (__strm : _ Stream.t) =
16332 (match try Some (pt c __strm)
16333 with | Stream.Failure -> None
16339 | Stream.Failure ->
16342 (Failed.symb_failed entry v sep symb)))
16343 in kont c (a :: al) __strm
16346 (fun c (__strm : _ Stream.t) ->
16347 match try Some (ps c __strm)
16348 with | Stream.Failure -> None
16352 in Action.mk (List.rev (kont c [ a ] s))
16353 | _ -> Action.mk [])
16355 let ps = parser_of_symbol entry nlevn s in
16356 let rec loop c al (__strm : _ Stream.t) =
16357 (match try Some (ps c __strm)
16358 with | Stream.Failure -> None
16360 | Some a -> loop c (a :: al) __strm
16363 (fun c (__strm : _ Stream.t) ->
16364 let a = ps c __strm in
16366 in Action.mk (List.rev (loop c [ a ] s)))
16367 | Slist1sep (symb, sep) ->
16368 let ps = parser_of_symbol entry nlevn symb in
16369 let pt = parser_of_symbol entry nlevn sep in
16370 let rec kont c al (__strm : _ Stream.t) =
16371 (match try Some (pt c __strm)
16372 with | Stream.Failure -> None
16378 | Stream.Failure ->
16379 (try parse_top_symb' entry symb c __strm
16381 | Stream.Failure ->
16384 (Failed.symb_failed entry v sep
16386 in kont c (a :: al) __strm
16389 (fun c (__strm : _ Stream.t) ->
16390 let a = ps c __strm in
16392 in Action.mk (List.rev (kont c [ a ] s)))
16394 let ps = parser_of_symbol entry nlevn s
16396 (fun c (__strm : _ Stream.t) ->
16397 match try Some (ps c __strm)
16398 with | Stream.Failure -> None
16400 | Some a -> Action.mk (Some a)
16401 | _ -> Action.mk None)
16403 let pt = parser_of_tree entry 1 0 t
16405 (fun c (__strm : _ Stream.t) ->
16406 let bp = Stream.count __strm in
16407 let (act, loc) = add_loc c bp pt __strm
16408 in Action.getf act loc)
16410 (fun c (__strm : _ Stream.t) -> e.estart 0 c __strm)
16411 | Snterml (e, l) ->
16412 (fun c (__strm : _ Stream.t) ->
16413 e.estart (level_number e l) c __strm)
16415 (fun c (__strm : _ Stream.t) -> entry.estart 0 c __strm)
16417 (fun c (__strm : _ Stream.t) ->
16418 entry.estart nlevn c __strm)
16420 (fun _ (__strm : _ Stream.t) ->
16421 match Stream.peek __strm with
16422 | Some ((tok, _)) when Token.match_keyword kwd tok
16423 -> (Stream.junk __strm; Action.mk tok)
16424 | _ -> raise Stream.Failure)
16425 | Stoken ((f, _)) ->
16426 (fun _ (__strm : _ Stream.t) ->
16427 match Stream.peek __strm with
16428 | Some ((tok, _)) when f tok ->
16429 (Stream.junk __strm; Action.mk tok)
16430 | _ -> raise Stream.Failure)
16431 and parse_top_symb' entry symb c =
16432 parser_of_symbol entry 0 (top_symb entry symb) c
16433 and parse_top_symb entry symb strm =
16434 Context.call_with_ctx strm
16435 (fun c -> parse_top_symb' entry symb c (Context.stream c))
16437 let rec start_parser_of_levels entry clevn =
16440 (fun _ _ (__strm : _ Stream.t) -> raise Stream.Failure)
16442 let p1 = start_parser_of_levels entry (succ clevn) levs
16444 (match lev.lprefix with
16448 (match lev.assoc with
16449 | LeftA | NonA -> succ clevn
16450 | RightA -> clevn) in
16452 parser_of_tree entry (succ clevn) alevn tree
16456 (fun levn c (__strm : _ Stream.t) ->
16457 let bp = Stream.count __strm in
16459 add_loc c bp p2 __strm in
16460 let strm = __strm in
16461 let a = Action.getf act loc
16462 in entry.econtinue levn loc a c strm)
16464 (fun levn c strm ->
16466 then p1 levn c strm
16468 (let (__strm : _ Stream.t) = strm in
16469 let bp = Stream.count __strm
16473 (add_loc c bp p2 __strm)
16475 | Stream.Failure -> None
16477 | Some ((act, loc)) ->
16478 let a = Action.getf act loc
16480 entry.econtinue levn loc a
16482 | _ -> p1 levn c __strm))))
16484 let start_parser_of_entry entry =
16485 match entry.edesc with
16486 | Dlevels [] -> Tools.empty_entry entry.ename
16487 | Dlevels elev -> start_parser_of_levels entry 0 elev
16488 | Dparser p -> (fun _ _ strm -> p strm)
16490 let rec continue_parser_of_levels entry clevn =
16493 (fun _ _ _ _ (__strm : _ Stream.t) ->
16494 raise Stream.Failure)
16497 continue_parser_of_levels entry (succ clevn) levs
16499 (match lev.lsuffix with
16503 (match lev.assoc with
16504 | LeftA | NonA -> succ clevn
16505 | RightA -> clevn) in
16507 parser_of_tree entry (succ clevn) alevn tree
16509 (fun c levn bp a strm ->
16511 then p1 c levn bp a strm
16513 (let (__strm : _ Stream.t) = strm
16515 try p1 c levn bp a __strm
16517 | Stream.Failure ->
16519 add_loc c bp p2 __strm in
16520 let a = Action.getf2 act a loc
16522 entry.econtinue levn loc a c
16525 let continue_parser_of_entry entry =
16526 match entry.edesc with
16528 let p = continue_parser_of_levels entry 0 elev
16530 (fun levn bp a c (__strm : _ Stream.t) ->
16531 try p c levn bp a __strm
16532 with | Stream.Failure -> a)
16534 (fun _ _ _ _ (__strm : _ Stream.t) ->
16535 raise Stream.Failure)
16543 module Make (Structure : Structure.S) =
16545 module Tools = Tools.Make(Structure)
16547 module Parser = Parser.Make(Structure)
16555 let is_before s1 s2 =
16556 match (s1, s2) with
16557 | ((Skeyword _ | Stoken _), (Skeyword _ | Stoken _)) ->
16559 | ((Skeyword _ | Stoken _), _) -> true
16562 let rec derive_eps =
16565 | Slist0sep (_, _) -> true
16567 | Stree t -> tree_derive_eps t
16568 | Smeta (_, _, _) | Slist1 _ | Slist1sep (_, _) | Snterm _
16569 | Snterml (_, _) | Snext | Sself | Stoken _ |
16570 Skeyword _ -> false
16571 and tree_derive_eps =
16573 | LocAct (_, _) -> true
16574 | Node { node = s; brother = bro; son = son } ->
16575 ((derive_eps s) && (tree_derive_eps son)) ||
16576 (tree_derive_eps bro)
16579 let empty_lev lname assoc =
16580 let assoc = match assoc with | Some a -> a | None -> LeftA
16589 let change_lev entry lev n lname assoc =
16592 | None -> lev.assoc
16595 (a <> lev.assoc) && !(entry.egram.warning_verbose)
16598 "<W> Changing associativity of level \"%s\"\n"
16607 (lname <> lev.lname) &&
16608 !(entry.egram.warning_verbose)
16610 (eprintf "<W> Level label \"%s\" ignored\n" n;
16617 lsuffix = lev.lsuffix;
16618 lprefix = lev.lprefix;
16621 let change_to_self entry =
16622 function | Snterm e when e == entry -> Sself | x -> x
16624 let get_level entry position levs =
16625 match position with
16626 | Some First -> ([], empty_lev, levs)
16627 | Some Last -> (levs, empty_lev, [])
16628 | Some (Level n) ->
16633 "No level labelled \"%s\" in entry \"%s\"\n"
16636 failwith "Grammar.extend")
16638 if Tools.is_level_labelled n lev
16639 then ([], (change_lev entry lev n), levs)
16641 (let (levs1, rlev, levs2) = get levs
16642 in ((lev :: levs1), rlev, levs2)))
16644 | Some (Before n) ->
16649 "No level labelled \"%s\" in entry \"%s\"\n"
16652 failwith "Grammar.extend")
16654 if Tools.is_level_labelled n lev
16655 then ([], empty_lev, (lev :: levs))
16657 (let (levs1, rlev, levs2) = get levs
16658 in ((lev :: levs1), rlev, levs2)))
16660 | Some (After n) ->
16665 "No level labelled \"%s\" in entry \"%s\"\n"
16668 failwith "Grammar.extend")
16670 if Tools.is_level_labelled n lev
16671 then ([ lev ], empty_lev, levs)
16673 (let (levs1, rlev, levs2) = get levs
16674 in ((lev :: levs1), rlev, levs2)))
16679 ([], (change_lev entry lev "<top>"), levs)
16680 | [] -> ([], empty_lev, []))
16682 let rec check_gram entry =
16685 if ( != ) e.egram entry.egram
16689 Error: entries \"%s\" and \"%s\" do not belong to the same grammar.\n"
16690 entry.ename e.ename;
16692 failwith "Grammar.extend error")
16694 | Snterml (e, _) ->
16695 if ( != ) e.egram entry.egram
16699 Error: entries \"%s\" and \"%s\" do not belong to the same grammar.\n"
16700 entry.ename e.ename;
16702 failwith "Grammar.extend error")
16704 | Smeta (_, sl, _) -> List.iter (check_gram entry) sl
16705 | Slist0sep (s, t) ->
16706 (check_gram entry t; check_gram entry s)
16707 | Slist1sep (s, t) ->
16708 (check_gram entry t; check_gram entry s)
16709 | Slist0 s -> check_gram entry s
16710 | Slist1 s -> check_gram entry s
16711 | Sopt s -> check_gram entry s
16712 | Stree t -> tree_check_gram entry t
16713 | Snext | Sself | Stoken _ | Skeyword _ -> ()
16714 and tree_check_gram entry =
16716 | Node { node = n; brother = bro; son = son } ->
16717 (check_gram entry n;
16718 tree_check_gram entry bro;
16719 tree_check_gram entry son)
16720 | LocAct (_, _) | DeadEnd -> ()
16724 | Sself :: symbols -> (true, symbols)
16725 | symbols -> (false, symbols)
16727 let insert_tokens gram symbols =
16730 | Smeta (_, sl, _) -> List.iter insert sl
16731 | Slist0 s -> insert s
16732 | Slist1 s -> insert s
16733 | Slist0sep (s, t) -> (insert s; insert t)
16734 | Slist1sep (s, t) -> (insert s; insert t)
16735 | Sopt s -> insert s
16736 | Stree t -> tinsert t
16737 | Skeyword kwd -> using gram kwd
16738 | Snterm _ | Snterml (_, _) | Snext | Sself | Stoken _ ->
16742 | Node { node = s; brother = bro; son = son } ->
16743 (insert s; tinsert bro; tinsert son)
16744 | LocAct (_, _) | DeadEnd -> ()
16745 in List.iter insert symbols
16747 let insert_tree entry gsymbols action tree =
16748 let rec insert symbols tree =
16750 | s :: sl -> insert_in_tree s sl tree
16753 | Node { node = s; son = son; brother = bro } ->
16758 brother = insert [] bro;
16760 | LocAct (old_action, action_list) ->
16762 if !(entry.egram.warning_verbose)
16765 "<W> Grammar extension: in [%s] some rule has been masked@."
16768 in LocAct (action, old_action :: action_list)
16769 | DeadEnd -> LocAct (action, []))
16770 and insert_in_tree s sl tree =
16771 match try_insert s sl tree with
16777 son = insert sl DeadEnd;
16780 and try_insert s sl tree =
16782 | Node { node = s1; son = son; brother = bro } ->
16783 if Tools.eq_symbol s s1
16789 son = insert sl son;
16795 (is_before s1 s) ||
16796 ((derive_eps s) && (not (derive_eps s1)))
16799 match try_insert s sl bro with
16805 son = insert sl DeadEnd;
16809 Node { node = s1; son = son; brother = bro; }
16812 (match try_insert s sl bro with
16816 { node = s1; son = son; brother = bro; }
16819 | LocAct (_, _) | DeadEnd -> None
16824 { node = s; son = insert_new sl; brother = DeadEnd;
16826 | [] -> LocAct (action, [])
16827 in insert gsymbols tree
16829 let insert_level entry e1 symbols action slev =
16833 assoc = slev.assoc;
16834 lname = slev.lname;
16836 insert_tree entry symbols action slev.lsuffix;
16837 lprefix = slev.lprefix;
16841 assoc = slev.assoc;
16842 lname = slev.lname;
16843 lsuffix = slev.lsuffix;
16845 insert_tree entry symbols action slev.lprefix;
16848 let levels_of_rules entry position rules =
16850 match entry.edesc with
16851 | Dlevels elev -> elev
16853 (eprintf "Error: entry not extensible: \"%s\"\n"
16856 failwith "Grammar.extend")
16861 (let (levs1, make_lev, levs2) =
16862 get_level entry position elev in
16865 (fun (levs, make_lev) (lname, assoc, level) ->
16866 let lev = make_lev lname assoc in
16869 (fun lev (symbols, action) ->
16871 List.map (change_to_self entry)
16874 (List.iter (check_gram entry) symbols;
16875 let (e1, symbols) =
16876 get_initial symbols
16878 (insert_tokens entry.egram symbols;
16879 insert_level entry e1 symbols
16882 in ((lev :: levs), empty_lev))
16883 ([], make_lev) rules
16884 in levs1 @ ((List.rev levs) @ levs2))
16886 let extend entry (position, rules) =
16887 let elev = levels_of_rules entry position rules
16889 (entry.edesc <- Dlevels elev;
16892 let f = Parser.start_parser_of_entry entry
16893 in (entry.estart <- f; f lev c strm));
16895 fun lev bp a c strm ->
16896 let f = Parser.continue_parser_of_entry entry
16897 in (entry.econtinue <- f; f lev bp a c strm))
16905 module Make (Structure : Structure.S) =
16907 module Tools = Tools.Make(Structure)
16909 module Parser = Parser.Make(Structure)
16913 let delete_rule_in_tree entry =
16914 let rec delete_in_tree symbols tree =
16915 match (symbols, tree) with
16916 | (s :: sl, Node n) ->
16917 if Tools.logically_eq_symbols entry s n.node
16918 then delete_son sl n
16920 (match delete_in_tree symbols n.brother with
16921 | Some ((dsl, t)) ->
16931 | (_ :: _, _) -> None
16933 (match delete_in_tree [] n.brother with
16934 | Some ((dsl, t)) ->
16944 | ([], DeadEnd) -> None
16945 | ([], LocAct (_, [])) -> Some (((Some []), DeadEnd))
16946 | ([], LocAct (_, (action :: list))) ->
16947 Some ((None, (LocAct (action, list))))
16948 and delete_son sl n =
16949 match delete_in_tree sl n.son with
16950 | Some ((Some dsl, DeadEnd)) ->
16951 Some (((Some (n.node :: dsl)), (n.brother)))
16952 | Some ((Some dsl, t)) ->
16955 { node = n.node; son = t; brother = n.brother; }
16956 in Some (((Some (n.node :: dsl)), t))
16957 | Some ((None, t)) ->
16960 { node = n.node; son = t; brother = n.brother; }
16961 in Some ((None, t))
16965 let rec decr_keyw_use gram =
16967 | Skeyword kwd -> removing gram kwd
16968 | Smeta (_, sl, _) -> List.iter (decr_keyw_use gram) sl
16969 | Slist0 s -> decr_keyw_use gram s
16970 | Slist1 s -> decr_keyw_use gram s
16971 | Slist0sep (s1, s2) ->
16972 (decr_keyw_use gram s1; decr_keyw_use gram s2)
16973 | Slist1sep (s1, s2) ->
16974 (decr_keyw_use gram s1; decr_keyw_use gram s2)
16975 | Sopt s -> decr_keyw_use gram s
16976 | Stree t -> decr_keyw_use_in_tree gram t
16977 | Sself | Snext | Snterm _ | Snterml (_, _) | Stoken _ ->
16979 and decr_keyw_use_in_tree gram =
16981 | DeadEnd | LocAct (_, _) -> ()
16983 (decr_keyw_use gram n.node;
16984 decr_keyw_use_in_tree gram n.son;
16985 decr_keyw_use_in_tree gram n.brother)
16987 let rec delete_rule_in_suffix entry symbols =
16990 (match delete_rule_in_tree entry symbols lev.lsuffix
16992 | Some ((dsl, t)) ->
16995 List.iter (decr_keyw_use entry.egram) dsl
16998 | DeadEnd when lev.lprefix == DeadEnd -> levs
17005 lprefix = lev.lprefix;
17010 delete_rule_in_suffix entry symbols levs
17012 | [] -> raise Not_found
17014 let rec delete_rule_in_prefix entry symbols =
17017 (match delete_rule_in_tree entry symbols lev.lprefix
17019 | Some ((dsl, t)) ->
17022 List.iter (decr_keyw_use entry.egram) dsl
17025 | DeadEnd when lev.lsuffix == DeadEnd -> levs
17031 lsuffix = lev.lsuffix;
17037 delete_rule_in_prefix entry symbols levs
17039 | [] -> raise Not_found
17041 let rec delete_rule_in_level_list entry symbols levs =
17043 | Sself :: symbols ->
17044 delete_rule_in_suffix entry symbols levs
17045 | Snterm e :: symbols when e == entry ->
17046 delete_rule_in_suffix entry symbols levs
17047 | _ -> delete_rule_in_prefix entry symbols levs
17049 let delete_rule entry sl =
17050 match entry.edesc with
17052 let levs = delete_rule_in_level_list entry sl levs
17054 (entry.edesc <- Dlevels levs;
17057 let f = Parser.start_parser_of_entry entry
17058 in (entry.estart <- f; f lev c strm));
17060 (fun lev bp a c strm ->
17061 let f = Parser.continue_parser_of_entry entry
17062 in (entry.econtinue <- f; f lev bp a c strm)))
17071 module Make (Structure : Structure.S) :
17075 val sfold0 : ('a -> 'b -> 'b) -> 'b -> (_, 'a, 'b) fold
17077 val sfold1 : ('a -> 'b -> 'b) -> 'b -> (_, 'a, 'b) fold
17079 val sfold0sep : ('a -> 'b -> 'b) -> 'b -> (_, 'a, 'b) foldsep
17085 module Make (Structure : Structure.S) =
17091 module Parse = Parser.Make(Structure)
17093 module Fail = Failed.Make(Structure)
17101 let junk strm = Context.junk strm
17103 let count strm = Context.bp strm
17107 let sfold0 f e _entry _symbl psymb =
17108 let rec fold accu (__strm : _ Stream.t) =
17109 match try Some (psymb __strm)
17110 with | Stream.Failure -> None
17112 | Some a -> fold (f a accu) __strm
17114 in fun (__strm : _ Stream.t) -> fold e __strm
17116 let sfold1 f e _entry _symbl psymb =
17117 let rec fold accu (__strm : _ Stream.t) =
17118 match try Some (psymb __strm)
17119 with | Stream.Failure -> None
17121 | Some a -> fold (f a accu) __strm
17124 fun (__strm : _ Stream.t) ->
17125 let a = psymb __strm
17127 try fold (f a e) __strm
17128 with | Stream.Failure -> raise (Stream.Error "")
17130 let sfold0sep f e entry symbl psymb psep =
17133 | [ symb; sep ] -> Fail.symb_failed_txt entry sep symb
17135 let rec kont accu (__strm : _ Stream.t) =
17136 match try Some (psep __strm)
17137 with | Stream.Failure -> None
17143 | Stream.Failure ->
17144 raise (Stream.Error (failed symbl)))
17145 in kont (f a accu) __strm
17148 fun (__strm : _ Stream.t) ->
17149 match try Some (psymb __strm)
17150 with | Stream.Failure -> None
17152 | Some a -> kont (f a e) __strm
17155 let sfold1sep f e entry symbl psymb psep =
17158 | [ symb; sep ] -> Fail.symb_failed_txt entry sep symb
17162 | [ symb; _ ] -> Parse.parse_top_symb entry symb
17163 | _ -> raise Stream.Failure in
17164 let rec kont accu (__strm : _ Stream.t) =
17165 match try Some (psep __strm)
17166 with | Stream.Failure -> None
17173 | Stream.Failure ->
17175 (try parse_top symbl __strm
17177 | Stream.Failure ->
17178 raise (Stream.Error (failed symbl)))
17180 with | Stream.Failure -> raise (Stream.Error ""))
17181 in kont (f a accu) __strm
17184 fun (__strm : _ Stream.t) ->
17185 let a = psymb __strm in kont (f a e) __strm
17193 module Make (Structure : Structure.S) =
17195 module Dump = Print.MakeDump(Structure)
17197 module Print = Print.Make(Structure)
17199 module Tools = Tools.Make(Structure)
17205 type 'a t = internal_entry
17207 let name e = e.ename
17209 let print ppf e = fprintf ppf "%a@\n" Print.entry e
17211 let dump ppf e = fprintf ppf "%a@\n" Dump.entry e
17217 estart = Tools.empty_entry n;
17219 (fun _ _ _ _ (__strm : _ Stream.t) ->
17220 raise Stream.Failure);
17221 edesc = Dlevels [];
17224 let action_parse entry ts : Action.t =
17225 Context.call_with_ctx ts
17227 try entry.estart 0 c (Context.stream c)
17229 | Stream.Failure ->
17230 Loc.raise (Context.loc_ep c)
17232 ("illegal begin of " ^ entry.ename))
17233 | (Loc.Exc_located (_, _) as exc) -> raise exc
17234 | exc -> Loc.raise (Context.loc_ep c) exc)
17236 let lex entry loc cs = entry.egram.glexer loc cs
17238 let lex_string entry loc str =
17239 lex entry loc (Stream.of_string str)
17241 let filter entry ts =
17242 Token.Filter.filter (get_filter entry.egram) ts
17244 let parse_tokens_after_filter entry ts =
17245 Action.get (action_parse entry ts)
17247 let parse_tokens_before_filter entry ts =
17248 parse_tokens_after_filter entry (filter entry ts)
17250 let parse entry loc cs =
17251 parse_tokens_before_filter entry (lex entry loc cs)
17253 let parse_string entry loc str =
17254 parse_tokens_before_filter entry (lex_string entry loc str)
17256 let of_parser g n (p : (Token.t * Loc.t) Stream.t -> 'a) :
17261 estart = (fun _ _ ts -> Action.mk (p ts));
17263 (fun _ _ _ _ (__strm : _ Stream.t) ->
17264 raise Stream.Failure);
17265 edesc = Dparser (fun ts -> Action.mk (p ts));
17268 let setup_parser e (p : (Token.t * Loc.t) Stream.t -> 'a) =
17269 let f ts = Action.mk (p ts)
17271 (e.estart <- (fun _ _ -> f);
17273 (fun _ _ _ _ (__strm : _ Stream.t) ->
17274 raise Stream.Failure);
17275 e.edesc <- Dparser f)
17279 (fun _ _ (__strm : _ Stream.t) -> raise Stream.Failure);
17281 (fun _ _ _ _ (__strm : _ Stream.t) ->
17282 raise Stream.Failure);
17283 e.edesc <- Dlevels [])
17293 let uncurry f (x, y) = f x y
17295 let flip f x y = f y x
17297 module Make (Lexer : Sig.Lexer) :
17298 Sig.Grammar.Static with module Loc = Lexer.Loc
17299 and module Token = Lexer.Token =
17301 module Structure = Structure.Make(Lexer)
17303 module Delete = Delete.Make(Structure)
17305 module Insert = Insert.Make(Structure)
17307 module Fold = Fold.Make(Structure)
17312 let gkeywords = Hashtbl.create 301
17315 gkeywords = gkeywords;
17316 gfilter = Token.Filter.mk (Hashtbl.mem gkeywords);
17317 glexer = Lexer.mk ();
17318 warning_verbose = ref true;
17319 error_verbose = Camlp4_config.verbose;
17324 module E = Entry.Make(Structure)
17330 let of_parser name strm = E.of_parser gram name strm
17332 let setup_parser = E.setup_parser
17336 let print = E.print
17338 let clear = E.clear
17346 let get_filter () = gram.gfilter
17348 let lex loc cs = gram.glexer loc cs
17350 let lex_string loc str = lex loc (Stream.of_string str)
17352 let filter ts = Token.Filter.filter gram.gfilter ts
17354 let parse_tokens_after_filter entry ts =
17355 Entry.E.parse_tokens_after_filter entry ts
17357 let parse_tokens_before_filter entry ts =
17358 parse_tokens_after_filter entry (filter ts)
17360 let parse entry loc cs =
17361 parse_tokens_before_filter entry (lex loc cs)
17363 let parse_string entry loc str =
17364 parse_tokens_before_filter entry (lex_string loc str)
17366 let delete_rule = Delete.delete_rule
17370 (List.fold_left (flip (uncurry (Insert.insert_tree e)))
17373 let sfold0 = Fold.sfold0
17375 let sfold1 = Fold.sfold1
17377 let sfold0sep = Fold.sfold0sep
17379 let extend = Insert.extend
17387 module Make (Lexer : Sig.Lexer) :
17388 Sig.Grammar.Dynamic with module Loc = Lexer.Loc
17389 and module Token = Lexer.Token =
17391 module Structure = Structure.Make(Lexer)
17393 module Delete = Delete.Make(Structure)
17395 module Insert = Insert.Make(Structure)
17397 module Entry = Entry.Make(Structure)
17399 module Fold = Fold.Make(Structure)
17404 let gkeywords = Hashtbl.create 301
17407 gkeywords = gkeywords;
17408 gfilter = Token.Filter.mk (Hashtbl.mem gkeywords);
17409 glexer = Lexer.mk ();
17410 warning_verbose = ref true;
17411 error_verbose = Camlp4_config.verbose;
17414 let get_filter g = g.gfilter
17416 let lex g loc cs = g.glexer loc cs
17418 let lex_string g loc str = lex g loc (Stream.of_string str)
17420 let filter g ts = Token.Filter.filter g.gfilter ts
17422 let parse_tokens_after_filter entry ts =
17423 Entry.parse_tokens_after_filter entry ts
17425 let parse_tokens_before_filter entry ts =
17426 parse_tokens_after_filter entry (filter entry.egram ts)
17428 let parse entry loc cs =
17429 parse_tokens_before_filter entry (lex entry.egram loc cs)
17431 let parse_string entry loc str =
17432 parse_tokens_before_filter entry
17433 (lex_string entry.egram loc str)
17435 let delete_rule = Delete.delete_rule
17440 (fun tree (symbols, action) ->
17441 Insert.insert_tree e symbols action tree)
17445 let sfold0 = Fold.sfold0
17447 let sfold1 = Fold.sfold1
17449 let sfold0sep = Fold.sfold0sep
17451 let extend = Insert.extend
17463 module DumpCamlp4Ast :
17467 module Make (Syntax : Sig.Syntax) : Sig.Printer(Syntax.Ast).S
17473 let name = "Camlp4Printers.DumpCamlp4Ast"
17475 let version = Sys.ocaml_version
17479 module Make (Syntax : Sig.Syntax) : Sig.Printer(Syntax.Ast).S =
17483 let with_open_out_file x f =
17486 let oc = open_out_bin file
17487 in (f oc; flush oc; close_out oc)
17489 (set_binary_mode_out stdout true; f stdout; flush stdout)
17491 let dump_ast magic ast oc =
17492 (output_string oc magic; output_value oc ast)
17494 let print_interf ?input_file:(_) ?output_file ast =
17495 with_open_out_file output_file
17496 (dump_ast Camlp4_config.camlp4_ast_intf_magic_number ast)
17498 let print_implem ?input_file:(_) ?output_file ast =
17499 with_open_out_file output_file
17500 (dump_ast Camlp4_config.camlp4_ast_impl_magic_number ast)
17506 module DumpOCamlAst :
17510 module Make (Syntax : Sig.Camlp4Syntax) : Sig.Printer(Syntax.Ast).S
17514 module Id : Sig.Id =
17516 let name = "Camlp4Printers.DumpOCamlAst"
17518 let version = Sys.ocaml_version
17522 module Make (Syntax : Sig.Camlp4Syntax) : Sig.Printer(Syntax.Ast).S =
17526 module Ast2pt = Struct.Camlp4Ast2OCamlAst.Make(Ast)
17528 let with_open_out_file x f =
17531 let oc = open_out_bin file
17532 in (f oc; flush oc; close_out oc)
17534 (set_binary_mode_out stdout true; f stdout; flush stdout)
17536 let dump_pt magic fname pt oc =
17537 (output_string oc magic;
17538 output_value oc (if fname = "-" then "" else fname);
17539 output_value oc pt)
17541 let print_interf ?(input_file = "-") ?output_file ast =
17542 let pt = Ast2pt.sig_item ast
17544 with_open_out_file output_file
17545 (dump_pt Camlp4_config.ocaml_ast_intf_magic_number
17548 let print_implem ?(input_file = "-") ?output_file ast =
17549 let pt = Ast2pt.str_item ast
17551 with_open_out_file output_file
17552 (dump_pt Camlp4_config.ocaml_ast_impl_magic_number
17563 module Make (Syntax : Sig.Syntax) : Sig.Printer(Syntax.Ast).S
17569 let name = "Camlp4.Printers.Null"
17571 let version = Sys.ocaml_version
17575 module Make (Syntax : Sig.Syntax) =
17579 let print_interf ?input_file:(_) ?output_file:(_) _ = ()
17581 let print_implem ?input_file:(_) ?output_file:(_) _ = ()
17591 module Make (Syntax : Sig.Camlp4Syntax) :
17595 include Sig.Camlp4Syntax with module Loc = Syntax.Loc
17596 and module Token = Syntax.Token and module Ast = Syntax.Ast
17597 and module Gram = Syntax.Gram
17599 type sep = (unit, formatter, unit) format
17602 (formatter -> 'a -> unit) ->
17603 ('b, formatter, unit) format ->
17604 (unit, formatter, unit) format ->
17605 formatter -> 'a list -> unit
17608 (formatter -> 'a -> unit) ->
17609 ('b, formatter, unit) format -> formatter -> 'a list -> unit
17611 val lex_string : string -> Token.t
17613 val is_infix : string -> bool
17615 val is_keyword : string -> bool
17617 val ocaml_char : string -> string
17619 val get_expr_args :
17620 Ast.expr -> Ast.expr list -> (Ast.expr * (Ast.expr list))
17622 val get_patt_args :
17623 Ast.patt -> Ast.patt list -> (Ast.patt * (Ast.patt list))
17625 val get_ctyp_args :
17626 Ast.ctyp -> Ast.ctyp list -> (Ast.ctyp * (Ast.ctyp list))
17628 val expr_fun_args : Ast.expr -> ((Ast.patt list) * Ast.expr)
17631 ?curry_constr: bool ->
17635 method interf : formatter -> Ast.sig_item -> unit
17637 method implem : formatter -> Ast.str_item -> unit
17639 method sig_item : formatter -> Ast.sig_item -> unit
17641 method str_item : formatter -> Ast.str_item -> unit
17649 val value_val : string
17651 val value_let : string
17653 method anti : formatter -> string -> unit
17655 method class_declaration :
17656 formatter -> Ast.class_expr -> unit
17658 method class_expr : formatter -> Ast.class_expr -> unit
17660 method class_sig_item :
17661 formatter -> Ast.class_sig_item -> unit
17663 method class_str_item :
17664 formatter -> Ast.class_str_item -> unit
17666 method class_type : formatter -> Ast.class_type -> unit
17669 formatter -> (Ast.ctyp * Ast.ctyp) -> unit
17671 method ctyp : formatter -> Ast.ctyp -> unit
17673 method ctyp1 : formatter -> Ast.ctyp -> unit
17675 method constructor_type : formatter -> Ast.ctyp -> unit
17677 method dot_expr : formatter -> Ast.expr -> unit
17679 method apply_expr : formatter -> Ast.expr -> unit
17681 method expr : formatter -> Ast.expr -> unit
17683 method expr_list : formatter -> Ast.expr list -> unit
17685 method expr_list_cons :
17686 bool -> formatter -> Ast.expr -> unit
17688 method functor_arg :
17689 formatter -> (string * Ast.module_type) -> unit
17691 method functor_args :
17692 formatter -> (string * Ast.module_type) list -> unit
17694 method ident : formatter -> Ast.ident -> unit
17696 method numeric : formatter -> string -> string -> unit
17698 method binding : formatter -> Ast.binding -> unit
17700 method record_binding :
17701 formatter -> Ast.rec_binding -> unit
17703 method match_case : formatter -> Ast.match_case -> unit
17705 method match_case_aux :
17706 formatter -> Ast.match_case -> unit
17708 method mk_expr_list :
17709 Ast.expr -> ((Ast.expr list) * (Ast.expr option))
17711 method mk_patt_list :
17712 Ast.patt -> ((Ast.patt list) * (Ast.patt option))
17714 method simple_module_expr :
17715 formatter -> Ast.module_expr -> unit
17717 method module_expr :
17718 formatter -> Ast.module_expr -> unit
17720 method module_expr_get_functor_args :
17721 (string * Ast.module_type) list ->
17723 (((string * Ast.module_type) list) * Ast.
17724 module_expr * (Ast.module_type option))
17726 method module_rec_binding :
17727 formatter -> Ast.module_binding -> unit
17729 method module_type :
17730 formatter -> Ast.module_type -> unit
17732 method mutable_flag :
17733 formatter -> Ast.meta_bool -> unit
17735 method direction_flag :
17736 formatter -> Ast.meta_bool -> unit
17738 method rec_flag : formatter -> Ast.meta_bool -> unit
17741 formatter -> Ast.meta_bool -> string -> unit
17743 method node : formatter -> 'b -> ('b -> Loc.t) -> unit
17745 method patt : formatter -> Ast.patt -> unit
17747 method patt1 : formatter -> Ast.patt -> unit
17749 method patt2 : formatter -> Ast.patt -> unit
17751 method patt3 : formatter -> Ast.patt -> unit
17753 method patt4 : formatter -> Ast.patt -> unit
17755 method patt5 : formatter -> Ast.patt -> unit
17757 method patt_tycon : formatter -> Ast.patt -> unit
17759 method patt_expr_fun_args :
17760 formatter -> (Ast.patt * Ast.expr) -> unit
17762 method patt_class_expr_fun_args :
17763 formatter -> (Ast.patt * Ast.class_expr) -> unit
17765 method print_comments_before :
17766 Loc.t -> formatter -> unit
17768 method private_flag :
17769 formatter -> Ast.meta_bool -> unit
17771 method virtual_flag :
17772 formatter -> Ast.meta_bool -> unit
17774 method quoted_string : formatter -> string -> unit
17776 method raise_match_failure : formatter -> Loc.t -> unit
17780 method reset_semi : 'a
17782 method semisep : sep
17784 method set_comments : bool -> 'a
17786 method set_curry_constr : bool -> 'a
17788 method set_loc_and_comments : 'a
17790 method set_semisep : sep -> 'a
17792 method simple_ctyp : formatter -> Ast.ctyp -> unit
17794 method simple_expr : formatter -> Ast.expr -> unit
17796 method simple_patt : formatter -> Ast.patt -> unit
17798 method seq : formatter -> Ast.expr -> unit
17800 method string : formatter -> string -> unit
17802 method sum_type : formatter -> Ast.ctyp -> unit
17804 method type_params : formatter -> Ast.ctyp list -> unit
17806 method class_params : formatter -> Ast.ctyp -> unit
17808 method under_pipe : 'a
17810 method under_semi : 'a
17812 method var : formatter -> string -> unit
17814 method with_constraint :
17815 formatter -> Ast.with_constr -> unit
17820 string option -> (formatter -> 'a -> unit) -> 'a -> unit
17824 (printer -> formatter -> 'a -> unit) -> 'a -> unit
17828 module MakeMore (Syntax : Sig.Camlp4Syntax) : Sig.Printer(Syntax.
17837 let name = "Camlp4.Printers.OCaml"
17839 let version = Sys.ocaml_version
17843 module Make (Syntax : Sig.Camlp4Syntax) =
17847 type sep = (unit, formatter, unit) format
17851 let cut f = fprintf f "@ "
17853 let list' elt sep sep' f =
17857 | x :: xs -> (pp f sep; elt f x; pp f sep'; loop xs)
17861 | [ x ] -> (elt f x; pp f sep')
17862 | x :: xs -> (elt f x; pp f sep'; loop xs)
17864 let list elt sep f =
17866 function | [] -> () | x :: xs -> (pp f sep; elt f x; loop xs)
17871 | x :: xs -> (elt f x; loop xs)
17873 let rec list_of_meta_list =
17876 | Ast.LCons (x, xs) -> x :: (list_of_meta_list xs)
17877 | Ast.LAnt x -> assert false
17879 let meta_list elt sep f mxs =
17880 let xs = list_of_meta_list mxs in list elt sep f xs
17882 module CommentFilter = Struct.CommentFilter.Make(Token)
17884 let comment_filter = CommentFilter.mk ()
17886 let _ = CommentFilter.define (Gram.get_filter ()) comment_filter
17888 module StringSet = Set.Make(String)
17890 let infix_lidents =
17891 [ "asr"; "land"; "lor"; "lsl"; "lsr"; "lxor"; "mod"; "or" ]
17895 [ '='; '<'; '>'; '|'; '&'; '$'; '@'; '^'; '+'; '-'; '*'; '/';
17898 List.fold_right StringSet.add infix_lidents StringSet.empty
17901 (StringSet.mem s infixes) ||
17902 ((s <> "") && (List.mem s.[0] first_chars))
17906 List.fold_right StringSet.add
17907 [ "and"; "as"; "assert"; "begin"; "class"; "constraint";
17908 "do"; "done"; "downto"; "else"; "end"; "exception";
17909 "external"; "false"; "for"; "fun"; "function"; "functor";
17910 "if"; "in"; "include"; "inherit"; "initializer"; "lazy";
17911 "let"; "match"; "method"; "module"; "mutable"; "new";
17912 "object"; "of"; "open"; "parser"; "private"; "rec";
17913 "sig"; "struct"; "then"; "to"; "true"; "try"; "type";
17914 "val"; "virtual"; "when"; "while"; "with" ]
17916 in fun s -> StringSet.mem s keywords
17918 module Lexer = Struct.Lexer.Make(Token)
17920 let _ = let module M = ErrorHandler.Register(Lexer.Error) in ()
17925 Lexer.from_string ~quotations: !Camlp4_config.quotations Loc.
17928 let lex_string str =
17930 let (__strm : _ Stream.t) = lexer str
17932 match Stream.peek __strm with
17933 | Some ((tok, _)) ->
17934 (Stream.junk __strm;
17935 (match Stream.peek __strm with
17936 | Some ((EOI, _)) -> (Stream.junk __strm; tok)
17937 | _ -> raise (Stream.Error "")))
17938 | _ -> raise Stream.Failure
17940 | Stream.Failure | Stream.Error _ ->
17943 "Cannot print %S this string contains more than one token"
17945 | Lexer.Error.E exn ->
17948 "Cannot print %S this identifier does not respect OCaml lexing rules (%s)"
17949 str (Lexer.Error.to_string exn))
17951 let ocaml_char = function | "'" -> "\\'" | c -> c
17953 let rec get_expr_args a al =
17955 | Ast.ExApp (_, a1, a2) -> get_expr_args a1 (a2 :: al)
17958 let rec get_patt_args a al =
17960 | Ast.PaApp (_, a1, a2) -> get_patt_args a1 (a2 :: al)
17963 let rec get_ctyp_args a al =
17965 | Ast.TyApp (_, a1, a2) -> get_ctyp_args a1 (a2 :: al)
17968 let is_irrefut_patt = Ast.is_irrefut_patt
17970 let rec expr_fun_args =
17972 | (Ast.ExFun (_, (Ast.McArr (_, p, (Ast.ExNil _), e))) as ge)
17974 if is_irrefut_patt p
17975 then (let (pl, e) = expr_fun_args e in ((p :: pl), e))
17979 let rec class_expr_fun_args =
17981 | (Ast.CeFun (_, p, ce) as ge) ->
17982 if is_irrefut_patt p
17984 (let (pl, ce) = class_expr_fun_args ce in ((p :: pl), ce))
17988 let rec do_print_comments_before loc f (__strm : _ Stream.t) =
17989 match Stream.peek __strm with
17990 | Some ((comm, comm_loc)) when Loc.strictly_before comm_loc loc
17992 (Stream.junk __strm;
17994 let () = f comm comm_loc
17995 in do_print_comments_before loc f s)
17998 class printer ?curry_constr:(init_curry_constr = false)
17999 ?(comments = true) () =
18005 method under_pipe = {< pipe = true; >}
18007 method under_semi = {< semi = true; >}
18009 method reset_semi = {< semi = false; >}
18011 method reset = {< pipe = false; semi = false; >}
18013 val semisep = (";;" : sep)
18015 val andsep = ("@]@ @[<2>and@ " : sep)
18017 val value_val = "val"
18019 val value_let = "let"
18021 val mode = if comments then `comments else `no_comments
18023 val curry_constr = init_curry_constr
18025 val var_conversion = false
18027 method semisep = semisep
18029 method set_semisep = fun s -> {< semisep = s; >}
18031 method set_comments =
18033 {< mode = if b then `comments else `no_comments; >}
18035 method set_loc_and_comments = {< mode = `loc_and_comments; >}
18037 method set_curry_constr = fun b -> {< curry_constr = b; >}
18039 method print_comments_before =
18043 do_print_comments_before loc
18044 (fun c _ -> pp f "%s@ " c)
18045 (CommentFilter.take_stream comment_filter)
18046 | `loc_and_comments ->
18047 let () = pp f "(*loc: %a*)@ " Loc.dump loc
18049 do_print_comments_before loc
18050 (fun s -> pp f "%s(*comm_loc: %a*)@ " s Loc.dump)
18051 (CommentFilter.take_stream comment_filter)
18057 | "" -> pp f "$lid:\"\"$"
18058 | "[]" -> pp f "[]"
18059 | "()" -> pp f "()"
18060 | " True" -> pp f "True"
18061 | " False" -> pp f "False"
18063 (match (var_conversion, v) with
18064 | (true, "val") -> pp f "contents"
18065 | (true, "True") -> pp f "true"
18066 | (true, "False") -> pp f "false"
18068 (match lex_string v with
18069 | LIDENT s | UIDENT s | ESCAPED_IDENT s when
18070 is_keyword s -> pp f "%s__" s
18071 | LIDENT s | ESCAPED_IDENT s when
18072 List.mem s infix_lidents -> pp f "( %s )" s
18073 | SYMBOL s -> pp f "( %s )" s
18074 | LIDENT s | UIDENT s | ESCAPED_IDENT s ->
18075 pp_print_string f s
18079 "Bad token used as an identifier: %s"
18080 (Token.to_string tok))))
18082 method type_params =
18086 | [ x ] -> pp f "%a@ " o#ctyp x
18087 | l -> pp f "@[<1>(%a)@]@ " (list o#ctyp ",@ ") l
18089 method class_params =
18092 | Ast.TyCom (_, t1, t2) ->
18093 pp f "@[<1>%a,@ %a@]" o#class_params t1
18097 method mutable_flag = fun f b -> o#flag f b "mutable"
18099 method rec_flag = fun f b -> o#flag f b "rec"
18101 method virtual_flag = fun f b -> o#flag f b "virtual"
18103 method private_flag = fun f b -> o#flag f b "private"
18108 | Ast.BTrue -> (pp_print_string f n; pp f "@ ")
18110 | Ast.BAnt s -> o#anti f s
18112 method anti = fun f s -> pp f "$%s$" s
18117 | Ast.ExSem (_, e1, e2) ->
18118 pp f "%a;@ %a" o#under_semi#seq e1 o#seq e2
18119 | Ast.ExSeq (_, e) -> o#seq f e
18122 method match_case =
18125 | Ast.McNil _loc ->
18126 pp f "@[<2>@ _ ->@ %a@]" o#raise_match_failure _loc
18127 | a -> o#match_case_aux f a
18129 method match_case_aux =
18132 | Ast.McNil _ -> ()
18133 | Ast.McAnt (_, s) -> o#anti f s
18134 | Ast.McOr (_, a1, a2) ->
18135 pp f "%a%a" o#match_case_aux a1 o#match_case_aux a2
18136 | Ast.McArr (_, p, (Ast.ExNil _), e) ->
18137 pp f "@ | @[<2>%a@ ->@ %a@]" o#patt p
18138 o#under_pipe#expr e
18139 | Ast.McArr (_, p, w, e) ->
18140 pp f "@ | @[<2>%a@ when@ %a@ ->@ %a@]" o#patt p
18141 o#under_pipe#expr w o#under_pipe#expr e
18145 let () = o#node f bi Ast.loc_of_binding
18148 | Ast.BiNil _ -> ()
18149 | Ast.BiAnd (_, b1, b2) ->
18150 (o#binding f b1; pp f andsep; o#binding f b2)
18151 | Ast.BiEq (_, p, e) ->
18154 | Ast.PaTyc (_, _, _) -> ([], e)
18155 | _ -> expr_fun_args e)
18158 | (Ast.PaId (_, (Ast.IdLid (_, _))),
18159 Ast.ExTyc (_, e, t)) ->
18160 pp f "%a :@ %a =@ %a"
18161 (list o#simple_patt "@ ") (p :: pl)
18164 pp f "%a @[<0>%a=@]@ %a" o#simple_patt p
18165 (list' o#simple_patt "" "@ ") pl o#expr e)
18166 | Ast.BiAnt (_, s) -> o#anti f s
18168 method record_binding =
18170 let () = o#node f bi Ast.loc_of_rec_binding
18173 | Ast.RbNil _ -> ()
18174 | Ast.RbEq (_, i, e) ->
18175 pp f "@ @[<2>%a =@ %a@];" o#var_ident i o#expr e
18176 | Ast.RbSem (_, b1, b2) ->
18177 (o#under_semi#record_binding f b1;
18178 o#under_semi#record_binding f b2)
18179 | Ast.RbAnt (_, s) -> o#anti f s
18181 method mk_patt_list =
18184 (Ast.PaApp (_, (Ast.PaId (_, (Ast.IdUid (_, "::")))),
18187 let (pl, c) = o#mk_patt_list p2 in ((p1 :: pl), c)
18188 | Ast.PaId (_, (Ast.IdUid (_, "[]"))) -> ([], None)
18189 | p -> ([], (Some p))
18191 method mk_expr_list =
18194 (Ast.ExApp (_, (Ast.ExId (_, (Ast.IdUid (_, "::")))),
18197 let (el, c) = o#mk_expr_list e2 in ((e1 :: el), c)
18198 | Ast.ExId (_, (Ast.IdUid (_, "[]"))) -> ([], None)
18199 | e -> ([], (Some e))
18205 | [ e ] -> pp f "[ %a ]" o#under_semi#expr e
18207 pp f "@[<2>[ %a@] ]" (list o#under_semi#expr ";@ ")
18210 method expr_list_cons =
18212 let (el, c) = o#mk_expr_list e
18215 | None -> o#expr_list f el
18218 then pp f "@[<2>(%a)@]"
18219 else pp f "@[<2>%a@]")
18220 (list o#under_semi#dot_expr " ::@ ") (el @ [ x ])
18222 method patt_expr_fun_args =
18224 let (pl, e) = expr_fun_args e
18226 pp f "%a@ ->@ %a" (list o#simple_patt "@ ") (p :: pl)
18229 method patt_class_expr_fun_args =
18231 let (pl, ce) = class_expr_fun_args ce
18233 pp f "%a =@]@ %a" (list o#simple_patt "@ ") (p :: pl)
18238 pp f "@[<2>constraint@ %a =@ %a@]" o#ctyp t1 o#ctyp t2
18242 match Ast.list_of_ctyp t [] with
18244 | ts -> pp f "@[<hv0>| %a@]" (list o#ctyp "@ | ") ts
18246 method string = fun f -> pp f "%s"
18248 method quoted_string = fun f -> pp f "%S"
18253 then pp f "(%s%s)" num suff
18254 else pp f "%s%s" num suff
18256 method module_expr_get_functor_args =
18259 | Ast.MeFun (_, s, mt, me) ->
18260 o#module_expr_get_functor_args ((s, mt) :: accu) me
18261 | Ast.MeTyc (_, me, mt) ->
18262 ((List.rev accu), me, (Some mt))
18263 | me -> ((List.rev accu), me, None)
18265 method functor_args = fun f -> list o#functor_arg "@ " f
18267 method functor_arg =
18269 pp f "@[<2>(%a :@ %a)@]" o#var s o#module_type mt
18271 method module_rec_binding =
18274 | Ast.MbNil _ -> ()
18275 | Ast.MbColEq (_, s, mt, me) ->
18276 pp f "@[<2>%a :@ %a =@ %a@]" o#var s o#module_type mt
18278 | Ast.MbCol (_, s, mt) ->
18279 pp f "@[<2>%a :@ %a@]" o#var s o#module_type mt
18280 | Ast.MbAnd (_, mb1, mb2) ->
18281 (o#module_rec_binding f mb1;
18283 o#module_rec_binding f mb2)
18284 | Ast.MbAnt (_, s) -> o#anti f s
18286 method class_declaration =
18289 | Ast.CeTyc (_, ce, ct) ->
18290 pp f "%a :@ %a" o#class_expr ce o#class_type ct
18291 | ce -> o#class_expr f ce
18293 method raise_match_failure =
18295 let n = Loc.file_name _loc in
18296 let l = Loc.start_line _loc in
18297 let c = (Loc.start_off _loc) - (Loc.start_bol _loc)
18301 Ast.ExId (_loc, Ast.IdLid (_loc, "raise")),
18306 Ast.IdUid (_loc, "Match_failure")),
18307 Ast.ExStr (_loc, Ast.safe_string_escaped n)),
18308 Ast.ExInt (_loc, string_of_int l)),
18309 Ast.ExInt (_loc, string_of_int c))))
18311 method node : 'a. formatter -> 'a -> ('a -> Loc.t) -> unit =
18312 fun f node loc_of_node ->
18313 o#print_comments_before (loc_of_node node) f
18317 let () = o#node f i Ast.loc_of_ident
18320 | Ast.IdAcc (_, i1, i2) ->
18321 pp f "%a.@,%a" o#ident i1 o#ident i2
18322 | Ast.IdApp (_, i1, i2) ->
18323 pp f "%a@,(%a)" o#ident i1 o#ident i2
18324 | Ast.IdAnt (_, s) -> o#anti f s
18325 | Ast.IdLid (_, s) | Ast.IdUid (_, s) -> o#var f s
18327 method private var_ident = {< var_conversion = true; >}#ident
18331 let () = o#node f e Ast.loc_of_expr
18334 | (Ast.ExLet (_, _, _, _) | Ast.ExLmd (_, _, _, _) as
18335 e) when semi -> pp f "(%a)" o#reset#expr e
18336 | (Ast.ExMat (_, _, _) | Ast.ExTry (_, _, _) |
18338 as e) when pipe || semi ->
18339 pp f "(%a)" o#reset#expr e
18340 | Ast.ExApp (_, (Ast.ExId (_, (Ast.IdLid (_, "~-")))),
18341 x) -> pp f "@[<2>-@ %a@]" o#dot_expr x
18342 | Ast.ExApp (_, (Ast.ExId (_, (Ast.IdLid (_, "~-.")))),
18343 x) -> pp f "@[<2>-.@ %a@]" o#dot_expr x
18346 (Ast.ExId (_, (Ast.IdUid (_, "::")))), _)),
18347 _) -> o#expr_list_cons false f e
18349 (Ast.ExApp (_, (Ast.ExId (_, (Ast.IdLid (_, n)))),
18351 y) when is_infix n ->
18352 pp f "@[<2>%a@ %s@ %a@]" o#apply_expr x n
18354 | Ast.ExApp (_, x, y) ->
18355 let (a, al) = get_expr_args x [ y ]
18358 (not curry_constr) &&
18359 (Ast.is_expr_constructor a)
18362 | [ Ast.ExTup (_, _) ] ->
18363 pp f "@[<2>%a@ (%a)@]" o#apply_expr x
18366 pp f "@[<2>%a@ %a@]" o#apply_expr x
18369 pp f "@[<2>%a@ (%a)@]" o#apply_expr a
18370 (list o#under_pipe#expr ",@ ") al)
18372 pp f "@[<2>%a@]" (list o#apply_expr "@ ")
18376 (Ast.ExId (_, (Ast.IdLid (_, "val")))))),
18378 pp f "@[<2>%a :=@ %a@]" o#dot_expr e1 o#expr e2
18379 | Ast.ExAss (_, e1, e2) ->
18380 pp f "@[<2>%a@ <-@ %a@]" o#dot_expr e1 o#expr e2
18381 | Ast.ExFun (loc, (Ast.McNil _)) ->
18382 pp f "@[<2>fun@ _@ ->@ %a@]" o#raise_match_failure
18384 | Ast.ExFun (_, (Ast.McArr (_, p, (Ast.ExNil _), e)))
18385 when is_irrefut_patt p ->
18386 pp f "@[<2>fun@ %a@]" o#patt_expr_fun_args (p, e)
18387 | Ast.ExFun (_, a) ->
18388 pp f "@[<hv0>function%a@]" o#match_case a
18389 | Ast.ExIfe (_, e1, e2, e3) ->
18391 "@[<hv0>@[<2>if@ %a@]@ @[<2>then@ %a@]@ @[<2>else@ %a@]@]"
18392 o#expr e1 o#under_semi#expr e2 o#under_semi#expr
18394 | Ast.ExLaz (_, e) ->
18395 pp f "@[<2>lazy@ %a@]" o#simple_expr e
18396 | Ast.ExLet (_, r, bi, e) ->
18398 | Ast.ExLet (_, _, _, _) ->
18399 pp f "@[<0>@[<2>let %a%a in@]@ %a@]"
18400 o#rec_flag r o#binding bi o#reset_semi#expr
18404 "@[<hv0>@[<2>let %a%a@]@ @[<hv2>in@ %a@]@]"
18405 o#rec_flag r o#binding bi o#reset_semi#expr
18407 | Ast.ExMat (_, e, a) ->
18408 pp f "@[<hv0>@[<hv0>@[<2>match %a@]@ with@]%a@]"
18409 o#expr e o#match_case a
18410 | Ast.ExTry (_, e, a) ->
18411 pp f "@[<0>@[<hv2>try@ %a@]@ @[<0>with%a@]@]"
18412 o#expr e o#match_case a
18413 | Ast.ExAsf _ -> pp f "@[<2>assert@ false@]"
18414 | Ast.ExAsr (_, e) ->
18415 pp f "@[<2>assert@ %a@]" o#dot_expr e
18416 | Ast.ExLmd (_, s, me, e) ->
18417 pp f "@[<2>let module %a =@ %a@]@ @[<2>in@ %a@]"
18418 o#var s o#module_expr me o#reset_semi#expr e
18419 | Ast.ExObj (_, (Ast.PaNil _), cst) ->
18420 pp f "@[<hv0>@[<hv2>object@ %a@]@ end@]"
18421 o#class_str_item cst
18422 | Ast.ExObj (_, (Ast.PaTyc (_, p, t)), cst) ->
18424 "@[<hv0>@[<hv2>object @[<1>(%a :@ %a)@]@ %a@]@ end@]"
18425 o#patt p o#ctyp t o#class_str_item cst
18426 | Ast.ExObj (_, p, cst) ->
18428 "@[<hv0>@[<hv2>object @[<2>(%a)@]@ %a@]@ end@]"
18429 o#patt p o#class_str_item cst
18430 | e -> o#apply_expr f e
18432 method apply_expr =
18434 let () = o#node f e Ast.loc_of_expr
18437 | Ast.ExNew (_, i) -> pp f "@[<2>new@ %a@]" o#ident i
18438 | e -> o#dot_expr f e
18442 let () = o#node f e Ast.loc_of_expr
18446 (Ast.ExId (_, (Ast.IdLid (_, "val"))))) ->
18447 pp f "@[<2>!@,%a@]" o#simple_expr e
18448 | Ast.ExAcc (_, e1, e2) ->
18449 pp f "@[<2>%a.@,%a@]" o#dot_expr e1 o#dot_expr e2
18450 | Ast.ExAre (_, e1, e2) ->
18451 pp f "@[<2>%a.@,(%a)@]" o#dot_expr e1 o#expr e2
18452 | Ast.ExSte (_, e1, e2) ->
18453 pp f "%a.@[<1>[@,%a@]@,]" o#dot_expr e1 o#expr e2
18454 | Ast.ExSnd (_, e, s) ->
18455 pp f "@[<2>%a#@,%s@]" o#dot_expr e s
18456 | e -> o#simple_expr f e
18458 method simple_expr =
18460 let () = o#node f e Ast.loc_of_expr
18463 | Ast.ExNil _ -> ()
18464 | Ast.ExSeq (_, e) -> pp f "@[<hv1>(%a)@]" o#seq e
18467 (Ast.ExId (_, (Ast.IdUid (_, "::")))), _)),
18468 _) -> o#expr_list_cons true f e
18469 | Ast.ExTup (_, e) -> pp f "@[<1>(%a)@]" o#expr e
18470 | Ast.ExArr (_, e) ->
18471 pp f "@[<0>@[<2>[|@ %a@]@ |]@]" o#under_semi#expr e
18472 | Ast.ExCoe (_, e, (Ast.TyNil _), t) ->
18473 pp f "@[<2>(%a :>@ %a)@]" o#expr e o#ctyp t
18474 | Ast.ExCoe (_, e, t1, t2) ->
18475 pp f "@[<2>(%a :@ %a :>@ %a)@]" o#expr e o#ctyp t1
18477 | Ast.ExTyc (_, e, t) ->
18478 pp f "@[<2>(%a :@ %a)@]" o#expr e o#ctyp t
18479 | Ast.ExAnt (_, s) -> o#anti f s
18480 | Ast.ExFor (_, s, e1, e2, df, e3) ->
18482 "@[<hv0>@[<hv2>@[<2>for %a =@ %a@ %a@ %a@ do@]@ %a@]@ done@]"
18483 o#var s o#expr e1 o#direction_flag df o#expr e2
18485 | Ast.ExInt (_, s) -> o#numeric f s ""
18486 | Ast.ExNativeInt (_, s) -> o#numeric f s "n"
18487 | Ast.ExInt64 (_, s) -> o#numeric f s "L"
18488 | Ast.ExInt32 (_, s) -> o#numeric f s "l"
18489 | Ast.ExFlo (_, s) -> o#numeric f s ""
18490 | Ast.ExChr (_, s) -> pp f "'%s'" (ocaml_char s)
18491 | Ast.ExId (_, i) -> o#var_ident f i
18492 | Ast.ExRec (_, b, (Ast.ExNil _)) ->
18493 pp f "@[<hv0>@[<hv2>{%a@]@ }@]" o#record_binding b
18494 | Ast.ExRec (_, b, e) ->
18495 pp f "@[<hv0>@[<hv2>{@ (%a)@ with%a@]@ }@]"
18496 o#expr e o#record_binding b
18497 | Ast.ExStr (_, s) -> pp f "\"%s\"" s
18498 | Ast.ExWhi (_, e1, e2) ->
18499 pp f "@[<2>while@ %a@ do@ %a@ done@]" o#expr e1
18501 | Ast.ExLab (_, s, (Ast.ExNil _)) -> pp f "~%s" s
18502 | Ast.ExLab (_, s, e) ->
18503 pp f "@[<2>~%s:@ %a@]" s o#dot_expr e
18504 | Ast.ExOlb (_, s, (Ast.ExNil _)) -> pp f "?%s" s
18505 | Ast.ExOlb (_, s, e) ->
18506 pp f "@[<2>?%s:@ %a@]" s o#dot_expr e
18507 | Ast.ExVrn (_, s) -> pp f "`%a" o#var s
18508 | Ast.ExOvr (_, b) ->
18509 pp f "@[<hv0>@[<hv2>{<%a@]@ >}@]" o#record_binding
18511 | Ast.ExCom (_, e1, e2) ->
18512 pp f "%a,@ %a" o#simple_expr e1 o#simple_expr e2
18513 | Ast.ExSem (_, e1, e2) ->
18514 pp f "%a;@ %a" o#under_semi#expr e1 o#expr e2
18515 | Ast.ExApp (_, _, _) | Ast.ExAcc (_, _, _) |
18516 Ast.ExAre (_, _, _) | Ast.ExSte (_, _, _) |
18517 Ast.ExAss (_, _, _) | Ast.ExSnd (_, _, _) |
18518 Ast.ExFun (_, _) | Ast.ExMat (_, _, _) |
18519 Ast.ExTry (_, _, _) | Ast.ExIfe (_, _, _, _) |
18520 Ast.ExLet (_, _, _, _) | Ast.ExLmd (_, _, _, _) |
18521 Ast.ExAsr (_, _) | Ast.ExAsf _ | Ast.ExLaz (_, _) |
18522 Ast.ExNew (_, _) | Ast.ExObj (_, _, _) ->
18523 pp f "(%a)" o#reset#expr e
18525 method direction_flag =
18528 | Ast.BTrue -> pp_print_string f "to"
18529 | Ast.BFalse -> pp_print_string f "downto"
18530 | Ast.BAnt s -> o#anti f s
18534 let () = o#node f p Ast.loc_of_patt
18537 | Ast.PaAli (_, p1, p2) ->
18538 pp f "@[<1>(%a@ as@ %a)@]" o#patt p1 o#patt p2
18539 | Ast.PaEq (_, i, p) ->
18540 pp f "@[<2>%a =@ %a@]" o#var_ident i o#patt p
18541 | Ast.PaSem (_, p1, p2) ->
18542 pp f "%a;@ %a" o#patt p1 o#patt p2
18548 | Ast.PaOrp (_, p1, p2) ->
18549 pp f "@[<2>%a@ |@ %a@]" o#patt1 p1 o#patt2 p2
18552 method patt2 = fun f p -> o#patt3 f p
18557 | Ast.PaRng (_, p1, p2) ->
18558 pp f "@[<2>%a@ ..@ %a@]" o#patt3 p1 o#patt4 p2
18559 | Ast.PaCom (_, p1, p2) ->
18560 pp f "%a,@ %a" o#patt3 p1 o#patt3 p2
18568 (Ast.PaId (_, (Ast.IdUid (_, "::")))), _)),
18571 let (pl, c) = o#mk_patt_list p
18575 pp f "@[<2>[@ %a@]@ ]" (list o#patt ";@ ") pl
18577 pp f "@[<2>%a@]" (list o#patt5 " ::@ ")
18586 (Ast.PaId (_, (Ast.IdUid (_, "::")))), _)),
18588 as p) -> o#simple_patt f p
18589 | Ast.PaLaz (_, p) ->
18590 pp f "@[<2>lazy %a@]" o#simple_patt p
18591 | Ast.PaApp (_, x, y) ->
18592 let (a, al) = get_patt_args x [ y ]
18594 if not (Ast.is_patt_constructor a)
18597 "WARNING: strange pattern application of a non constructor@."
18601 pp f "@[<2>%a@]" (list o#simple_patt "@ ")
18605 | [ Ast.PaTup (_, _) ] ->
18606 pp f "@[<2>%a@ (%a)@]" o#simple_patt x
18609 pp f "@[<2>%a@ %a@]" o#patt5 x
18612 pp f "@[<2>%a@ (%a)@]" o#patt5 a
18613 (list o#simple_patt ",@ ") al)
18614 | p -> o#simple_patt f p
18616 method simple_patt =
18618 let () = o#node f p Ast.loc_of_patt
18621 | Ast.PaNil _ -> ()
18622 | Ast.PaId (_, i) -> o#var_ident f i
18623 | Ast.PaAnt (_, s) -> o#anti f s
18624 | Ast.PaAny _ -> pp f "_"
18625 | Ast.PaTup (_, p) -> pp f "@[<1>(%a)@]" o#patt3 p
18626 | Ast.PaRec (_, p) -> pp f "@[<hv2>{@ %a@]@ }" o#patt p
18627 | Ast.PaStr (_, s) -> pp f "\"%s\"" s
18628 | Ast.PaTyc (_, p, t) ->
18629 pp f "@[<1>(%a :@ %a)@]" o#patt p o#ctyp t
18630 | Ast.PaNativeInt (_, s) -> o#numeric f s "n"
18631 | Ast.PaInt64 (_, s) -> o#numeric f s "L"
18632 | Ast.PaInt32 (_, s) -> o#numeric f s "l"
18633 | Ast.PaInt (_, s) -> o#numeric f s ""
18634 | Ast.PaFlo (_, s) -> o#numeric f s ""
18635 | Ast.PaChr (_, s) -> pp f "'%s'" (ocaml_char s)
18636 | Ast.PaLab (_, s, (Ast.PaNil _)) -> pp f "~%s" s
18637 | Ast.PaVrn (_, s) -> pp f "`%a" o#var s
18638 | Ast.PaTyp (_, i) -> pp f "@[<2>#%a@]" o#ident i
18639 | Ast.PaArr (_, p) -> pp f "@[<2>[|@ %a@]@ |]" o#patt p
18640 | Ast.PaLab (_, s, p) ->
18641 pp f "@[<2>~%s:@ (%a)@]" s o#patt p
18642 | Ast.PaOlb (_, s, (Ast.PaNil _)) -> pp f "?%s" s
18643 | Ast.PaOlb (_, "", p) ->
18644 pp f "@[<2>?(%a)@]" o#patt_tycon p
18645 | Ast.PaOlb (_, s, p) ->
18646 pp f "@[<2>?%s:@,@[<1>(%a)@]@]" s o#patt_tycon p
18647 | Ast.PaOlbi (_, "", p, e) ->
18648 pp f "@[<2>?(%a =@ %a)@]" o#patt_tycon p o#expr e
18649 | Ast.PaOlbi (_, s, p, e) ->
18650 pp f "@[<2>?%s:@,@[<1>(%a =@ %a)@]@]" s
18651 o#patt_tycon p o#expr e
18652 | (Ast.PaApp (_, _, _) | Ast.PaAli (_, _, _) |
18653 Ast.PaOrp (_, _, _) | Ast.PaRng (_, _, _) |
18654 Ast.PaCom (_, _, _) | Ast.PaSem (_, _, _) |
18655 Ast.PaEq (_, _, _) | Ast.PaLaz (_, _)
18656 as p) -> pp f "@[<1>(%a)@]" o#patt p
18658 method patt_tycon =
18661 | Ast.PaTyc (_, p, t) ->
18662 pp f "%a :@ %a" o#patt p o#ctyp t
18665 method simple_ctyp =
18667 let () = o#node f t Ast.loc_of_ctyp
18670 | Ast.TyId (_, i) -> o#ident f i
18671 | Ast.TyAnt (_, s) -> o#anti f s
18672 | Ast.TyAny _ -> pp f "_"
18673 | Ast.TyLab (_, s, t) ->
18674 pp f "@[<2>%s:@ %a@]" s o#simple_ctyp t
18675 | Ast.TyOlb (_, s, t) ->
18676 pp f "@[<2>?%s:@ %a@]" s o#simple_ctyp t
18677 | Ast.TyObj (_, (Ast.TyNil _), Ast.BFalse) ->
18679 | Ast.TyObj (_, (Ast.TyNil _), Ast.BTrue) ->
18681 | Ast.TyObj (_, t, Ast.BTrue) ->
18682 pp f "@[<0>@[<2><@ %a;@ ..@]@ >@]" o#ctyp t
18683 | Ast.TyObj (_, t, Ast.BFalse) ->
18684 pp f "@[<0>@[<2><@ %a@]@ >@]" o#ctyp t
18685 | Ast.TyQuo (_, s) -> pp f "'%a" o#var s
18686 | Ast.TyRec (_, t) -> pp f "@[<2>{@ %a@]@ }" o#ctyp t
18687 | Ast.TySum (_, t) -> pp f "@[<0>%a@]" o#sum_type t
18688 | Ast.TyTup (_, t) -> pp f "@[<1>(%a)@]" o#ctyp t
18689 | Ast.TyVrnEq (_, t) ->
18690 pp f "@[<2>[@ %a@]@ ]" o#sum_type t
18691 | Ast.TyVrnInf (_, t) ->
18692 pp f "@[<2>[<@ %a@]@,]" o#sum_type t
18693 | Ast.TyVrnInfSup (_, t1, t2) ->
18694 let (a, al) = get_ctyp_args t2 []
18696 pp f "@[<2>[<@ %a@ >@ %a@]@ ]" o#sum_type t1
18697 (list o#simple_ctyp "@ ") (a :: al)
18698 | Ast.TyVrnSup (_, t) ->
18699 pp f "@[<2>[>@ %a@]@,]" o#sum_type t
18700 | Ast.TyCls (_, i) -> pp f "@[<2>#%a@]" o#ident i
18701 | Ast.TyMan (_, t1, t2) ->
18702 pp f "@[<2>%a =@ %a@]" o#simple_ctyp t1
18704 | Ast.TyVrn (_, s) -> pp f "`%a" o#var s
18705 | Ast.TySta (_, t1, t2) ->
18706 pp f "%a *@ %a" o#simple_ctyp t1 o#simple_ctyp t2
18707 | Ast.TyNil _ -> assert false
18708 | t -> pp f "@[<1>(%a)@]" o#ctyp t
18712 let () = o#node f t Ast.loc_of_ctyp
18715 | Ast.TyAli (_, t1, t2) ->
18716 pp f "@[<2>%a@ as@ %a@]" o#simple_ctyp t1
18718 | Ast.TyArr (_, t1, t2) ->
18719 pp f "@[<2>%a@ ->@ %a@]" o#ctyp1 t1 o#ctyp t2
18720 | Ast.TyQuP (_, s) -> pp f "+'%a" o#var s
18721 | Ast.TyQuM (_, s) -> pp f "-'%a" o#var s
18722 | Ast.TyOr (_, t1, t2) ->
18723 pp f "%a@ | %a" o#ctyp t1 o#ctyp t2
18724 | Ast.TyCol (_, t1, (Ast.TyMut (_, t2))) ->
18725 pp f "@[mutable@ %a :@ %a@]" o#ctyp t1 o#ctyp t2
18726 | Ast.TyCol (_, t1, t2) ->
18727 pp f "@[<2>%a :@ %a@]" o#ctyp t1 o#ctyp t2
18728 | Ast.TySem (_, t1, t2) ->
18729 pp f "%a;@ %a" o#ctyp t1 o#ctyp t2
18730 | Ast.TyOf (_, t, (Ast.TyNil _)) -> o#ctyp f t
18731 | Ast.TyOf (_, t1, t2) ->
18732 pp f "@[<h>%a@ @[<3>of@ %a@]@]" o#ctyp t1
18733 o#constructor_type t2
18734 | Ast.TyOfAmp (_, t1, t2) ->
18735 pp f "@[<h>%a@ @[<3>of &@ %a@]@]" o#ctyp t1
18736 o#constructor_type t2
18737 | Ast.TyAnd (_, t1, t2) ->
18738 pp f "%a@ and %a" o#ctyp t1 o#ctyp t2
18739 | Ast.TyMut (_, t) ->
18740 pp f "@[<2>mutable@ %a@]" o#ctyp t
18741 | Ast.TyAmp (_, t1, t2) ->
18742 pp f "%a@ &@ %a" o#ctyp t1 o#ctyp t2
18743 | Ast.TyDcl (_, tn, tp, te, cl) ->
18744 (pp f "@[<2>%a%a@]" o#type_params tp o#var tn;
18746 | Ast.TyNil _ -> ()
18747 | _ -> pp f " =@ %a" o#ctyp te);
18749 then pp f "@ %a" (list o#constrain "@ ") cl
18756 | Ast.TyApp (_, t1, t2) ->
18757 (match get_ctyp_args t1 [ t2 ] with
18759 pp f "@[<2>%a@ %a@]" o#simple_ctyp t2
18762 pp f "@[<2>(%a)@ %a@]" (list o#ctyp ",@ ") al
18764 | Ast.TyPol (_, t1, t2) ->
18765 let (a, al) = get_ctyp_args t1 []
18767 pp f "@[<2>%a.@ %a@]" (list o#ctyp "@ ") (a :: al)
18769 | Ast.TyPrv (_, t) ->
18770 pp f "@[private@ %a@]" o#simple_ctyp t
18771 | t -> o#simple_ctyp f t
18773 method constructor_type =
18776 | Ast.TyAnd (loc, t1, t2) ->
18777 let () = o#node f t (fun _ -> loc)
18779 pp f "%a@ * %a" o#constructor_type t1
18780 o#constructor_type t2
18781 | Ast.TyArr (_, _, _) -> pp f "(%a)" o#ctyp t
18786 let () = o#node f sg Ast.loc_of_sig_item
18789 | Ast.SgNil _ -> ()
18790 | Ast.SgSem (_, sg, (Ast.SgNil _)) |
18791 Ast.SgSem (_, (Ast.SgNil _), sg) -> o#sig_item f sg
18792 | Ast.SgSem (_, sg1, sg2) ->
18793 (o#sig_item f sg1; cut f; o#sig_item f sg2)
18794 | Ast.SgExc (_, t) ->
18795 pp f "@[<2>exception@ %a%(%)@]" o#ctyp t semisep
18796 | Ast.SgExt (_, s, t, sl) ->
18797 pp f "@[<2>external@ %a :@ %a =@ %a%(%)@]"
18798 o#var s o#ctyp t (meta_list o#quoted_string "@ ")
18800 | Ast.SgMod (_, s1, (Ast.MtFun (_, s2, mt1, mt2))) ->
18801 let rec loop accu =
18803 | Ast.MtFun (_, s, mt1, mt2) ->
18804 loop ((s, mt1) :: accu) mt2
18805 | mt -> ((List.rev accu), mt)) in
18806 let (al, mt) = loop [ (s2, mt1) ] mt2
18808 pp f "@[<2>module %a@ @[<0>%a@] :@ %a%(%)@]"
18809 o#var s1 o#functor_args al o#module_type mt
18811 | Ast.SgMod (_, s, mt) ->
18812 pp f "@[<2>module %a :@ %a%(%)@]" o#var s
18813 o#module_type mt semisep
18814 | Ast.SgMty (_, s, (Ast.MtNil _)) ->
18815 pp f "@[<2>module type %a%(%)@]" o#var s semisep
18816 | Ast.SgMty (_, s, mt) ->
18817 pp f "@[<2>module type %a =@ %a%(%)@]" o#var s
18818 o#module_type mt semisep
18819 | Ast.SgOpn (_, sl) ->
18820 pp f "@[<2>open@ %a%(%)@]" o#ident sl semisep
18821 | Ast.SgTyp (_, t) ->
18822 pp f "@[<hv0>@[<hv2>type %a@]%(%)@]" o#ctyp t
18824 | Ast.SgVal (_, s, t) ->
18825 pp f "@[<2>%s %a :@ %a%(%)@]" value_val o#var s
18827 | Ast.SgInc (_, mt) ->
18828 pp f "@[<2>include@ %a%(%)@]" o#module_type mt
18830 | Ast.SgClt (_, ct) ->
18831 pp f "@[<2>class type %a%(%)@]" o#class_type ct
18833 | Ast.SgCls (_, ce) ->
18834 pp f "@[<2>class %a%(%)@]" o#class_type ce semisep
18835 | Ast.SgRecMod (_, mb) ->
18836 pp f "@[<2>module rec %a%(%)@]"
18837 o#module_rec_binding mb semisep
18838 | Ast.SgDir (_, _, _) -> ()
18839 | Ast.SgAnt (_, s) -> pp f "%a%(%)" o#anti s semisep
18843 let () = o#node f st Ast.loc_of_str_item
18846 | Ast.StNil _ -> ()
18847 | Ast.StSem (_, st, (Ast.StNil _)) |
18848 Ast.StSem (_, (Ast.StNil _), st) -> o#str_item f st
18849 | Ast.StSem (_, st1, st2) ->
18850 (o#str_item f st1; cut f; o#str_item f st2)
18851 | Ast.StExc (_, t, Ast.ONone) ->
18852 pp f "@[<2>exception@ %a%(%)@]" o#ctyp t semisep
18853 | Ast.StExc (_, t, (Ast.OSome sl)) ->
18854 pp f "@[<2>exception@ %a =@ %a%(%)@]" o#ctyp t
18856 | Ast.StExt (_, s, t, sl) ->
18857 pp f "@[<2>external@ %a :@ %a =@ %a%(%)@]"
18858 o#var s o#ctyp t (meta_list o#quoted_string "@ ")
18860 | Ast.StMod (_, s1, (Ast.MeFun (_, s2, mt1, me))) ->
18861 (match o#module_expr_get_functor_args [ (s2, mt1) ]
18864 | (al, me, Some mt2) ->
18866 "@[<2>module %a@ @[<0>%a@] :@ %a =@ %a%(%)@]"
18867 o#var s1 o#functor_args al o#module_type mt2
18868 o#module_expr me semisep
18870 pp f "@[<2>module %a@ @[<0>%a@] =@ %a%(%)@]"
18871 o#var s1 o#functor_args al o#module_expr me
18873 | Ast.StMod (_, s, (Ast.MeTyc (_, me, mt))) ->
18874 pp f "@[<2>module %a :@ %a =@ %a%(%)@]" o#var s
18875 o#module_type mt o#module_expr me semisep
18876 | Ast.StMod (_, s, me) ->
18877 pp f "@[<2>module %a =@ %a%(%)@]" o#var s
18878 o#module_expr me semisep
18879 | Ast.StMty (_, s, mt) ->
18880 pp f "@[<2>module type %a =@ %a%(%)@]" o#var s
18881 o#module_type mt semisep
18882 | Ast.StOpn (_, sl) ->
18883 pp f "@[<2>open@ %a%(%)@]" o#ident sl semisep
18884 | Ast.StTyp (_, t) ->
18885 pp f "@[<hv0>@[<hv2>type %a@]%(%)@]" o#ctyp t
18887 | Ast.StVal (_, r, bi) ->
18888 pp f "@[<2>%s %a%a%(%)@]" value_let o#rec_flag r
18889 o#binding bi semisep
18890 | Ast.StExp (_, e) ->
18891 pp f "@[<2>let _ =@ %a%(%)@]" o#expr e semisep
18892 | Ast.StInc (_, me) ->
18893 pp f "@[<2>include@ %a%(%)@]" o#simple_module_expr
18895 | Ast.StClt (_, ct) ->
18896 pp f "@[<2>class type %a%(%)@]" o#class_type ct
18898 | Ast.StCls (_, ce) ->
18899 pp f "@[<hv2>class %a%(%)@]" o#class_declaration ce
18901 | Ast.StRecMod (_, mb) ->
18902 pp f "@[<2>module rec %a%(%)@]"
18903 o#module_rec_binding mb semisep
18904 | Ast.StDir (_, _, _) -> ()
18905 | Ast.StAnt (_, s) -> pp f "%a%(%)" o#anti s semisep
18906 | Ast.StExc (_, _, (Ast.OAnt _)) -> assert false
18908 method module_type =
18910 let () = o#node f mt Ast.loc_of_module_type
18913 | Ast.MtNil _ -> assert false
18914 | Ast.MtId (_, i) -> o#ident f i
18915 | Ast.MtAnt (_, s) -> o#anti f s
18916 | Ast.MtFun (_, s, mt1, mt2) ->
18917 pp f "@[<2>functor@ @[<1>(%a :@ %a)@]@ ->@ %a@]"
18918 o#var s o#module_type mt1 o#module_type mt2
18919 | Ast.MtQuo (_, s) -> pp f "'%a" o#var s
18920 | Ast.MtSig (_, sg) ->
18921 pp f "@[<hv0>@[<hv2>sig@ %a@]@ end@]" o#sig_item sg
18922 | Ast.MtWit (_, mt, wc) ->
18923 pp f "@[<2>%a@ with@ %a@]" o#module_type mt
18924 o#with_constraint wc
18926 method with_constraint =
18928 let () = o#node f wc Ast.loc_of_with_constr
18931 | Ast.WcNil _ -> ()
18932 | Ast.WcTyp (_, t1, t2) ->
18933 pp f "@[<2>type@ %a =@ %a@]" o#ctyp t1 o#ctyp t2
18934 | Ast.WcMod (_, i1, i2) ->
18935 pp f "@[<2>module@ %a =@ %a@]" o#ident i1 o#ident
18937 | Ast.WcAnd (_, wc1, wc2) ->
18938 (o#with_constraint f wc1;
18940 o#with_constraint f wc2)
18941 | Ast.WcAnt (_, s) -> o#anti f s
18943 method module_expr =
18945 let () = o#node f me Ast.loc_of_module_expr
18948 | Ast.MeNil _ -> assert false
18949 | Ast.MeTyc (_, (Ast.MeStr (_, st)),
18950 (Ast.MtSig (_, sg))) ->
18952 "@[<2>@[<hv2>struct@ %a@]@ end :@ @[<hv2>sig@ %a@]@ end@]"
18953 o#str_item st o#sig_item sg
18954 | _ -> o#simple_module_expr f me
18956 method simple_module_expr =
18958 let () = o#node f me Ast.loc_of_module_expr
18961 | Ast.MeNil _ -> assert false
18962 | Ast.MeId (_, i) -> o#ident f i
18963 | Ast.MeAnt (_, s) -> o#anti f s
18964 | Ast.MeApp (_, me1, me2) ->
18965 pp f "@[<2>%a@,(%a)@]" o#module_expr me1
18967 | Ast.MeFun (_, s, mt, me) ->
18968 pp f "@[<2>functor@ @[<1>(%a :@ %a)@]@ ->@ %a@]"
18969 o#var s o#module_type mt o#module_expr me
18970 | Ast.MeStr (_, st) ->
18971 pp f "@[<hv0>@[<hv2>struct@ %a@]@ end@]" o#str_item
18973 | Ast.MeTyc (_, me, mt) ->
18974 pp f "@[<1>(%a :@ %a)@]" o#module_expr me
18977 method class_expr =
18979 let () = o#node f ce Ast.loc_of_class_expr
18982 | Ast.CeApp (_, ce, e) ->
18983 pp f "@[<2>%a@ %a@]" o#class_expr ce o#expr e
18984 | Ast.CeCon (_, Ast.BFalse, i, (Ast.TyNil _)) ->
18985 pp f "@[<2>%a@]" o#ident i
18986 | Ast.CeCon (_, Ast.BFalse, i, t) ->
18987 pp f "@[<2>@[<1>[%a]@]@ %a@]" o#class_params t
18989 | Ast.CeCon (_, Ast.BTrue, (Ast.IdLid (_, i)),
18990 (Ast.TyNil _)) -> pp f "@[<2>virtual@ %a@]" o#var i
18991 | Ast.CeCon (_, Ast.BTrue, (Ast.IdLid (_, i)), t) ->
18992 pp f "@[<2>virtual@ @[<1>[%a]@]@ %a@]"
18993 o#class_params t o#var i
18994 | Ast.CeFun (_, p, ce) ->
18995 pp f "@[<2>fun@ %a@ ->@ %a@]" o#simple_patt p
18997 | Ast.CeLet (_, r, bi, ce) ->
18998 pp f "@[<2>let %a%a@]@ @[<2>in@ %a@]" o#rec_flag r
18999 o#binding bi o#class_expr ce
19000 | Ast.CeStr (_, (Ast.PaNil _), cst) ->
19001 pp f "@[<hv0>@[<hv2>object %a@]@ end@]"
19002 o#class_str_item cst
19003 | Ast.CeStr (_, p, cst) ->
19005 "@[<hv0>@[<hv2>object @[<1>(%a)@]@ %a@]@ end@]"
19006 o#patt p o#class_str_item cst
19007 | Ast.CeTyc (_, ce, ct) ->
19008 pp f "@[<1>(%a :@ %a)@]" o#class_expr ce
19010 | Ast.CeAnt (_, s) -> o#anti f s
19011 | Ast.CeAnd (_, ce1, ce2) ->
19012 (o#class_expr f ce1;
19014 o#class_expr f ce2)
19015 | Ast.CeEq (_, ce1, (Ast.CeFun (_, p, ce2))) when
19016 is_irrefut_patt p ->
19017 pp f "@[<2>%a@ %a" o#class_expr ce1
19018 o#patt_class_expr_fun_args (p, ce2)
19019 | Ast.CeEq (_, ce1, ce2) ->
19020 pp f "@[<2>%a =@]@ %a" o#class_expr ce1
19022 | _ -> assert false
19024 method class_type =
19026 let () = o#node f ct Ast.loc_of_class_type
19029 | Ast.CtCon (_, Ast.BFalse, i, (Ast.TyNil _)) ->
19030 pp f "@[<2>%a@]" o#ident i
19031 | Ast.CtCon (_, Ast.BFalse, i, t) ->
19032 pp f "@[<2>[@,%a@]@,]@ %a" o#class_params t
19034 | Ast.CtCon (_, Ast.BTrue, (Ast.IdLid (_, i)),
19035 (Ast.TyNil _)) -> pp f "@[<2>virtual@ %a@]" o#var i
19036 | Ast.CtCon (_, Ast.BTrue, (Ast.IdLid (_, i)), t) ->
19037 pp f "@[<2>virtual@ [@,%a@]@,]@ %a" o#class_params
19039 | Ast.CtFun (_, t, ct) ->
19040 pp f "@[<2>%a@ ->@ %a@]" o#simple_ctyp t
19042 | Ast.CtSig (_, (Ast.TyNil _), csg) ->
19043 pp f "@[<hv0>@[<hv2>object@ %a@]@ end@]"
19044 o#class_sig_item csg
19045 | Ast.CtSig (_, t, csg) ->
19047 "@[<hv0>@[<hv2>object @[<1>(%a)@]@ %a@]@ end@]"
19048 o#ctyp t o#class_sig_item csg
19049 | Ast.CtAnt (_, s) -> o#anti f s
19050 | Ast.CtAnd (_, ct1, ct2) ->
19051 (o#class_type f ct1;
19053 o#class_type f ct2)
19054 | Ast.CtCol (_, ct1, ct2) ->
19055 pp f "%a :@ %a" o#class_type ct1 o#class_type ct2
19056 | Ast.CtEq (_, ct1, ct2) ->
19057 pp f "%a =@ %a" o#class_type ct1 o#class_type ct2
19058 | _ -> assert false
19060 method class_sig_item =
19062 let () = o#node f csg Ast.loc_of_class_sig_item
19065 | Ast.CgNil _ -> ()
19066 | Ast.CgSem (_, csg, (Ast.CgNil _)) |
19067 Ast.CgSem (_, (Ast.CgNil _), csg) ->
19068 o#class_sig_item f csg
19069 | Ast.CgSem (_, csg1, csg2) ->
19070 (o#class_sig_item f csg1;
19072 o#class_sig_item f csg2)
19073 | Ast.CgCtr (_, t1, t2) ->
19074 pp f "@[<2>constraint@ %a =@ %a%(%)@]" o#ctyp t1
19076 | Ast.CgInh (_, ct) ->
19077 pp f "@[<2>inherit@ %a%(%)@]" o#class_type ct
19079 | Ast.CgMth (_, s, pr, t) ->
19080 pp f "@[<2>method %a%a :@ %a%(%)@]" o#private_flag
19081 pr o#var s o#ctyp t semisep
19082 | Ast.CgVir (_, s, pr, t) ->
19083 pp f "@[<2>method virtual %a%a :@ %a%(%)@]"
19084 o#private_flag pr o#var s o#ctyp t semisep
19085 | Ast.CgVal (_, s, mu, vi, t) ->
19086 pp f "@[<2>%s %a%a%a :@ %a%(%)@]" value_val
19087 o#mutable_flag mu o#virtual_flag vi o#var s
19089 | Ast.CgAnt (_, s) -> pp f "%a%(%)" o#anti s semisep
19091 method class_str_item =
19093 let () = o#node f cst Ast.loc_of_class_str_item
19096 | Ast.CrNil _ -> ()
19097 | Ast.CrSem (_, cst, (Ast.CrNil _)) |
19098 Ast.CrSem (_, (Ast.CrNil _), cst) ->
19099 o#class_str_item f cst
19100 | Ast.CrSem (_, cst1, cst2) ->
19101 (o#class_str_item f cst1;
19103 o#class_str_item f cst2)
19104 | Ast.CrCtr (_, t1, t2) ->
19105 pp f "@[<2>constraint %a =@ %a%(%)@]" o#ctyp t1
19107 | Ast.CrInh (_, ce, "") ->
19108 pp f "@[<2>inherit@ %a%(%)@]" o#class_expr ce
19110 | Ast.CrInh (_, ce, s) ->
19111 pp f "@[<2>inherit@ %a as@ %a%(%)@]" o#class_expr
19113 | Ast.CrIni (_, e) ->
19114 pp f "@[<2>initializer@ %a%(%)@]" o#expr e semisep
19115 | Ast.CrMth (_, s, pr, e, (Ast.TyNil _)) ->
19116 pp f "@[<2>method %a%a =@ %a%(%)@]" o#private_flag
19117 pr o#var s o#expr e semisep
19118 | Ast.CrMth (_, s, pr, e, t) ->
19119 pp f "@[<2>method %a%a :@ %a =@ %a%(%)@]"
19120 o#private_flag pr o#var s o#ctyp t o#expr e
19122 | Ast.CrVir (_, s, pr, t) ->
19123 pp f "@[<2>method virtual@ %a%a :@ %a%(%)@]"
19124 o#private_flag pr o#var s o#ctyp t semisep
19125 | Ast.CrVvr (_, s, mu, t) ->
19126 pp f "@[<2>%s virtual %a%a :@ %a%(%)@]" value_val
19127 o#mutable_flag mu o#var s o#ctyp t semisep
19128 | Ast.CrVal (_, s, mu, e) ->
19129 pp f "@[<2>%s %a%a =@ %a%(%)@]" value_val
19130 o#mutable_flag mu o#var s o#expr e semisep
19131 | Ast.CrAnt (_, s) -> pp f "%a%(%)" o#anti s semisep
19136 | Ast.StExp (_, e) ->
19137 pp f "@[<0>%a%(%)@]@." o#expr e semisep
19138 | st -> pp f "@[<v0>%a@]@." o#str_item st
19140 method interf = fun f sg -> pp f "@[<v0>%a@]@." o#sig_item sg
19144 let with_outfile output_file fct arg =
19146 ((try fct f arg with | exn -> (close (); raise exn));
19149 match output_file with
19150 | None -> call (fun () -> ()) std_formatter
19152 let oc = open_out s in
19153 let f = formatter_of_out_channel oc
19154 in call (fun () -> close_out oc) f
19156 let print output_file fct =
19157 let o = new printer () in with_outfile output_file (fct o)
19159 let print_interf ?input_file:(_) ?output_file sg =
19160 print output_file (fun o -> o#interf) sg
19162 let print_implem ?input_file:(_) ?output_file st =
19163 print output_file (fun o -> o#implem) st
19167 module MakeMore (Syntax : Sig.Camlp4Syntax) : Sig.Printer(Syntax.
19170 include Make(Syntax)
19172 let semisep : sep ref = ref ("@\n" : sep)
19174 let margin = ref 78
19176 let comments = ref true
19178 let locations = ref false
19180 let curry_constr = ref false
19182 let print output_file fct =
19184 new printer ~comments: !comments ~curry_constr: !curry_constr
19186 let o = o#set_semisep !semisep in
19187 let o = if !locations then o#set_loc_and_comments else o
19189 with_outfile output_file
19191 let () = Format.pp_set_margin f !margin
19192 in Format.fprintf f "@[<v0>%a@]@." (fct o))
19194 let print_interf ?input_file:(_) ?output_file sg =
19195 print output_file (fun o -> o#interf) sg
19197 let print_implem ?input_file:(_) ?output_file st =
19198 print output_file (fun o -> o#implem) st
19201 if String.contains s '%'
19202 then failwith "-sep Format error, % found in string"
19203 else (Obj.magic (Struct.Token.Eval.string s : string) : sep)
19206 Options.add "-l" (Arg.Int (fun i -> margin := i))
19207 "<length> line length for pretty printing."
19210 Options.add "-ss" (Arg.Unit (fun () -> semisep := ";;"))
19211 " Print double semicolons."
19214 Options.add "-no_ss" (Arg.Unit (fun () -> semisep := ""))
19215 " Do not print double semicolons (default)."
19219 (Arg.String (fun s -> semisep := check_sep s))
19220 " Use this string between phrases."
19223 Options.add "-curry-constr" (Arg.Set curry_constr)
19224 "Use currified constructors."
19227 Options.add "-no_comments" (Arg.Clear comments)
19228 "Do not add comments."
19231 Options.add "-add_locations" (Arg.Set locations)
19232 "Add locations as comment."
19242 module Make (Syntax : Sig.Camlp4Syntax) :
19246 include Sig.Camlp4Syntax with module Loc = Syntax.Loc
19247 and module Token = Syntax.Token and module Ast = Syntax.Ast
19248 and module Gram = Syntax.Gram
19251 ?curry_constr: bool ->
19253 unit -> object ('a) inherit OCaml.Make(Syntax).printer
19257 string option -> (formatter -> 'a -> unit) -> 'a -> unit
19261 (printer -> formatter -> 'a -> unit) -> 'a -> unit
19265 module MakeMore (Syntax : Sig.Camlp4Syntax) : Sig.Printer(Syntax.
19274 let name = "Camlp4.Printers.OCamlr"
19276 let version = Sys.ocaml_version
19280 module Make (Syntax : Sig.Camlp4Syntax) =
19286 module PP_o = OCaml.Make(Syntax)
19293 let keywords = [ "where" ]
19294 and not_keywords = [ "false"; "function"; "true"; "val" ]
19297 (not (List.mem s not_keywords)) &&
19298 ((is_keyword s) || (List.mem s keywords))
19300 class printer ?curry_constr:(init_curry_constr = true)
19301 ?(comments = true) () =
19304 PP_o.printer ~curry_constr: init_curry_constr ~comments () as
19307 val semisep = (";" : sep)
19309 val andsep = ("@]@ @[<2>and@ " : sep)
19311 val value_val = "value"
19313 val value_let = "value"
19315 val mode = if comments then `comments else `no_comments
19317 val curry_constr = init_curry_constr
19319 val first_match_case = true
19321 method under_pipe = o
19323 method under_semi = o
19325 method reset_semi = o
19329 method private unset_first_match_case =
19330 {< first_match_case = false; >}
19332 method private set_first_match_case =
19333 {< first_match_case = true; >}
19337 let rec self right f e =
19338 let go_right = self right
19339 and go_left = self false
19342 | Ast.ExLet (_, r, bi, e1) ->
19345 pp f "@[<2>let %a%a@];@ %a" o#rec_flag r
19346 o#binding bi go_right e1
19347 else pp f "(%a)" o#expr e
19348 | Ast.ExSeq (_, e) -> go_right f e
19349 | Ast.ExSem (_, e1, e2) ->
19350 (pp f "%a;@ " go_left e1;
19351 (match (right, e2) with
19352 | (true, Ast.ExLet (_, r, bi, e3)) ->
19353 pp f "@[<2>let %a%a@];@ %a" o#rec_flag r
19354 o#binding bi go_right e3
19355 | _ -> go_right f e2))
19362 | "" -> pp f "$lid:\"\"$"
19363 | "[]" -> pp f "[]"
19364 | "()" -> pp f "()"
19365 | " True" -> pp f "True"
19366 | " False" -> pp f "False"
19368 (match lex_string v with
19369 | LIDENT s | UIDENT s | ESCAPED_IDENT s when
19370 is_keyword s -> pp f "%s__" s
19371 | SYMBOL s -> pp f "( %s )" s
19372 | LIDENT s | UIDENT s | ESCAPED_IDENT s ->
19373 pp_print_string f s
19376 (sprintf "Bad token used as an identifier: %s"
19377 (Token.to_string tok)))
19379 method type_params =
19383 | [ x ] -> pp f "@ %a" o#ctyp x
19384 | l -> pp f "@ @[<1>%a@]" (list o#ctyp "@ ") l
19386 method match_case =
19389 | Ast.McNil _ -> pp f "@ []"
19391 pp f "@ [ %a ]" o#set_first_match_case#match_case_aux
19394 method match_case_aux =
19397 | Ast.McNil _ -> ()
19398 | Ast.McAnt (_, s) -> o#anti f s
19399 | Ast.McOr (_, a1, a2) ->
19400 pp f "%a%a" o#match_case_aux a1
19401 o#unset_first_match_case#match_case_aux a2
19402 | Ast.McArr (_, p, (Ast.ExNil _), e) ->
19403 let () = if first_match_case then () else pp f "@ | "
19405 pp f "@[<2>%a@ ->@ %a@]" o#patt p o#under_pipe#expr
19407 | Ast.McArr (_, p, w, e) ->
19408 let () = if first_match_case then () else pp f "@ | "
19410 pp f "@[<2>%a@ when@ %a@ ->@ %a@]" o#patt p
19411 o#under_pipe#expr w o#under_pipe#expr e
19413 method sum_type = fun f t -> pp f "@[<hv0>[ %a ]@]" o#ctyp t
19417 let () = o#node f i Ast.loc_of_ident
19420 | Ast.IdApp (_, i1, i2) ->
19421 pp f "%a@ %a" o#dot_ident i1 o#dot_ident i2
19422 | i -> o#dot_ident f i
19424 method private dot_ident =
19426 let () = o#node f i Ast.loc_of_ident
19429 | Ast.IdAcc (_, i1, i2) ->
19430 pp f "%a.@,%a" o#dot_ident i1 o#dot_ident i2
19431 | Ast.IdAnt (_, s) -> o#anti f s
19432 | Ast.IdLid (_, s) | Ast.IdUid (_, s) -> o#var f s
19433 | i -> pp f "(%a)" o#ident i
19440 (Ast.PaId (_, (Ast.IdUid (_, "::")))), _)),
19443 let (pl, c) = o#mk_patt_list p
19447 pp f "@[<2>[@ %a@]@ ]" (list o#patt ";@ ") pl
19449 pp f "@[<2>[ %a ::@ %a ]@]"
19450 (list o#patt ";@ ") pl o#patt x)
19451 | p -> super#patt4 f p
19453 method expr_list_cons =
19455 let (el, c) = o#mk_expr_list e
19458 | None -> o#expr_list f el
19460 pp f "@[<2>[ %a ::@ %a ]@]" (list o#expr ";@ ") el
19465 let () = o#node f e Ast.loc_of_expr
19468 | Ast.ExAss (_, e1, e2) ->
19469 pp f "@[<2>%a@ :=@ %a@]" o#dot_expr e1 o#expr e2
19470 | Ast.ExFun (_, (Ast.McArr (_, p, (Ast.ExNil _), e)))
19471 when Ast.is_irrefut_patt p ->
19472 pp f "@[<2>fun@ %a@]" o#patt_expr_fun_args (p, e)
19473 | Ast.ExFun (_, a) ->
19474 pp f "@[<hv0>fun%a@]" o#match_case a
19475 | Ast.ExAsf _ -> pp f "@[<2>assert@ False@]"
19476 | e -> super#expr f e
19480 let () = o#node f e Ast.loc_of_expr
19484 (Ast.ExId (_, (Ast.IdLid (_, "val"))))) ->
19485 pp f "@[<2>%a.@,val@]" o#simple_expr e
19486 | e -> super#dot_expr f e
19490 let () = o#node f t Ast.loc_of_ctyp
19493 | Ast.TyDcl (_, tn, tp, te, cl) ->
19494 (pp f "@[<2>%a%a@]" o#var tn o#type_params tp;
19496 | Ast.TyNil _ -> ()
19497 | _ -> pp f " =@ %a" o#ctyp te);
19499 then pp f "@ %a" (list o#constrain "@ ") cl
19501 | Ast.TyCol (_, t1, (Ast.TyMut (_, t2))) ->
19502 pp f "@[%a :@ mutable %a@]" o#ctyp t1 o#ctyp t2
19503 | t -> super#ctyp f t
19505 method simple_ctyp =
19507 let () = o#node f t Ast.loc_of_ctyp
19510 | Ast.TyVrnEq (_, t) ->
19511 pp f "@[<2>[ =@ %a@]@ ]" o#ctyp t
19512 | Ast.TyVrnInf (_, t) ->
19513 pp f "@[<2>[ <@ %a@]@,]" o#ctyp t
19514 | Ast.TyVrnInfSup (_, t1, t2) ->
19515 pp f "@[<2>[ <@ %a@ >@ %a@]@ ]" o#ctyp t1 o#ctyp t2
19516 | Ast.TyVrnSup (_, t) ->
19517 pp f "@[<2>[ >@ %a@]@,]" o#ctyp t
19518 | Ast.TyMan (_, t1, t2) ->
19519 pp f "@[<2>%a@ ==@ %a@]" o#simple_ctyp t1
19521 | Ast.TyLab (_, s, t) ->
19522 pp f "@[<2>~%s:@ %a@]" s o#simple_ctyp t
19523 | t -> super#simple_ctyp f t
19528 | Ast.TyApp (_, t1, t2) ->
19529 (match get_ctyp_args t1 [ t2 ] with
19531 pp f "@[<2>%a@ %a@]" o#simple_ctyp t1
19534 pp f "@[<2>%a@]" (list o#simple_ctyp "@ ")
19536 | Ast.TyPol (_, t1, t2) ->
19537 let (a, al) = get_ctyp_args t1 []
19539 pp f "@[<2>! %a.@ %a@]" (list o#ctyp "@ ")
19540 (a :: al) o#ctyp t2
19541 | t -> super#ctyp1 f t
19543 method constructor_type =
19546 | Ast.TyAnd (loc, t1, t2) ->
19547 let () = o#node f t (fun _ -> loc)
19549 pp f "%a@ and %a" o#constructor_type t1
19550 o#constructor_type t2
19556 | Ast.StExp (_, e) ->
19557 pp f "@[<2>%a%(%)@]" o#expr e semisep
19558 | st -> super#str_item f st
19560 method module_expr =
19562 let () = o#node f me Ast.loc_of_module_expr
19565 | Ast.MeApp (_, me1, me2) ->
19566 pp f "@[<2>%a@ %a@]" o#module_expr me1
19567 o#simple_module_expr me2
19568 | me -> super#module_expr f me
19570 method simple_module_expr =
19572 let () = o#node f me Ast.loc_of_module_expr
19575 | Ast.MeApp (_, _, _) -> pp f "(%a)" o#module_expr me
19576 | _ -> super#simple_module_expr f me
19578 method implem = fun f st -> pp f "@[<v0>%a@]@." o#str_item st
19580 method class_type =
19582 let () = o#node f ct Ast.loc_of_class_type
19585 | Ast.CtFun (_, t, ct) ->
19586 pp f "@[<2>[ %a ] ->@ %a@]" o#simple_ctyp t
19588 | Ast.CtCon (_, Ast.BFalse, i, (Ast.TyNil _)) ->
19589 pp f "@[<2>%a@]" o#ident i
19590 | Ast.CtCon (_, Ast.BFalse, i, t) ->
19591 pp f "@[<2>%a [@,%a@]@,]" o#ident i o#class_params
19593 | Ast.CtCon (_, Ast.BTrue, (Ast.IdLid (_, i)),
19594 (Ast.TyNil _)) -> pp f "@[<2>virtual@ %a@]" o#var i
19595 | Ast.CtCon (_, Ast.BTrue, (Ast.IdLid (_, i)), t) ->
19596 pp f "@[<2>virtual@ %a@ [@,%a@]@,]" o#var i
19598 | ct -> super#class_type f ct
19600 method class_expr =
19602 let () = o#node f ce Ast.loc_of_class_expr
19605 | Ast.CeCon (_, Ast.BFalse, i, (Ast.TyNil _)) ->
19606 pp f "@[<2>%a@]" o#ident i
19607 | Ast.CeCon (_, Ast.BFalse, i, t) ->
19608 pp f "@[<2>%a@ @[<1>[%a]@]@]" o#ident i
19610 | Ast.CeCon (_, Ast.BTrue, (Ast.IdLid (_, i)),
19611 (Ast.TyNil _)) -> pp f "@[<2>virtual@ %a@]" o#var i
19612 | Ast.CeCon (_, Ast.BTrue, (Ast.IdLid (_, i)), t) ->
19613 pp f "@[<2>virtual@ %a@ @[<1>[%a]@]@]" o#var i
19615 | ce -> super#class_expr f ce
19619 let with_outfile = with_outfile
19623 let print_interf = print_interf
19625 let print_implem = print_implem
19629 module MakeMore (Syntax : Sig.Camlp4Syntax) : Sig.Printer(Syntax.
19632 include Make(Syntax)
19634 let margin = ref 78
19636 let comments = ref true
19638 let locations = ref false
19640 let curry_constr = ref true
19642 let print output_file fct =
19644 new printer ~comments: !comments ~curry_constr: !curry_constr
19646 let o = if !locations then o#set_loc_and_comments else o
19648 with_outfile output_file
19650 let () = Format.pp_set_margin f !margin
19651 in Format.fprintf f "@[<v0>%a@]@." (fct o))
19653 let print_interf ?input_file:(_) ?output_file sg =
19654 print output_file (fun o -> o#interf) sg
19656 let print_implem ?input_file:(_) ?output_file st =
19657 print output_file (fun o -> o#implem) st
19660 Options.add "-l" (Arg.Int (fun i -> margin := i))
19661 "<length> line length for pretty printing."
19664 Options.add "-no_comments" (Arg.Clear comments)
19665 "Do not add comments."
19668 Options.add "-add_locations" (Arg.Set locations)
19669 "Add locations as comment."
19677 module OCamlInitSyntax =
19680 (Ast : Sig.Camlp4Ast)
19682 Sig.Grammar.Static with module Loc = Ast.Loc with
19683 type Token.t = Sig.camlp4_token)
19684 (Quotation : Sig.Quotation with module Ast = Sig.Camlp4AstToAst(Ast)) :
19685 Sig.Camlp4Syntax with module Loc = Ast.Loc and module Ast = Ast
19686 and module Token = Gram.Token and module Gram = Gram
19687 and module Quotation = Quotation =
19689 module Loc = Ast.Loc
19695 module Token = Gram.Token
19699 type warning = Loc.t -> string -> unit
19701 let default_warning loc txt =
19702 Format.eprintf "<W> %a: %s@." Loc.print loc txt
19704 let current_warning = ref default_warning
19706 let print_warning loc txt = !current_warning loc txt
19708 let a_CHAR = Gram.Entry.mk "a_CHAR"
19710 let a_FLOAT = Gram.Entry.mk "a_FLOAT"
19712 let a_INT = Gram.Entry.mk "a_INT"
19714 let a_INT32 = Gram.Entry.mk "a_INT32"
19716 let a_INT64 = Gram.Entry.mk "a_INT64"
19718 let a_LABEL = Gram.Entry.mk "a_LABEL"
19720 let a_LIDENT = Gram.Entry.mk "a_LIDENT"
19722 let a_NATIVEINT = Gram.Entry.mk "a_NATIVEINT"
19724 let a_OPTLABEL = Gram.Entry.mk "a_OPTLABEL"
19726 let a_STRING = Gram.Entry.mk "a_STRING"
19728 let a_UIDENT = Gram.Entry.mk "a_UIDENT"
19730 let a_ident = Gram.Entry.mk "a_ident"
19732 let amp_ctyp = Gram.Entry.mk "amp_ctyp"
19734 let and_ctyp = Gram.Entry.mk "and_ctyp"
19736 let match_case = Gram.Entry.mk "match_case"
19738 let match_case0 = Gram.Entry.mk "match_case0"
19740 let binding = Gram.Entry.mk "binding"
19742 let class_declaration = Gram.Entry.mk "class_declaration"
19744 let class_description = Gram.Entry.mk "class_description"
19746 let class_expr = Gram.Entry.mk "class_expr"
19748 let class_fun_binding = Gram.Entry.mk "class_fun_binding"
19750 let class_fun_def = Gram.Entry.mk "class_fun_def"
19752 let class_info_for_class_expr =
19753 Gram.Entry.mk "class_info_for_class_expr"
19755 let class_info_for_class_type =
19756 Gram.Entry.mk "class_info_for_class_type"
19758 let class_longident = Gram.Entry.mk "class_longident"
19760 let class_longident_and_param =
19761 Gram.Entry.mk "class_longident_and_param"
19763 let class_name_and_param = Gram.Entry.mk "class_name_and_param"
19765 let class_sig_item = Gram.Entry.mk "class_sig_item"
19767 let class_signature = Gram.Entry.mk "class_signature"
19769 let class_str_item = Gram.Entry.mk "class_str_item"
19771 let class_structure = Gram.Entry.mk "class_structure"
19773 let class_type = Gram.Entry.mk "class_type"
19775 let class_type_declaration = Gram.Entry.mk "class_type_declaration"
19777 let class_type_longident = Gram.Entry.mk "class_type_longident"
19779 let class_type_longident_and_param =
19780 Gram.Entry.mk "class_type_longident_and_param"
19782 let class_type_plus = Gram.Entry.mk "class_type_plus"
19784 let comma_ctyp = Gram.Entry.mk "comma_ctyp"
19786 let comma_expr = Gram.Entry.mk "comma_expr"
19788 let comma_ipatt = Gram.Entry.mk "comma_ipatt"
19790 let comma_patt = Gram.Entry.mk "comma_patt"
19792 let comma_type_parameter = Gram.Entry.mk "comma_type_parameter"
19794 let constrain = Gram.Entry.mk "constrain"
19796 let constructor_arg_list = Gram.Entry.mk "constructor_arg_list"
19798 let constructor_declaration = Gram.Entry.mk "constructor_declaration"
19800 let constructor_declarations =
19801 Gram.Entry.mk "constructor_declarations"
19803 let ctyp = Gram.Entry.mk "ctyp"
19805 let cvalue_binding = Gram.Entry.mk "cvalue_binding"
19807 let direction_flag = Gram.Entry.mk "direction_flag"
19809 let dummy = Gram.Entry.mk "dummy"
19811 let entry_eoi = Gram.Entry.mk "entry_eoi"
19813 let eq_expr = Gram.Entry.mk "eq_expr"
19815 let expr = Gram.Entry.mk "expr"
19817 let expr_eoi = Gram.Entry.mk "expr_eoi"
19819 let field_expr = Gram.Entry.mk "field_expr"
19821 let field_expr_list = Gram.Entry.mk "field_expr_list"
19823 let fun_binding = Gram.Entry.mk "fun_binding"
19825 let fun_def = Gram.Entry.mk "fun_def"
19827 let ident = Gram.Entry.mk "ident"
19829 let implem = Gram.Entry.mk "implem"
19831 let interf = Gram.Entry.mk "interf"
19833 let ipatt = Gram.Entry.mk "ipatt"
19835 let ipatt_tcon = Gram.Entry.mk "ipatt_tcon"
19837 let label = Gram.Entry.mk "label"
19839 let label_declaration = Gram.Entry.mk "label_declaration"
19841 let label_declaration_list = Gram.Entry.mk "label_declaration_list"
19843 let label_expr = Gram.Entry.mk "label_expr"
19845 let label_expr_list = Gram.Entry.mk "label_expr_list"
19847 let label_ipatt = Gram.Entry.mk "label_ipatt"
19849 let label_ipatt_list = Gram.Entry.mk "label_ipatt_list"
19851 let label_longident = Gram.Entry.mk "label_longident"
19853 let label_patt = Gram.Entry.mk "label_patt"
19855 let label_patt_list = Gram.Entry.mk "label_patt_list"
19857 let labeled_ipatt = Gram.Entry.mk "labeled_ipatt"
19859 let let_binding = Gram.Entry.mk "let_binding"
19861 let meth_list = Gram.Entry.mk "meth_list"
19863 let meth_decl = Gram.Entry.mk "meth_decl"
19865 let module_binding = Gram.Entry.mk "module_binding"
19867 let module_binding0 = Gram.Entry.mk "module_binding0"
19869 let module_declaration = Gram.Entry.mk "module_declaration"
19871 let module_expr = Gram.Entry.mk "module_expr"
19873 let module_longident = Gram.Entry.mk "module_longident"
19875 let module_longident_with_app =
19876 Gram.Entry.mk "module_longident_with_app"
19878 let module_rec_declaration = Gram.Entry.mk "module_rec_declaration"
19880 let module_type = Gram.Entry.mk "module_type"
19882 let more_ctyp = Gram.Entry.mk "more_ctyp"
19884 let name_tags = Gram.Entry.mk "name_tags"
19886 let opt_as_lident = Gram.Entry.mk "opt_as_lident"
19888 let opt_class_self_patt = Gram.Entry.mk "opt_class_self_patt"
19890 let opt_class_self_type = Gram.Entry.mk "opt_class_self_type"
19892 let opt_class_signature = Gram.Entry.mk "opt_class_signature"
19894 let opt_class_structure = Gram.Entry.mk "opt_class_structure"
19896 let opt_comma_ctyp = Gram.Entry.mk "opt_comma_ctyp"
19898 let opt_dot_dot = Gram.Entry.mk "opt_dot_dot"
19900 let opt_eq_ctyp = Gram.Entry.mk "opt_eq_ctyp"
19902 let opt_expr = Gram.Entry.mk "opt_expr"
19904 let opt_meth_list = Gram.Entry.mk "opt_meth_list"
19906 let opt_mutable = Gram.Entry.mk "opt_mutable"
19908 let opt_polyt = Gram.Entry.mk "opt_polyt"
19910 let opt_private = Gram.Entry.mk "opt_private"
19912 let opt_rec = Gram.Entry.mk "opt_rec"
19914 let opt_sig_items = Gram.Entry.mk "opt_sig_items"
19916 let opt_str_items = Gram.Entry.mk "opt_str_items"
19918 let opt_virtual = Gram.Entry.mk "opt_virtual"
19920 let opt_when_expr = Gram.Entry.mk "opt_when_expr"
19922 let patt = Gram.Entry.mk "patt"
19924 let patt_as_patt_opt = Gram.Entry.mk "patt_as_patt_opt"
19926 let patt_eoi = Gram.Entry.mk "patt_eoi"
19928 let patt_tcon = Gram.Entry.mk "patt_tcon"
19930 let phrase = Gram.Entry.mk "phrase"
19932 let poly_type = Gram.Entry.mk "poly_type"
19934 let row_field = Gram.Entry.mk "row_field"
19936 let sem_expr = Gram.Entry.mk "sem_expr"
19938 let sem_expr_for_list = Gram.Entry.mk "sem_expr_for_list"
19940 let sem_patt = Gram.Entry.mk "sem_patt"
19942 let sem_patt_for_list = Gram.Entry.mk "sem_patt_for_list"
19944 let semi = Gram.Entry.mk "semi"
19946 let sequence = Gram.Entry.mk "sequence"
19948 let do_sequence = Gram.Entry.mk "do_sequence"
19950 let sig_item = Gram.Entry.mk "sig_item"
19952 let sig_items = Gram.Entry.mk "sig_items"
19954 let star_ctyp = Gram.Entry.mk "star_ctyp"
19956 let str_item = Gram.Entry.mk "str_item"
19958 let str_items = Gram.Entry.mk "str_items"
19960 let top_phrase = Gram.Entry.mk "top_phrase"
19962 let type_constraint = Gram.Entry.mk "type_constraint"
19964 let type_declaration = Gram.Entry.mk "type_declaration"
19966 let type_ident_and_parameters =
19967 Gram.Entry.mk "type_ident_and_parameters"
19969 let type_kind = Gram.Entry.mk "type_kind"
19971 let type_longident = Gram.Entry.mk "type_longident"
19973 let type_longident_and_parameters =
19974 Gram.Entry.mk "type_longident_and_parameters"
19976 let type_parameter = Gram.Entry.mk "type_parameter"
19978 let type_parameters = Gram.Entry.mk "type_parameters"
19980 let typevars = Gram.Entry.mk "typevars"
19982 let use_file = Gram.Entry.mk "use_file"
19984 let val_longident = Gram.Entry.mk "val_longident"
19986 let value_let = Gram.Entry.mk "value_let"
19988 let value_val = Gram.Entry.mk "value_val"
19990 let with_constr = Gram.Entry.mk "with_constr"
19992 let expr_quot = Gram.Entry.mk "quotation of expression"
19994 let patt_quot = Gram.Entry.mk "quotation of pattern"
19996 let ctyp_quot = Gram.Entry.mk "quotation of type"
19998 let str_item_quot = Gram.Entry.mk "quotation of structure item"
20000 let sig_item_quot = Gram.Entry.mk "quotation of signature item"
20002 let class_str_item_quot =
20003 Gram.Entry.mk "quotation of class structure item"
20005 let class_sig_item_quot =
20006 Gram.Entry.mk "quotation of class signature item"
20008 let module_expr_quot = Gram.Entry.mk "quotation of module expression"
20010 let module_type_quot = Gram.Entry.mk "quotation of module type"
20012 let class_type_quot = Gram.Entry.mk "quotation of class type"
20014 let class_expr_quot = Gram.Entry.mk "quotation of class expression"
20016 let with_constr_quot = Gram.Entry.mk "quotation of with constraint"
20018 let binding_quot = Gram.Entry.mk "quotation of binding"
20020 let rec_binding_quot = Gram.Entry.mk "quotation of record binding"
20022 let match_case_quot =
20023 Gram.Entry.mk "quotation of match_case (try/match/function case)"
20025 let module_binding_quot =
20026 Gram.Entry.mk "quotation of module rec binding"
20028 let ident_quot = Gram.Entry.mk "quotation of identifier"
20031 Gram.Entry.mk "prefix operator (start with '!', '?', '~')"
20035 "infix operator (level 0) (comparison operators, and some others)"
20038 Gram.Entry.mk "infix operator (level 1) (start with '^', '@')"
20041 Gram.Entry.mk "infix operator (level 2) (start with '+', '-')"
20044 Gram.Entry.mk "infix operator (level 3) (start with '*', '/', '%')"
20048 "infix operator (level 4) (start with \"**\") (right assoc)"
20051 Gram.extend (top_phrase : 'top_phrase Gram.Entry.t)
20056 (((function | EOI -> true | _ -> false), "EOI")) ],
20058 (fun (__camlp4_0 : Gram.Token.t)
20059 (_loc : Gram.Loc.t) ->
20060 match __camlp4_0 with
20061 | EOI -> (None : 'top_phrase)
20062 | _ -> assert false))) ]) ]))
20065 module AntiquotSyntax =
20067 module Loc = Ast.Loc
20069 module Ast = Sig.Camlp4AstToAst(Ast)
20073 let antiquot_expr = Gram.Entry.mk "antiquot_expr"
20075 let antiquot_patt = Gram.Entry.mk "antiquot_patt"
20078 (Gram.extend (antiquot_expr : 'antiquot_expr Gram.Entry.t)
20083 (Gram.Entry.obj (expr : 'expr Gram.Entry.t));
20085 (((function | EOI -> true | _ -> false),
20088 (fun (__camlp4_0 : Gram.Token.t) (x : 'expr)
20089 (_loc : Gram.Loc.t) ->
20090 match __camlp4_0 with
20091 | EOI -> (x : 'antiquot_expr)
20092 | _ -> assert false))) ]) ]))
20094 Gram.extend (antiquot_patt : 'antiquot_patt Gram.Entry.t)
20099 (Gram.Entry.obj (patt : 'patt Gram.Entry.t));
20101 (((function | EOI -> true | _ -> false),
20104 (fun (__camlp4_0 : Gram.Token.t) (x : 'patt)
20105 (_loc : Gram.Loc.t) ->
20106 match __camlp4_0 with
20107 | EOI -> (x : 'antiquot_patt)
20108 | _ -> assert false))) ]) ]))
20111 let parse_expr loc str = Gram.parse_string antiquot_expr loc str
20113 let parse_patt loc str = Gram.parse_string antiquot_patt loc str
20117 module Quotation = Quotation
20119 let wrap directive_handler pa init_loc cs =
20121 let (pl, stopped_at_directive) = pa loc cs
20123 match stopped_at_directive with
20126 (match List.rev pl with
20127 | [] -> assert false
20129 (match directive_handler x with
20131 | Some x -> x :: xs))
20132 in (List.rev pl) @ (loop new_loc)
20136 let parse_implem ?(directive_handler = fun _ -> None) _loc cs =
20137 let l = wrap directive_handler (Gram.parse implem) _loc cs
20138 in Ast.stSem_of_list l
20140 let parse_interf ?(directive_handler = fun _ -> None) _loc cs =
20141 let l = wrap directive_handler (Gram.parse interf) _loc cs
20142 in Ast.sgSem_of_list l
20144 let print_interf ?input_file:(_) ?output_file:(_) _ =
20145 failwith "No interface printer"
20147 let print_implem ?input_file:(_) ?output_file:(_) _ =
20148 failwith "No implementation printer"
20156 type camlp4_token =
20158 | KEYWORD of string
20162 | ESCAPED_IDENT of string
20163 | INT of int * string
20164 | INT32 of int32 * string
20165 | INT64 of int64 * string
20166 | NATIVEINT of nativeint * string
20167 | FLOAT of float * string
20168 | CHAR of char * string
20169 | STRING of string * string
20171 | OPTLABEL of string
20172 | QUOTATION of Sig.quotation
20173 | ANTIQUOT of string * string
20174 | COMMENT of string
20177 | LINE_DIRECTIVE of int * string option
20182 module Loc : Sig.Loc
20184 module Ast : Sig.Camlp4Ast with module Loc = Loc
20186 module Token : Sig.Token with module Loc = Loc and type t = camlp4_token
20188 module Lexer : Sig.Lexer with module Loc = Loc and module Token = Token
20190 module Gram : Sig.Grammar.Static with module Loc = Loc
20191 and module Token = Token
20194 Sig.Quotation with module Ast = Sig.Camlp4AstToAst(Ast)
20196 module DynLoader : Sig.DynLoader
20198 module AstFilters : Sig.AstFilters with module Ast = Ast
20200 module Syntax : Sig.Camlp4Syntax with module Loc = Loc
20201 and module Token = Token and module Ast = Ast and module Gram = Gram
20202 and module Quotation = Quotation
20206 module OCaml : Sig.Printer(Ast).S
20208 module OCamlr : Sig.Printer(Ast).S
20210 module DumpOCamlAst : Sig.Printer(Ast).S
20212 module DumpCamlp4Ast : Sig.Printer(Ast).S
20214 module Null : Sig.Printer(Ast).S
20218 module MakeGram (Lexer : Sig.Lexer with module Loc = Loc) :
20219 Sig.Grammar.Static with module Loc = Loc and module Token = Lexer.Token
20221 module MakeSyntax (U : sig end) : Sig.Syntax
20226 struct let name = "Camlp4.PreCast"
20227 let version = Sys.ocaml_version
20230 type camlp4_token =
20232 | KEYWORD of string
20236 | ESCAPED_IDENT of string
20237 | INT of int * string
20238 | INT32 of int32 * string
20239 | INT64 of int64 * string
20240 | NATIVEINT of nativeint * string
20241 | FLOAT of float * string
20242 | CHAR of char * string
20243 | STRING of string * string
20245 | OPTLABEL of string
20246 | QUOTATION of Sig.quotation
20247 | ANTIQUOT of string * string
20248 | COMMENT of string
20251 | LINE_DIRECTIVE of int * string option
20254 module Loc = Struct.Loc
20256 module Ast = Struct.Camlp4Ast.Make(Loc)
20258 module Token = Struct.Token.Make(Loc)
20260 module Lexer = Struct.Lexer.Make(Token)
20262 module Gram = Struct.Grammar.Static.Make(Lexer)
20264 module DynLoader = Struct.DynLoader
20266 module Quotation = Struct.Quotation.Make(Ast)
20268 module MakeSyntax (U : sig end) =
20269 OCamlInitSyntax.Make(Ast)(Gram)(Quotation)
20271 module Syntax = MakeSyntax(struct end)
20273 module AstFilters = Struct.AstFilters.Make(Ast)
20275 module MakeGram = Struct.Grammar.Static.Make
20279 module OCaml = Printers.OCaml.Make(Syntax)
20281 module OCamlr = Printers.OCamlr.Make(Syntax)
20283 module DumpOCamlAst = Printers.DumpOCamlAst.Make(Syntax)
20285 module DumpCamlp4Ast = Printers.DumpCamlp4Ast.Make(Syntax)
20287 module Null = Printers.Null.Make(Syntax)
20296 (Id : Sig.Id) (Plugin : functor (Unit : sig end) -> sig end) :
20299 module SyntaxPlugin
20300 (Id : Sig.Id) (SyntaxPlugin : functor (Syn : Sig.Syntax) -> sig end) :
20303 module SyntaxExtension
20304 (Id : Sig.Id) (SyntaxExtension : Sig.SyntaxExtension) : sig end
20306 module OCamlSyntaxExtension
20309 functor (Syntax : Sig.Camlp4Syntax) -> Sig.Camlp4Syntax) :
20312 type 'a parser_fun =
20313 ?directive_handler: ('a -> 'a option) ->
20314 PreCast.Loc.t -> char Stream.t -> 'a
20316 val register_str_item_parser : PreCast.Ast.str_item parser_fun -> unit
20318 val register_sig_item_parser : PreCast.Ast.sig_item parser_fun -> unit
20320 val register_parser :
20321 PreCast.Ast.str_item parser_fun ->
20322 PreCast.Ast.sig_item parser_fun -> unit
20325 (Id : Sig.Id) (Maker : functor (Ast : Sig.Ast) -> Sig.Parser(Ast).S) :
20330 (Maker : functor (Ast : Sig.Camlp4Ast) -> Sig.Parser(Ast).S) :
20333 module OCamlPreCastParser
20334 (Id : Sig.Id) (Parser : Sig.Parser(PreCast.Ast).S) : sig end
20336 type 'a printer_fun =
20337 ?input_file: string -> ?output_file: string -> 'a -> unit
20339 val register_str_item_printer : PreCast.Ast.str_item printer_fun -> unit
20341 val register_sig_item_printer : PreCast.Ast.sig_item printer_fun -> unit
20343 val register_printer :
20344 PreCast.Ast.str_item printer_fun ->
20345 PreCast.Ast.sig_item printer_fun -> unit
20349 (Maker : functor (Syn : Sig.Syntax) -> Sig.Printer(Syn.Ast).S) :
20352 module OCamlPrinter
20354 (Maker : functor (Syn : Sig.Camlp4Syntax) -> Sig.Printer(Syn.Ast).S) :
20357 module OCamlPreCastPrinter
20358 (Id : Sig.Id) (Printer : Sig.Printer(PreCast.Ast).S) : sig end
20361 (Id : Sig.Id) (Maker : functor (F : Sig.AstFilters) -> sig end) :
20364 val declare_dyn_module : string -> (unit -> unit) -> unit
20366 val iter_and_take_callbacks : ((string * (unit -> unit)) -> unit) -> unit
20368 val loaded_modules : (string list) ref
20370 module CurrentParser : Sig.Parser(PreCast.Ast).S
20372 module CurrentPrinter : Sig.Printer(PreCast.Ast).S
20374 val enable_ocaml_printer : unit -> unit
20376 val enable_ocamlr_printer : unit -> unit
20378 val enable_null_printer : unit -> unit
20380 val enable_dump_ocaml_ast_printer : unit -> unit
20382 val enable_dump_camlp4_ast_printer : unit -> unit
20386 module PP = Printers
20390 type 'a parser_fun =
20391 ?directive_handler: ('a -> 'a option) ->
20392 PreCast.Loc.t -> char Stream.t -> 'a
20394 type 'a printer_fun =
20395 ?input_file: string -> ?output_file: string -> 'a -> unit
20397 let sig_item_parser =
20398 ref (fun ?directive_handler:(_) _ _ -> failwith "No interface parser")
20400 let str_item_parser =
20402 (fun ?directive_handler:(_) _ _ ->
20403 failwith "No implementation parser")
20405 let sig_item_printer =
20407 (fun ?input_file:(_) ?output_file:(_) _ ->
20408 failwith "No interface printer")
20410 let str_item_printer =
20412 (fun ?input_file:(_) ?output_file:(_) _ ->
20413 failwith "No implementation printer")
20415 let callbacks = Queue.create ()
20417 let loaded_modules = ref []
20419 let iter_and_take_callbacks f =
20420 let rec loop () = loop (f (Queue.take callbacks))
20421 in try loop () with | Queue.Empty -> ()
20423 let declare_dyn_module m f =
20424 (loaded_modules := m :: !loaded_modules; Queue.add (m, f) callbacks)
20426 let register_str_item_parser f = str_item_parser := f
20428 let register_sig_item_parser f = sig_item_parser := f
20430 let register_parser f g = (str_item_parser := f; sig_item_parser := g)
20432 let register_str_item_printer f = str_item_printer := f
20434 let register_sig_item_printer f = sig_item_printer := f
20436 let register_printer f g = (str_item_printer := f; sig_item_printer := g)
20439 (Id : Sig.Id) (Maker : functor (Unit : sig end) -> sig end) =
20442 declare_dyn_module Id.name
20443 (fun _ -> let module M = Maker(struct end) in ())
20447 module SyntaxExtension (Id : Sig.Id) (Maker : Sig.SyntaxExtension) =
20450 declare_dyn_module Id.name
20451 (fun _ -> let module M = Maker(Syntax) in ())
20455 module OCamlSyntaxExtension
20457 (Maker : functor (Syn : Sig.Camlp4Syntax) -> Sig.Camlp4Syntax) =
20460 declare_dyn_module Id.name
20461 (fun _ -> let module M = Maker(Syntax) in ())
20465 module SyntaxPlugin
20466 (Id : Sig.Id) (Maker : functor (Syn : Sig.Syntax) -> sig end) =
20469 declare_dyn_module Id.name
20470 (fun _ -> let module M = Maker(Syntax) in ())
20476 (Maker : functor (Syn : Sig.Syntax) -> Sig.Printer(Syn.Ast).S) =
20479 declare_dyn_module Id.name
20480 (fun _ -> let module M = Maker(Syntax)
20481 in register_printer M.print_implem M.print_interf)
20485 module OCamlPrinter
20487 (Maker : functor (Syn : Sig.Camlp4Syntax) -> Sig.Printer(Syn.Ast).S) =
20490 declare_dyn_module Id.name
20491 (fun _ -> let module M = Maker(Syntax)
20492 in register_printer M.print_implem M.print_interf)
20496 module OCamlPreCastPrinter
20497 (Id : Sig.Id) (P : Sig.Printer(PreCast.Ast).S) =
20500 declare_dyn_module Id.name
20501 (fun _ -> register_printer P.print_implem P.print_interf)
20506 (Id : Sig.Id) (Maker : functor (Ast : Sig.Ast) -> Sig.Parser(Ast).S) =
20509 declare_dyn_module Id.name
20510 (fun _ -> let module M = Maker(PreCast.Ast)
20511 in register_parser M.parse_implem M.parse_interf)
20517 (Maker : functor (Ast : Sig.Camlp4Ast) -> Sig.Parser(Ast).S) =
20520 declare_dyn_module Id.name
20521 (fun _ -> let module M = Maker(PreCast.Ast)
20522 in register_parser M.parse_implem M.parse_interf)
20526 module OCamlPreCastParser (Id : Sig.Id) (P : Sig.Parser(PreCast.Ast).S) =
20529 declare_dyn_module Id.name
20530 (fun _ -> register_parser P.parse_implem P.parse_interf)
20535 (Id : Sig.Id) (Maker : functor (F : Sig.AstFilters) -> sig end) =
20538 declare_dyn_module Id.name
20539 (fun _ -> let module M = Maker(AstFilters) in ())
20543 let _ = sig_item_parser := Syntax.parse_interf
20545 let _ = str_item_parser := Syntax.parse_implem
20547 module CurrentParser =
20551 let parse_interf ?directive_handler loc strm =
20552 !sig_item_parser ?directive_handler loc strm
20554 let parse_implem ?directive_handler loc strm =
20555 !str_item_parser ?directive_handler loc strm
20559 module CurrentPrinter =
20563 let print_interf ?input_file ?output_file ast =
20564 !sig_item_printer ?input_file ?output_file ast
20566 let print_implem ?input_file ?output_file ast =
20567 !str_item_printer ?input_file ?output_file ast
20571 let enable_ocaml_printer () =
20572 let module M = OCamlPrinter(PP.OCaml.Id)(PP.OCaml.MakeMore) in ()
20574 let enable_ocamlr_printer () =
20575 let module M = OCamlPrinter(PP.OCamlr.Id)(PP.OCamlr.MakeMore) in ()
20577 let enable_dump_ocaml_ast_printer () =
20578 let module M = OCamlPrinter(PP.DumpOCamlAst.Id)(PP.DumpOCamlAst.Make)
20581 let enable_dump_camlp4_ast_printer () =
20582 let module M = Printer(PP.DumpCamlp4Ast.Id)(PP.DumpCamlp4Ast.Make)
20585 let enable_null_printer () =
20586 let module M = Printer(PP.Null.Id)(PP.Null.Make) in ()