From 978fd7e56b141f7e4c8930acdbf0a806489e63a5 Mon Sep 17 00:00:00 2001 From: Coccinelle Date: Sun, 3 Oct 2010 14:00:48 +0200 Subject: [PATCH] Release coccinelle-0.1.9-rc1 Release Candidate 1 for coccinelle-0.1.9 --- changes.txt | 50 + cocci.ml | 38 +- cocci.mli | 7 +- commitmsg | 75 +- commons/Makefile | 2 +- commons/common.ml | 61 +- commons/common.mli | 4 + commons/credits.txt | 4 +- commons/ograph_extended.ml | 2 +- commons/ograph_simple.ml | 130 + commons/ograph_simple.mli | 34 + configure | 9 +- ctl/ctl_engine.ml | 25 +- demos/change_all_param.c | 19 + demos/change_all_param.cocci | 69 + docs/manual/Makefile | 36 +- docs/manual/cocci_syntax.tex | 19 +- docs/manual/hevea.sty | 90 + docs/manual/main.tex | 28 +- .../{cocci_syntax.pdf => main_grammar.pdf} | Bin 272988 -> 273265 bytes docs/manual/manual.pdf | Bin 350573 -> 351444 bytes docs/manual/options.pdf | Bin 93633 -> 93982 bytes docs/manual/spatch_options.tex | 6 + engine/asttoctl2.ml | 268 +- engine/asttoctl2.mli | 5 +- engine/cocci_vs_c.ml | 107 +- engine/cocci_vs_c.mli | 4 + engine/ctlcocci_integration.ml | 3 +- engine/flag_matcher.ml | 3 + engine/pattern_c.ml | 4 +- engine/postprocess_transinfo.ml | 53 +- engine/pretty_print_engine.ml | 3 +- engine/transformation_c.ml | 10 +- globals/config.ml.in | 2 +- main.ml | 315 +- parsing_c/Makefile | 19 +- parsing_c/ast_c.ml | 21 +- parsing_c/compare_c.ml | 8 +- parsing_c/compare_c.mli | 10 +- parsing_c/control_flow_c_build.ml | 11 +- parsing_c/cpp_analysis_c.ml | 487 + parsing_c/cpp_analysis_c.mli | 4 + parsing_c/cpp_ast_c.ml | 79 +- parsing_c/cpp_ast_c.mli | 23 +- parsing_c/cpp_token_c.ml | 274 +- parsing_c/cpp_token_c.mli | 24 +- parsing_c/flag_parsing_c.ml | 4 + parsing_c/lexer_c.mll | 22 +- parsing_c/lexer_parser.mli | 6 +- parsing_c/lib_parsing_c.ml | 61 +- parsing_c/parse_c.ml | 757 +- parsing_c/parse_c.mli | 53 +- parsing_c/parser_c.mly | 4 +- parsing_c/parsing_consistency_c.ml | 195 + parsing_c/parsing_consistency_c.mli | 4 + parsing_c/parsing_hacks.ml | 240 +- parsing_c/parsing_hacks.mli | 24 +- parsing_c/parsing_recovery_c.ml | 143 + parsing_c/parsing_recovery_c.mli | 4 + parsing_c/pretty_print_c.ml | 99 +- parsing_c/pretty_print_c.mli | 122 +- parsing_c/sexp_ast_c.ml | 4023 ++ parsing_c/sexp_ast_c.mli | 8 + parsing_c/test_parsing_c.ml | 236 +- parsing_c/token_c.ml | 2 +- parsing_c/token_helpers.ml | 2 + parsing_c/token_helpers.mli | 2 + parsing_c/type_annoter_c.ml | 20 +- parsing_c/unparse_c.ml | 3 +- parsing_c/unparse_c.mli | 7 +- parsing_c/unparse_cocci.ml | 17 +- parsing_c/unparse_cocci.mli | 2 +- parsing_c/unparse_hrule.ml | 20 +- parsing_c/unparse_hrule.mli | 4 +- parsing_c/visitor_c.ml | 5 + parsing_cocci/.depend | 24 +- parsing_cocci/Makefile | 4 +- parsing_cocci/ast0_cocci.ml | 9 +- parsing_cocci/ast0toast.ml | 8 +- parsing_cocci/ast_cocci.ml | 12 +- parsing_cocci/ast_cocci.mli | 17 +- parsing_cocci/check_meta.ml | 1 + parsing_cocci/compute_lines.ml | 26 +- parsing_cocci/compute_lines.mli | 31 +- parsing_cocci/context_neg.ml | 13 +- parsing_cocci/data.ml | 10 + parsing_cocci/data.mli | 5 + parsing_cocci/free_vars.ml | 238 +- parsing_cocci/free_vars.mli | 4 +- parsing_cocci/function_prototypes.ml | 6 +- parsing_cocci/iso_pattern.ml | 3 +- parsing_cocci/lexer_cocci.mll | 14 +- parsing_cocci/parse_aux.ml | 27 + parsing_cocci/parse_cocci.ml | 100 +- parsing_cocci/parse_cocci.mli | 12 +- parsing_cocci/parser_cocci_menhir.ml | 36805 +++++++++------- parsing_cocci/parser_cocci_menhir.mli | 4 +- parsing_cocci/parser_cocci_menhir.mly | 302 +- parsing_cocci/single_statement.ml | 2 +- parsing_cocci/unparse_ast0.ml | 6 +- python/no_pycocci_aux.ml | 2 +- python/yes_pycocci_aux.ml | 2 +- readme.txt | 7 +- standard.h | 18 +- testing.ml | 4 + testing.mli | 7 +- tests/SCORE_expected.sexp | 29 +- tests/SCORE_expected.sexp.save | 6 +- tests/a.c | 9 + tests/a.cocci | 16 + tests/a.res | 9 + tests/fsh.c | 4 + tests/fsh.cocci | 12 + tests/fsh.res | 4 + tests/macro_int16.res | 2 +- tests/memory.c | 7 + tests/memory.cocci | 4 + tests/memory.res | 6 + tests/notest.c | 6 + tests/notest.cocci | 9 + tests/notest.res | 6 + tests/overshoot.c | 9 + tests/overshoot.cocci | 31 + tests/overshoot.res | 6 + tests/retval.c | 24 + tests/retval.cocci | 10 + tests/retval.res | 18 + tests/struct.cocci | 2 +- tests/tydisj.c | 2 + tests/tydisj.cocci | 25 + tests/tydisj.res | 2 + tools/Makefile | 8 +- tools/bridge.ml | 2 +- tools/spp.ml | 91 + 134 files changed, 29976 insertions(+), 16640 deletions(-) rewrite commitmsg (99%) create mode 100644 commons/ograph_simple.ml create mode 100644 commons/ograph_simple.mli create mode 100644 demos/change_all_param.c create mode 100644 demos/change_all_param.cocci create mode 100644 docs/manual/hevea.sty rename docs/manual/{cocci_syntax.pdf => main_grammar.pdf} (85%) create mode 100644 parsing_c/cpp_analysis_c.ml create mode 100644 parsing_c/cpp_analysis_c.mli create mode 100644 parsing_c/parsing_consistency_c.ml create mode 100644 parsing_c/parsing_consistency_c.mli create mode 100644 parsing_c/parsing_recovery_c.ml create mode 100644 parsing_c/parsing_recovery_c.mli rewrite parsing_c/pretty_print_c.mli (94%) create mode 100644 parsing_c/sexp_ast_c.ml create mode 100644 parsing_c/sexp_ast_c.mli rewrite parsing_cocci/compute_lines.mli (90%) create mode 100644 tests/a.c create mode 100644 tests/a.cocci create mode 100644 tests/a.res create mode 100644 tests/fsh.c create mode 100644 tests/fsh.cocci create mode 100644 tests/fsh.res create mode 100644 tests/memory.c create mode 100644 tests/memory.cocci create mode 100644 tests/memory.res create mode 100644 tests/notest.c create mode 100644 tests/notest.cocci create mode 100644 tests/notest.res create mode 100644 tests/overshoot.c create mode 100644 tests/overshoot.cocci create mode 100644 tests/overshoot.res create mode 100644 tests/retval.c create mode 100644 tests/retval.cocci create mode 100644 tests/retval.res create mode 100644 tests/tydisj.c create mode 100644 tests/tydisj.cocci create mode 100644 tests/tydisj.res create mode 100644 tools/spp.ml diff --git a/changes.txt b/changes.txt index 6082e83..b836271 100644 --- a/changes.txt +++ b/changes.txt @@ -1,5 +1,55 @@ -*- org -*- +* 0.1.9 + +** Language: +- allow fresh identifiers to be declared using ## such that the value mixes + both strings and previously declared metavariables + +** Features: +- better handling of expanded code containing ##. Now compute the + result. +- more precise warning message for the "'\' outside define". + Thanks to Nicholas Mc Guire for pointing out the problem. +- more precise warning message related to ifdefization. + Thanks to Derek Jones for pointing out the problem. +- we don't create any more certain files in /tmp (they may be a cause + of security problems). + Thanks to Eugeniy Meshcheryakov for pointing out the problem. +- More optimization for the case of just deleting a complete function. + Allows this to happen without tracing through all the control-flow + paths. Thanks to Francois Bissyande for pointing out the problem. +- prevent code from being added to the beginning or end of a disjunction +- more information about why a script is not applied when using -debug option +- added -no_safe_expressions option +- added -no_loops option. Ignores back edges derived from looping + constructs. This is unsafe, but perhaps useful for bug finding, as it can + be more efficient. +- for semantic matches, allow "minus" on same code with multiple + environments +- better error message for mismatch of parenthesis in column 0 with normal + parenthesis. Thanks to Derek Jones for pointing out the problem. +- allow disjunctions on function return types. Thanks to Pierre Habouzit + for pointing this out. + +** Bugfix: +- keep disjunction in the proper order for structure initialization fields +- variables declared in different places should not seem to match each + other +- drop complaints about label metavariables not being used +- drop test information from the type of an expression when the expression + is bound to a metavariable +- nests should not extend beyond the before and after code, even if the + before and after code matches the nest code +- nests should extend into conditionals that end in error exit +- take into account metavariables on "else". Thanks to Derek Jones for + pointing out the problem. +- print single quotes on generated character constants +- better typedef handling in the initialisation/affectation builtin + isomorphism, cf -test init_affect_typedef +- support disjunction of types on variable declaration + + * 0.1.8 ** Language: diff --git a/cocci.ml b/cocci.ml index 7a446c4..8c451b5 100644 --- a/cocci.ml +++ b/cocci.ml @@ -43,7 +43,7 @@ module Ast_to_flow = Control_flow_c_build (* C related *) (* --------------------------------------------------------------------- *) let cprogram_of_file file = - let (program2, _stat) = Parse_c.parse_print_error_heuristic file in + let (program2, _stat) = Parse_c.parse_c_and_cpp file in program2 let cprogram_of_file_cached file = @@ -104,15 +104,15 @@ let ast_to_flow_with_error_messages a = (* Ctl related *) (* --------------------------------------------------------------------- *) -let ctls_of_ast2 ast ua pos = +let ctls_of_ast2 ast (ua,fua,fuas) pos = List.map2 - (function ast -> function (ua,pos) -> + (function ast -> function (ua,(fua,(fuas,pos))) -> List.combine (if !Flag_cocci.popl then failwith "no popl here" (* Popl.popl ast *) - else Asttoctl2.asttoctl ast ua pos) + else Asttoctl2.asttoctl ast (ua,fua,fuas) pos) (Asttomember.asttomember ast ua)) - ast (List.combine ua pos) + ast (List.combine ua (List.combine fua (List.combine fuas pos))) let ctls_of_ast ast ua = Common.profile_code "asttoctl2" (fun () -> ctls_of_ast2 ast ua) @@ -752,15 +752,16 @@ let gen_pdf_graph () = (* --------------------------------------------------------------------- *) let prepare_cocci ctls free_var_lists negated_pos_lists - used_after_lists positions_list metavars astcocci = + (ua,fua,fuas) positions_list metavars astcocci = let gathered = Common.index_list_1 - (zip (zip (zip (zip (zip (zip ctls metavars) astcocci) free_var_lists) - negated_pos_lists) used_after_lists) positions_list) + (zip (zip (zip (zip (zip (zip (zip (zip ctls metavars) astcocci) + free_var_lists) + negated_pos_lists) ua) fua) fuas) positions_list) in gathered +> List.map - (fun (((((((ctl_toplevel_list,metavars),ast),free_var_list), - negated_pos_list),used_after_list),positions_list),rulenb) -> + (fun (((((((((ctl_toplevel_list,metavars),ast),free_var_list), + negated_pos_list),ua),fua),fuas),positions_list),rulenb) -> let is_script_rule r = match r with @@ -819,7 +820,7 @@ let prepare_cocci ctls free_var_lists negated_pos_lists dropped_isos = dropped_isos; free_vars = List.hd free_var_list; negated_pos_vars = List.hd negated_pos_list; - used_after = List.hd used_after_list; + used_after = (List.hd ua) @ (List.hd fua); positions = List.hd positions_list; ruleid = rulenb; ruletype = ruletype; @@ -1063,9 +1064,9 @@ let apply_python_rule r cache newes e rules_that_have_matched else begin let (_, mv, _) = r.scr_ast_rule in - if List.for_all (Pycocci.contains_binding e) mv - then - begin + let not_bound x = not (Pycocci.contains_binding e x) in + (match List.filter not_bound mv with + [] -> let relevant_bindings = List.filter (function ((re,rm),_) -> @@ -1091,8 +1092,13 @@ let apply_python_rule r cache newes e rules_that_have_matched if !Pycocci.inc_match then (new_cache, merge_env [(e, rules_that_have_matched)] newes) else (new_cache, newes) - end - else (cache, merge_env [(e, rules_that_have_matched)] newes) + | unbound -> + (if !Flag_cocci.show_dependencies + then + let m2c (_,(r,x)) = r^"."^x in + pr2 (Printf.sprintf "script not applied: %s not bound" + (String.concat ", " (List.map m2c unbound)))); + (cache, merge_env [(e, rules_that_have_matched)] newes)) end let rec apply_cocci_rule r rules_that_have_ever_matched es diff --git a/cocci.mli b/cocci.mli index c596fa7..9056f62 100644 --- a/cocci.mli +++ b/cocci.mli @@ -32,7 +32,12 @@ val sp_of_file : Ast_cocci.metavar list list * Ast_cocci.rule list * Ast_cocci.meta_name list list list * Ast_cocci.meta_name list list list * - Ast_cocci.meta_name list list list * Ast_cocci.meta_name list list list * + (Ast_cocci.meta_name list list list (*used after list*) * + (*fresh used after list*) + Ast_cocci.meta_name list list list * + (*fresh used after list seeds*) + Ast_cocci.meta_name list list list) * + Ast_cocci.meta_name list list list * string list list * string option diff --git a/commitmsg b/commitmsg dissimilarity index 99% index f05683a..982a878 100644 --- a/commitmsg +++ b/commitmsg @@ -1,72 +1,3 @@ -Release coccinelle-0.1.8 - -** Features: - - Metavariables now capture the cpp code contained within their definitions - - When - fragments are separated by ... or nest boundaries in the semantic - patch, but end up matching adjacent source code, the comments, cpp code - and whitespace that are between them are not deleted. - - better parsing of C: do expansion of macros only when needed when - have actually a parse error and also leverage the definition of macros - in the parsed file (or in a optional_standard.h file passed as a parameter). - This should reduce the need for many hardcoded definitions in standard.h - - new semantics for the -macro_file option, by default now expand macros - only when necessary. To force use the -macro_file_builtins option instead. - - a new -extract_macros command line action to help the parser. Works with - the -macro_file option. e.g. - $ ./spatch -extract_macros ~/linux > /tmp/alldefs.h - $ ./spatch -macro_file /tmp/alldefs.h -sp_file foo.cocci -dir ~/linux - - removed -D macro_file option, not consistent with what -D usually means - - reattempt to be more efficient for statement metavariables that are just - placeholders (ie, no modification, no reuse) - - triples now returned from ctl in sorted order. The main key is the - state. On the other hand, the state order does not always agree with the - order of appearance in the code. - - spatch is now less verbose on the things it does yet handle. Less confusing - for new users. - - slightly better error report. Thanks to Derek Jones for the suggestion. - - added the options -linux_spacing and -smpl_spacing. -linux_spacing - causes spatch to follow the spacing conventions of Linux, while - -smpl_spacing causes spatch to follow the spacing in the semantic patch. - -linux_spacing is the default. - - more informative error reporting for the already tagged token case. - Thanks to Erik Hovland for the suggestion. - -** Bugfix: - - better parsing of declare macro at toplevel and in structure. - cf -text xfield - - allowing back typedef names for fieldname - - better printing of else in generated code - - slightly better type inference for binary operators. - - clear out declarer names and iterator names between SmPL files (for - -testall) - - better parsing and type checking of macro type aliases. Cf -test macro_int16. - Thanks to Li Yingtong for pointing out the problem. - - make insert_virtual_positions tail rec, avoid stack overflow pb. - Thanks to Diego Liziero for pointing out the - problem. - - Better type inference for arithmetic binary operators - Thanks to Li Yingtong for pointing out the problem. - - Better type inference for constants - Thanks to Li Yingtong for pointing out the problem. - - move computing of adjacency information for semantic patches to after - application of isomorphisms, because isomorphisms can introduce "..." - - compute adjacency information for negated ... - - record with each transformation site the set of indices of the witness - trees that caused the transformation site to come about. Whitespace and - comments between remove tokens associated with disjoint witness trees is - not removed. - - correct treatment of function pointer typed parameters in the SmPL ast0 - visitor. - - better parsing error message and error recovery when comments are not ended, - when some macros have a weird body, and when some switch have a weird - Body. - Thanks to Derek Jones for pointing out the problem. - - better detection and passing of "dangerous" ifdefs, cf -test - double_switch. - - dropped the separation of decls and body in Seq. This gives better - positioning of the bindings of metavariables shared between them. - Thanks to Erik Hovland for an example that shows the problem. - -** Internals: - - supress warning in compiling ocamlsexp (warning caused by a new behavior - of cpp used internally in processing files in ocamlsexp/) +Release coccinelle-0.1.9-rc1 + +Release Candidate 1 for coccinelle-0.1.9 diff --git a/commons/Makefile b/commons/Makefile index ce53152..081bb1a 100644 --- a/commons/Makefile +++ b/commons/Makefile @@ -16,7 +16,7 @@ MYSRC=common.ml common_extra.ml \ ocollection/oseti.ml ocollection/oseth.ml ocollection/osetb.ml ocollection/osetpt.ml \ ocollection/oassocb.ml ocollection/oassoch.ml ocollection/oassoc_buffer.ml ocollection/oassoc_cache.ml ocollection/oassocid.ml \ oarray.ml \ - ocollection/ograph2way.ml ograph_extended.ml \ + ocollection/ograph2way.ml ograph_simple.ml ograph_extended.ml \ ofullcommon.ml \ glimpse.ml parser_combinators.ml diff --git a/commons/common.ml b/commons/common.ml index c037e1b..8a4de1e 100644 --- a/commons/common.ml +++ b/commons/common.ml @@ -417,27 +417,46 @@ let xxx_once f s = let pr2_once s = xxx_once pr2 s (* ---------------------------------------------------------------------- *) -let mk_pr2_wrappers aref = - let fpr2 s = +let mk_pr2_wrappers aref = + let fpr2 s = if !aref then pr2 s - else + else (* just to the log file *) out_chan_pr2 s in - let fpr2_once s = + let fpr2_once s = if !aref then pr2_once s - else + else xxx_once out_chan_pr2 s in - fpr2, fpr2_once - + fpr2, fpr2_once (* ---------------------------------------------------------------------- *) (* could also be in File section *) -let redirect_stdout_stderr file f = +let redirect_stdout file f = + begin + let chan = open_out file in + let descr = Unix.descr_of_out_channel chan in + + let saveout = Unix.dup Unix.stdout in + Unix.dup2 descr Unix.stdout; + flush stdout; + let res = f() in + flush stdout; + Unix.dup2 saveout Unix.stdout; + close_out chan; + res + end + +let redirect_stdout_opt optfile f = + match optfile with + | None -> f() + | Some outfile -> redirect_stdout outfile f + +let redirect_stdout_stderr file f = begin let chan = open_out file in let descr = Unix.descr_of_out_channel chan in @@ -454,7 +473,7 @@ let redirect_stdout_stderr file f = close_out chan; end -let redirect_stdin file f = +let redirect_stdin file f = begin let chan = open_in file in let descr = Unix.descr_of_in_channel chan in @@ -466,7 +485,7 @@ let redirect_stdin file f = close_in chan; end -let redirect_stdin_opt optfile f = +let redirect_stdin_opt optfile f = match optfile with | None -> f() | Some infile -> redirect_stdin infile f @@ -701,7 +720,7 @@ let report_if_take_time timethreshold s f = let res = f () in let t' = Unix.gettimeofday () in if (t' -. t > float_of_int timethreshold) - then pr2 (sprintf "NOTE: this code takes more than: %ds %s" timethreshold s); + then pr2 (sprintf "Note: processing took %7.1fs: %s" (t' -. t) s); res let profile_code2 category f = @@ -2053,6 +2072,16 @@ let partition_either f l = | Right e -> part_either left (e :: right) l) in part_either [] [] l +let partition_either3 f l = + let rec part_either left middle right = function + | [] -> (List.rev left, List.rev middle, List.rev right) + | x :: l -> + (match f x with + | Left3 e -> part_either (e :: left) middle right l + | Middle3 e -> part_either left (e :: middle) right l + | Right3 e -> part_either left middle (e :: right) l) in + part_either [] [] [] l + (* pixel *) let rec filter_some = function @@ -3479,7 +3508,7 @@ let timeout_function_opt timeoutvalopt f = (* creation of tmp files, a la gcc *) -let _temp_files_created = ref [] +let _temp_files_created = ref ([] : filename list) (* ex: new_temp_file "cocci" ".c" will give "/tmp/cocci-3252-434465.c" *) let new_temp_file prefix suffix = @@ -3499,6 +3528,14 @@ let erase_temp_files () = _temp_files_created := [] end +let erase_this_temp_file f = + if not !save_tmp_files then begin + _temp_files_created := + List.filter (function x -> not (x =$= f)) !_temp_files_created; + command2 ("rm -f " ^ f) + end + + (* now in prelude: exception UnixExit of int *) let exn_to_real_unixexit f = try f() diff --git a/commons/common.mli b/commons/common.mli index 723748b..d2920fc 100644 --- a/commons/common.mli +++ b/commons/common.mli @@ -145,6 +145,7 @@ val pr2_once : string -> unit val mk_pr2_wrappers: bool ref -> (string -> unit) * (string -> unit) +val redirect_stdout_opt : filename option -> (unit -> 'a) -> 'a val redirect_stdout_stderr : filename -> (unit -> unit) -> unit val redirect_stdin : filename -> (unit -> unit) -> unit val redirect_stdin_opt : filename option -> (unit -> unit) -> unit @@ -785,6 +786,8 @@ val some_or : 'a option -> 'a -> 'a val partition_either : ('a -> ('b, 'c) either) -> 'a list -> 'b list * 'c list +val partition_either3 : + ('a -> ('b, 'c, 'd) either3) -> 'a list -> 'b list * 'c list * 'd list val filter_some : 'a option list -> 'a list val map_filter : ('a -> 'b option) -> 'a list -> 'b list @@ -1139,6 +1142,7 @@ val _temp_files_created : string list ref (* see flag: val save_tmp_files : bool ref *) val new_temp_file : string (* prefix *) -> string (* suffix *) -> filename val erase_temp_files : unit -> unit +val erase_this_temp_file : filename -> unit (* If the user use some exit 0 in his code, then no one can intercept this * exit and do something before exiting. There is exn handler for exit 0 diff --git a/commons/credits.txt b/commons/credits.txt index bf674e2..04a41b0 100644 --- a/commons/credits.txt +++ b/commons/credits.txt @@ -2,7 +2,7 @@ Thanks to - Richard Jones for his dumper module, - Brian Hurt and Nicolas Cannasse for their dynArray module, - - Troestler Christophe for his ANSITerminal module, + - Christophe Troestler for his ANSITerminal module, - Sebastien ferre for his suffix tree module - - Jane street for the backtrace module + - Jane Street for the backtrace module diff --git a/commons/ograph_extended.ml b/commons/ograph_extended.ml index a481249..0c9f3a2 100644 --- a/commons/ograph_extended.ml +++ b/commons/ograph_extended.ml @@ -228,7 +228,7 @@ let dfs_iter_with_path xi f g = let generate_ograph_generic g label fnode filename = - with_open_outfile filename (fun (pr,_) -> + Common.with_open_outfile filename (fun (pr,_) -> pr "digraph misc {\n" ; pr "size = \"10,10\";\n" ; (match label with diff --git a/commons/ograph_simple.ml b/commons/ograph_simple.ml new file mode 100644 index 0000000..45a9028 --- /dev/null +++ b/commons/ograph_simple.ml @@ -0,0 +1,130 @@ +open Common + +open Ocollection +open Oset +open Oassoc +(* open Ograph *) + +open Oassocb +open Osetb + + +(* Difference with ograph_extended ? why not share code ? could, but + * in ograph_extended we dont force the user to have a key and we + * generate those keys as he add nodes. Here we assume the user already + * have an idea of what kind of key he wants to use (a string, a + * filename, a, int, whatever) +*) + +class ['key, 'a,'b] ograph_mutable = + let build_assoc () = new oassocb [] in + let build_set () = new osetb Setb.empty in + +object(o) + + + val mutable succ = build_assoc() + val mutable pred = build_assoc() + val mutable nods = (build_assoc() : ('key, 'a) Oassocb.oassocb) + + method add_node i (e: 'a) = + nods <- nods#add (i, e); + pred <- pred#add (i, build_set() ); + succ <- succ#add (i, build_set() ); + + method del_node (i) = + (* check: e is effectively the index associated with e, + and check that already in *) + + (* todo: assert that have no pred and succ, otherwise + * will have some dangling pointers + *) + nods <- nods#delkey i; + pred <- pred#delkey i; + succ <- succ#delkey i; + + method del_leaf_node_and_its_edges (i) = + let succ = o#successors i in + if not (succ#null) + then failwith "del_leaf_node_and_its_edges: have some successors" + else begin + let pred = o#predecessors i in + pred#tolist +> List.iter (fun (k, edge) -> + o#del_arc (k,i) edge; + ); + o#del_node i + end + + method leaf_nodes () = + let (set : 'key Oset.oset) = build_set () in + o#nodes#tolist +> List.fold_left (fun acc (k,v) -> + if (o#successors k)#null + then acc#add k + else acc + ) set + + + method replace_node i (e: 'a) = + assert (nods#haskey i); + nods <- nods#replkey (i, e); + + method add_arc (a,b) (v: 'b) = + succ <- succ#replkey (a, (succ#find a)#add (b, v)); + pred <- pred#replkey (b, (pred#find b)#add (a, v)); + method del_arc (a,b) v = + succ <- succ#replkey (a, (succ#find a)#del (b,v)); + pred <- pred#replkey (b, (pred#find b)#del (a,v)); + + method successors e = succ#find e + method predecessors e = pred#find e + + method nodes = nods + method allsuccessors = succ + + (* detect if no loop ? *) + method ancestors k = + let empty_set = build_set() in + + + let rec aux acc x = + if acc#mem x + then + (* bugfix: have_loop := true; ? not, not necessarally. + * if you got a diamon, seeing a second time the same + * x does not mean we are in a loop + *) + acc + else + let acc = acc#add x in + let prefs = o#predecessors x in + let prefs = prefs#tolist +> List.map fst in + prefs +> List.fold_left (fun acc x -> aux acc x) acc + in + let set = aux empty_set k in + let set = set#del k in + set + + + + +end + + +let print_ograph_generic ~str_of_key ~str_of_node filename g = + Common.with_open_outfile filename (fun (pr,_) -> + pr "digraph misc {\n" ; + pr "size = \"10,10\";\n" ; + + let nodes = g#nodes in + nodes#iter (fun (k,node) -> + pr (spf "%s [label=\"%s\"];\n" (str_of_key k) (str_of_node k node)) + ); + nodes#iter (fun (k,node) -> + let succ = g#successors k in + succ#iter (fun (j,edge) -> + pr (spf "%s -> %s;\n" (str_of_key k) (str_of_key j)); + ); + ); + pr "}\n" ; + ); + () diff --git a/commons/ograph_simple.mli b/commons/ograph_simple.mli new file mode 100644 index 0000000..1070fea --- /dev/null +++ b/commons/ograph_simple.mli @@ -0,0 +1,34 @@ +open Common + + +(* essentially a convenient way to access a hash and its reverse hash *) + +class ['key, 'node, 'edge] ograph_mutable : +object ('o) + method add_node : 'key -> 'node -> unit + method del_node : 'key -> unit + method replace_node: 'key -> 'node -> unit + + + method add_arc : ('key * 'key) -> 'edge -> unit + method del_arc : ('key * 'key) -> 'edge -> unit + + method nodes : ('key, 'node) Oassoc.oassoc + + method successors : 'key -> ('key * 'edge) Oset.oset + method predecessors : 'key -> ('key * 'edge) Oset.oset + method allsuccessors : ('key, ('key * 'edge) Oset.oset) Oassoc.oassoc + + + method del_leaf_node_and_its_edges: 'key -> unit + method ancestors : 'key -> 'key Oset.oset + method leaf_nodes : unit -> 'key Oset.oset + +end + +val print_ograph_generic: + str_of_key:('key -> string) -> + str_of_node:('key -> 'node -> string) -> + Common.filename -> + ('key, 'node,'edge) ograph_mutable -> + unit diff --git a/configure b/configure index 83cb129..79872ca 100755 --- a/configure +++ b/configure @@ -13,12 +13,14 @@ #TODO check python 2.5 ? +# need latex and hevea if want to compile the documentation + #old: --with-menhir=/path/to/menhirLib or `ocamlfind query menhirLib` my $project = "coccinelle"; my $projectcmdline = - "spatch -sp_file demos/simple.cocci demos/simple.c"; + "spatch -sp_file demos/simple.cocci demos/simple.c -o /tmp/new_simple.c"; ###################################################################### # Options @@ -28,6 +30,7 @@ my $prefix="/usr/local"; my $python=1; my $trac=0; my $opt=".opt"; +my $tarzan=1; local $_ = join ' ', @ARGV; @@ -40,6 +43,9 @@ local $_ = join ' ', @ARGV; /--no-opt/ and $opt = ""; /--opt/ and $opt = ".opt"; +#tarzan by default (used by score file parsing and now also for sexp_ast_c.ml) + + #if($ARGV[0] =~ "--prefix=(.*)") { # $prefix = $1; #} @@ -275,6 +281,7 @@ SHAREDIR=$src # Features FEATURE_PYTHON=$python +FEATURE_TARZAN=$tarzan # The OPTBIN variable is here to allow to use ocamlc.opt instead of # ocaml, when it is available, which speeds up compilation. So diff --git a/ctl/ctl_engine.ml b/ctl/ctl_engine.ml index 65c3338..e0f9a88 100644 --- a/ctl/ctl_engine.ml +++ b/ctl/ctl_engine.ml @@ -1097,7 +1097,8 @@ let satAX dir m s reqst = pre_forall dir m s s reqst (* E[phi1 U phi2] == phi2 \/ (phi1 /\ EXE[phi1 U phi2]) *) let satEU dir ((_,_,states) as m) s1 s2 reqst print_graph = - let ctr = ref 0 in + (*Printf.printf "EU\n"; + let ctr = ref 0 in*) inc satEU_calls; if s1 = [] then s2 @@ -1110,21 +1111,23 @@ let satEU dir ((_,_,states) as m) s1 s2 reqst print_graph = match new_info with [] -> y | new_info -> - ctr := !ctr + 1; - print_graph y ctr; + (*ctr := !ctr + 1; + print_graph y ctr;*) let first = triples_conj s1 (pre_exist dir m new_info reqst) in let res = triples_union first y in let new_info = setdiff res y in (*Printf.printf "iter %d res %d new_info %d\n" !ctr (List.length res) (List.length new_info); + print_state "res" res; + print_state "new_info" new_info; flush stdout;*) f res new_info in f s2 s2 else let f y = inc_step(); - ctr := !ctr + 1; - print_graph y ctr; + (*ctr := !ctr + 1; + print_graph y ctr;*) let pre = pre_exist dir m y reqst in triples_union s2 (triples_conj s1 pre) in setfix f s2 @@ -1278,9 +1281,16 @@ let satAW dir ((grp,_,states) as m) s1 s2 reqst = print_state "y" y; flush stdout;*) let pre = pre_forall dir m y y reqst in + (*print_state "pre" pre;*) let conj = triples_conj s1 pre in (* or triples_conj_AW *) triples_union s2 conj in - setgfix f (triples_union s1 s2) + let drop_wits = List.map (function (s,e,_) -> (s,e,[])) in + (* drop wits on s1 represents that we don't want any witnesses from + the case that infinitely loops, only from the case that gets + out of the loop. s1 is like a guard. To see the problem, consider + an example where both s1 and s2 match some code after the loop. + we only want the witness from s2. *) + setgfix f (triples_union (drop_wits s1) s2) ;; let satAF dir m s reqst = @@ -1801,7 +1811,8 @@ let rec satloop unchecked required required_states (* no graph, for the moment *) (fun y str -> ())) s1 in - strict_A2 strict satAW satEF dir m s1 s2 new_required_states) + strict_A2 strict satAW satEF dir m s1 s2 new_required_states + ) | A.Implies(phi1,phi2) -> loop unchecked required required_states (A.Or(A.Not phi1,phi2)) | A.Exists (keep,v,phi) -> diff --git a/demos/change_all_param.c b/demos/change_all_param.c new file mode 100644 index 0000000..3617d16 --- /dev/null +++ b/demos/change_all_param.c @@ -0,0 +1,19 @@ +int foo(int a, int b) +{ + return a + b; +} + +int bar(int a, int b, int c) +{ + return a + b + c; +} + +void main(void) +{ + int res; + int x,y,y; + + res = foo(x,y); + + res = bar(x,y,z); +} diff --git a/demos/change_all_param.cocci b/demos/change_all_param.cocci new file mode 100644 index 0000000..1f1da3f --- /dev/null +++ b/demos/change_all_param.cocci @@ -0,0 +1,69 @@ +// author: Pad. Example based on discussions with Nicholas Mc Guire. + +// call site +@ r1 @ +identifier fn; +expression ret; +@@ + +- ret = + fn( ++ ret, + ...) + + +@ r2 @ +identifier r1.fn; +expression e; +@@ + + +fn (..., +- e ++ &e + ,...) + + +// definition site +@@ +type T; +identifier r1.fn; +@@ + +- T ++ void + fn( ++ T ret, + ...) +{ +... +} + + +@ rparam @ +identifier r1.fn; +type T; +identifier x; +@@ + +fn(..., +- T x ++ T *x + ,...) +{ +... +} + +// weird, if I inline this rule in previous rule it does +// not work +@@ +identifier r1.fn; +identifier rparam.x; +@@ +fn(...) +{ +<... +- x ++ *x +...> +} \ No newline at end of file diff --git a/docs/manual/Makefile b/docs/manual/Makefile index 865619f..f367e06 100644 --- a/docs/manual/Makefile +++ b/docs/manual/Makefile @@ -10,7 +10,7 @@ SRC=$(wildcard *.tex) # xfig # emacs, auctex, ediff # darcs -# latexdiff +# latexdiff ############################################################################## # Top rules @@ -18,28 +18,23 @@ SRC=$(wildcard *.tex) .PHONY: all clean distclean .SUFFIXES: .pdf .tex -all: manual.pdf cocci_syntax.pdf options.pdf +all: manual.pdf main_grammar.pdf options.pdf manual.pdf: $(SRC) pdflatex main.tex pdflatex main.tex mv main.pdf manual.pdf - - - -cocci_syntax.pdf: main_grammar.tex cocci_syntax.tex macros_listing_cocci.tex macros_grammar.tex macros_common.tex examples.tex tips.tex +main_grammar.pdf: main_grammar.tex cocci_syntax.tex macros_listing_cocci.tex macros_grammar.tex macros_common.tex examples.tex tips.tex pdflatex main_grammar.tex pdflatex main_grammar.tex - mv main_grammar.pdf cocci_syntax.pdf -options.pdf: main_options.tex spatch_options.tex macros_options.tex +main_options.pdf: main_options.tex spatch_options.tex macros_options.tex pdflatex main_options.tex pdflatex main_options.tex - mv main_options.pdf options.pdf - - +options.pdf: main_options.pdf + mv main_options.pdf options.pdf distclean:: clean rm -f manual.pdf cocci_syntax.pdf options.pdf @@ -50,7 +45,7 @@ distclean:: clean # #pdf: $(PDF) # -#%.pdf: %.tex +#%.pdf: %.tex # $(PDFLATEX) $< # if egrep -s '$(RERUN)' $*.log ;then $(PDFLATEX) $<; fi # if egrep -s '$(RERUN)' $*.log ;then $(PDFLATEX) $<; fi @@ -58,13 +53,13 @@ distclean:: clean ############################################################################## # Html version ############################################################################## -.PHONY: html check +.PHONY: html check .SUFFIXES: .html .tex -TEX=cocci_syntax.tex +TEX=main_grammar.tex WEB=/var/www/localhost/htdocs/coccinelle/ -EMNWEB=~/website/docs/ +EMNWEB=~/website PDF=$(TEX:.tex=.pdf) HTML=$(TEX:.tex=.html) @@ -91,11 +86,9 @@ install: chmod a-w -R $(WEB) emn_install: world - cp *.css *.gif *.html $(EMNWEB) - cp $(PDF) $(EMNWEB) - - - + cp *.css *.gif *.html $(EMNWEB)/docs + cp $(PDF) $(EMNWEB)/docs + cp options.pdf $(EMNWEB)/ .tex.html: # For Gentoo: /usr/lib64/hevea @@ -113,7 +106,8 @@ emn_install: world else \ echo -e "\n\n *** Hevea: Unable to find xxdate.exe ***\n\n"; \ fi - hacha -o index.html cocci_syntax.html + hacha -o index.html main_grammar.html +# hacha -o index.html cocci_syntax.html ############################################################################## diff --git a/docs/manual/cocci_syntax.tex b/docs/manual/cocci_syntax.tex index b1c1cd9..441c21f 100644 --- a/docs/manual/cocci_syntax.tex +++ b/docs/manual/cocci_syntax.tex @@ -13,22 +13,16 @@ arguments. The grammar also uses some unspecified nonterminals, such as \T{id}, \T{const}, etc. These refer to the sets suggested by the name, {\em i.e.}, \T{id} refers to the set of possible C-language identifiers, while \T{const} refers to the set of -possible C-language constants. +possible C-language constants. % -\ifhevea +\ifhevea A PDF version of this documentation is available at -\url{http://www.emn.fr/x-info/coccinelle/docs/cocci_syntax.pdf}. +\url{http://www.emn.fr/x-info/coccinelle/docs/main_grammar.pdf}. \else A HTML version of this documentation is available online at -\url{http://www.emn.fr/x-info/coccinelle/docs/cocci_syntax.html}. +\url{http://www.emn.fr/x-info/coccinelle/docs/main_grammar.html}. \fi -%% \ifhevea A PDF -%% version of this documentation is available at -%% \url{http://localhost:8080/coccinelle/cocci_syntax.pdf}.\else A HTML -%% version of this documentation is available online at -%% \url{http://localhost:8080/coccinelle/cocci_syntax.html}. \fi - \section{Program} \begin{grammar} @@ -48,7 +42,10 @@ A HTML version of this documentation is available online at \noindent \T{script\_code} is any code in the chosen scripting language. Parsing of the semantic patch does not check the validity of this code; any errors are -first detected when the code is executed. +first detected when the code is executed. Furthermore, \texttt{@} should +not be use in this code. Spatch scans the script code for the next +\texttt{@} and considers that to be the beginning of the next rule, even if +\texttt{@} occurs within e.g., a string or a comment. % Between the metavariables and the transformation rule, there can be a % specification of constraints on the names of the old and new files, diff --git a/docs/manual/hevea.sty b/docs/manual/hevea.sty new file mode 100644 index 0000000..17b4e54 --- /dev/null +++ b/docs/manual/hevea.sty @@ -0,0 +1,90 @@ +% hevea : hevea.sty +% This is a very basic style file for latex document to be processed +% with hevea. It contains definitions of LaTeX environment which are +% processed in a special way by the translator. +% Mostly : +% - latexonly, not processed by hevea, processed by latex. +% - htmlonly , the reverse. +% - rawhtml, to include raw HTML in hevea output. +% - toimage, to send text to the image file. +% The package also provides hevea logos, html related commands (ahref +% etc.), void cutting and image commands. +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{hevea}[2002/01/11] +\RequirePackage{comment} +\newif\ifhevea\heveafalse +\@ifundefined{ifimagen}{\newif\ifimagen\imagenfalse} +\makeatletter% +\newcommand{\heveasmup}[2]{% +\raise #1\hbox{$\m@th$% + \csname S@\f@size\endcsname + \fontsize\sf@size 0% + \math@fontsfalse\selectfont +#2% +}}% +\DeclareRobustCommand{\hevea}{H\kern-.15em\heveasmup{.2ex}{E}\kern-.15emV\kern-.15em\heveasmup{.2ex}{E}\kern-.15emA}% +\DeclareRobustCommand{\hacha}{H\kern-.15em\heveasmup{.2ex}{A}\kern-.15emC\kern-.1em\heveasmup{.2ex}{H}\kern-.15emA}% +\DeclareRobustCommand{\html}{\protect\heveasmup{0.ex}{HTML}} +%%%%%%%%% Hyperlinks hevea style +\newcommand{\ahref}[2]{{#2}} +\newcommand{\ahrefloc}[2]{{#2}} +\newcommand{\aname}[2]{{#2}} +\newcommand{\ahrefurl}[1]{\texttt{#1}} +\newcommand{\footahref}[2]{#2\footnote{\texttt{#1}}} +\newcommand{\mailto}[1]{\texttt{#1}} +\newcommand{\imgsrc}[2][]{} +\newcommand{\home}[1]{\protect\raisebox{-.75ex}{\char126}#1} +\AtBeginDocument +{\@ifundefined{url} +{%url package is not loaded +\let\url\ahref\let\oneurl\ahrefurl\let\footurl\footahref} +{}} +%% Void cutting instructions +\newcounter{cuttingdepth} +\newcommand{\tocnumber}{} +\newcommand{\notocnumber}{} +\newcommand{\cuttingunit}{} +\newcommand{\cutdef}[2][]{} +\newcommand{\cuthere}[2]{} +\newcommand{\cutend}{} +\newcommand{\htmlhead}[1]{} +\newcommand{\htmlfoot}[1]{} +\newcommand{\htmlprefix}[1]{} +\newenvironment{cutflow}[1]{}{} +\newcommand{\cutname}[1]{} +\newcommand{\toplinks}[3]{} +\newcommand{\setlinkstext}[3]{} +\newcommand{\flushdef}[1]{} +\newcommand{\footnoteflush}[1]{} +%%%% Html only +\excludecomment{rawhtml} +\newcommand{\rawhtmlinput}[1]{} +\excludecomment{htmlonly} +%%%% Latex only +\newenvironment{latexonly}{}{} +\newenvironment{verblatex}{}{} +%%%% Image file stuff +\def\toimage{\endgroup} +\def\endtoimage{\begingroup\def\@currenvir{toimage}} +\def\verbimage{\endgroup} +\def\endverbimage{\begingroup\def\@currenvir{verbimage}} +\newcommand{\imageflush}[1][]{} +%%% Bgcolor definition +\newsavebox{\@bgcolorbin} +\newenvironment{bgcolor}[2][] + {\newcommand{\@mycolor}{#2}\begin{lrbox}{\@bgcolorbin}\vbox\bgroup} + {\egroup\end{lrbox}% + \begin{flushleft}% + \colorbox{\@mycolor}{\usebox{\@bgcolorbin}}% + \end{flushleft}} +%%% Style sheets macros, defined as no-ops +\newcommand{\newstyle}[2]{} +\newcommand{\addstyle}[1]{} +\newcommand{\setenvclass}[2]{} +\newcommand{\getenvclass}[1]{} +\newcommand{\loadcssfile}[1]{} +\newenvironment{divstyle}[1]{}{} +\newenvironment{cellstyle}[2]{}{} +\newif\ifexternalcss +%%% Postlude +\makeatother diff --git a/docs/manual/main.tex b/docs/manual/main.tex index 52cb41c..5f5f6d1 100644 --- a/docs/manual/main.tex +++ b/docs/manual/main.tex @@ -24,7 +24,7 @@ \usepackage{graphics} -\usepackage[pdftex]{graphicx} +\usepackage[pdftex]{graphicx} \usepackage{epsfig} @@ -59,12 +59,12 @@ %------------------------------------------------------------------------------ \input{macros_common} -%e.g: +%e.g: % \newcommand{\mita}[1]{\mbox{\it{{#1}}}} \input{macros_options} -\input{macros_listing_cocci} % order is important +\input{macros_listing_cocci} % order is important \input{macros_grammar} @@ -95,12 +95,12 @@ \author{ Julia Lawall and Yoann Padioleau \\ -{(with contributions from -Rene Rydhof Hansen, -Nicolas Palix, +{(with contributions from +Rene Rydhof Hansen, +Nicolas Palix, Henrik Stuart) } -} +} %src: Xavier Leroy manual \date{\today} @@ -112,7 +112,7 @@ Henrik Stuart) % Body %****************************************************************************** -\chapter*{Foreword} +\chapter*{Foreword} This manual documents the release \cocciversion of Coccinelle. It is organized as follows: @@ -127,7 +127,7 @@ It is organized as follows: \section*{Copyright} %coupling: copyright.txt -Coccinelle is copyright \copyright 2005, 2006, 2007, 2008, 2009 +Coccinelle is copyright \copyright 2005, 2006, 2007, 2008, 2009 University of Copenhagen DIKU and Ecole des Mines de Nantes. Coccinelle is open source and can be freely redistributed under the @@ -135,12 +135,12 @@ terms of the GNU General Public License version 2. See the file \verb+license.txt+ in the distribution for licensing information. The present documentation is copyright 2008, 2009 Yoann Padioleau -and Julia Lawall and distributed under the terms of the +and Julia Lawall and distributed under the terms of the GNU Free Documentation License version 1.3. \section*{Availability} -Coccinelle can be freely downloaded +Coccinelle can be freely downloaded from \verb+http://www.emn.fr/x-info/coccinelle+. This website contains also additional information. @@ -150,7 +150,7 @@ This website contains also additional information. \input{introduction} -\input{installing} +\input{installing} \input{tutorial} @@ -180,7 +180,7 @@ This website contains also additional information. \chapter{\spatch command line options} -%coupling: ../spatch.1 +%coupling: ../spatch.1 \input{spatch_options} %****************************************************************************** @@ -189,7 +189,7 @@ This website contains also additional information. %index -{\small +{\small \bibliographystyle{acm} \bibliography{main} } diff --git a/docs/manual/cocci_syntax.pdf b/docs/manual/main_grammar.pdf similarity index 85% rename from docs/manual/cocci_syntax.pdf rename to docs/manual/main_grammar.pdf index d49195f8f0cc0a8d6bc949e4bebdd82a7e705366..95249a404feb0877104ea63286ba7eb7d0288510 100644 GIT binary patch delta 39566 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 Ka$xHq*Z%?99iUGD delta 38928 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 QTOu;_s8}(ebz_hJ1CFQu)c^nh diff --git a/docs/manual/manual.pdf b/docs/manual/manual.pdf index b8058544d857cf28553d1e862ba44fa0e87c5a72..10f02a7fc42d5f0cf827279e29d1bde1fe4a823d 100644 GIT binary patch delta 30847 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 CTL.EX(CTL.FORWARD,x) | Forall -> CTL.AX(CTL.FORWARD,s,x) - | ReverseForall -> failwith "not supported" let ctl_ax_absolute s = function CTL.True -> CTL.True @@ -130,20 +129,16 @@ let ctl_au s x y = match (x,!exists) with (CTL.True,Exists) -> CTL.EF(CTL.FORWARD,y) | (CTL.True,Forall) -> CTL.AF(CTL.FORWARD,s,y) - | (CTL.True,ReverseForall) -> failwith "not supported" | (_,Exists) -> CTL.EU(CTL.FORWARD,x,y) | (_,Forall) -> CTL.AU(CTL.FORWARD,s,x,y) - | (_,ReverseForall) -> failwith "not supported" let ctl_anti_au s x y = (* only for ..., where the quantifier is changed *) CTL.XX (match (x,!exists) with (CTL.True,Exists) -> CTL.AF(CTL.FORWARD,s,y) | (CTL.True,Forall) -> CTL.EF(CTL.FORWARD,y) - | (CTL.True,ReverseForall) -> failwith "not supported" | (_,Exists) -> CTL.AU(CTL.FORWARD,s,x,y) - | (_,Forall) -> CTL.EU(CTL.FORWARD,x,y) - | (_,ReverseForall) -> failwith "not supported") + | (_,Forall) -> CTL.EU(CTL.FORWARD,x,y)) let ctl_uncheck = function CTL.True -> CTL.True @@ -609,7 +604,8 @@ and get_before_e s a = | Ast.Nest(stmt_dots,w,multi,_,aft) -> let w = get_before_whencode w in let (sd,_) = get_before stmt_dots a in - let a = + (*let a = + got rid of this, don't want to let nests overshoot List.filter (function Ast.Other a -> @@ -625,7 +621,7 @@ and get_before_e s a = Unify_ast.MAYBE -> false | _ -> true) | _ -> true) - a in + a in*) (Ast.rewrap s (Ast.Nest(sd,w,multi,a,aft)),[Ast.Other_dots stmt_dots]) | Ast.Disj(stmt_dots_list) -> let (dsl,dsla) = @@ -711,7 +707,8 @@ and get_after_e s a = | Ast.Nest(stmt_dots,w,multi,bef,_) -> let w = get_after_whencode a w in let (sd,_) = get_after stmt_dots a in - let a = + (*let a = + got rid of this. don't want to let nests overshoot List.filter (function Ast.Other a -> @@ -727,7 +724,7 @@ and get_after_e s a = Unify_ast.MAYBE -> false | _ -> true) | _ -> true) - a in + a in*) (Ast.rewrap s (Ast.Nest(sd,w,multi,bef,a)),[Ast.Other_dots stmt_dots]) | Ast.Disj(stmt_dots_list) -> let (dsl,dsla) = @@ -856,7 +853,15 @@ let exptymatch l make_match make_guard_match = let rec suffixes = function [] -> [] | x::xs -> xs::(suffixes xs) in - let prefixes = List.rev (suffixes (List.rev guard_matches)) in + let prefixes = + (* normally, we check that an expression does not match something + earlier in the disjunction (calculated as prefixes). But for large + disjunctions, this can result in a very big CTL formula. So we + give the user the option to say he doesn't want this feature, if that is + the case. *) + if !Flag_matcher.no_safe_expressions + then List.map (function _ -> []) matches + else List.rev (suffixes (List.rev guard_matches)) in let info = (* not null *) List.map2 (function matcher -> @@ -890,8 +895,7 @@ let do_re_matches label guard res quantified minus_quantified = if List.exists (function Ast.Exp(_) | Ast.Ty(_) -> true | _ -> false) all then failwith "unexpected exp or ty"; - List.fold_left ctl_seqor CTL.False - (List.rev (List.map make_match res))) + List.fold_left ctl_seqor CTL.False (List.map make_match res)) (* code might be a DisjRuleElem, in which case we break it apart code doesn't contain an Exp or Ty @@ -1004,10 +1008,12 @@ let ifthenelse ifheader branch1 els branch2 ((afvs,_,_,_) as aft) after | _ -> failwith "not possible" in let (e2fvs,b2fvs,s2fvs) = (* fvs on else? *) - match seq_fvs quantified - [Ast.get_fvs ifheader;Ast.get_fvs branch2;afvs] with + (* just combine with the else branch. no point to have separate + quantifier, since there is only one possible control-flow path *) + let else_fvs = Common.union_set (Ast.get_fvs els) (Ast.get_fvs branch2) in + match seq_fvs quantified [Ast.get_fvs ifheader;else_fvs;afvs] with [(e2fvs,b2fvs);(s2fvs,b2afvs);_] -> - (e2fvs,Common.union_set b2fvs b2afvs,s2fvs) + (e2fvs,Common.union_set b2fvs b2afvs,s2fvs) | _ -> failwith "not possible" in let bothfvs = union (union b1fvs b2fvs) (intersect s1fvs s2fvs) in let exponlyfvs = intersect e1fvs e2fvs in @@ -1021,8 +1027,11 @@ let ifthenelse ifheader branch1 els branch2 ((afvs,_,_,_) as aft) after | _ -> failwith "not possible" in let (me2fvs,mb2fvs,ms2fvs) = (* fvs on else? *) - match seq_fvs minus_quantified - [Ast.get_mfvs ifheader;Ast.get_mfvs branch2;[]] with + (* just combine with the else branch. no point to have separate + quantifier, since there is only one possible control-flow path *) + let else_mfvs = + Common.union_set (Ast.get_mfvs els) (Ast.get_mfvs branch2) in + match seq_fvs minus_quantified [Ast.get_mfvs ifheader;else_mfvs;[]] with [(e2fvs,b2fvs);(s2fvs,b2afvs);_] -> (e2fvs,Common.union_set b2fvs b2afvs,s2fvs) | _ -> failwith "not possible" in @@ -1039,7 +1048,10 @@ let ifthenelse ifheader branch1 els branch2 ((afvs,_,_,_) as aft) after (Some (lv,used)) llabel slabel guard] in let false_branch = make_seq guard - [falsepred label; make_match els; + [falsepred label; + quantify guard + (Common.minus_set (Ast.get_fvs els) new_quantified) + (make_match els); recurse branch2 Tail new_quantified new_mquantified (Some (lv,used)) llabel slabel guard] in let after_pred = aftpred label in @@ -1234,7 +1246,7 @@ let svar_minus_or_no_add_after stmt s label quantified d ast (* --------------------------------------------------------------------- *) (* dots and nests *) -let dots_au is_strict toend label s wrapcode x seq_after y quantifier = +let dots_au is_strict toend label s wrapcode n x seq_after y quantifier = let matchgoto = gotopred None in let matchbreak = make_match None false @@ -1253,7 +1265,10 @@ let dots_au is_strict toend label s wrapcode x seq_after y quantifier = then Common.Left(aftpred label) else Common.Right - (function v -> + (function vx -> function v -> + (* vx is the contents of the nest, if any. we can only stop early + if we find neither the ending code nor the nest contents in + the if branch. not sure if this is a good idea. *) let lv = get_label_ctr() in let labelpred = CTL.Pred(Lib_engine.Label lv,CTL.Control) in let preflabelpred = label_pred_maker (Some (lv,ref true)) in @@ -1262,7 +1277,8 @@ let dots_au is_strict toend label s wrapcode x seq_after y quantifier = (ctl_and CTL.NONSTRICT (ctl_and CTL.NONSTRICT (truepred label) labelpred) (ctl_au CTL.NONSTRICT - (ctl_and CTL.NONSTRICT (ctl_not v) preflabelpred) + (ctl_and CTL.NONSTRICT (ctl_not v) + (ctl_and CTL.NONSTRICT vx preflabelpred)) (ctl_and CTL.NONSTRICT preflabelpred (if !Flag_matcher.only_return_is_error_exit then @@ -1280,9 +1296,11 @@ let dots_au is_strict toend label s wrapcode x seq_after y quantifier = let v = get_let_ctr() in op s x (match stop_early with - Common.Left x -> ctl_or y x + Common.Left x1 -> ctl_or y x1 | Common.Right stop_early -> - CTL.Let(v,y,ctl_or (CTL.Ref v) (stop_early (CTL.Ref v)))) + CTL.Let(v,y, + ctl_or (CTL.Ref v) + (stop_early n (CTL.Ref v)))) let rec dots_and_nests plus nest whencodes bef aft dotcode after label process_bef_aft statement_list statement guard quantified wrapcode = @@ -1341,7 +1359,11 @@ let rec dots_and_nests plus nest whencodes bef aft dotcode after label | Ast.WhenNotFalse(e) -> (poswhen, ctl_or (whencond_false e label guard quantified) negwhen)) - (CTL.True,bef_aft) (List.rev whencodes) in + (CTL.True,CTL.False(*bef_aft*)) (List.rev whencodes) in + (*bef_aft modifies arg so that inside of a nest can't cause the next + to overshoot its boundaries, eg a() <...f()...> b() where f is + a metavariable and the whole thing matches code in a loop; + don't want f to match eg b(), allowing to go around the loop again*) let poswhen = ctl_and_ns arg poswhen in let negwhen = (* if !exists @@ -1360,9 +1382,11 @@ let rec dots_and_nests plus nest whencodes bef aft dotcode after label on the "true" in between code *) let plus_var = if plus then get_label_ctr() else string2var "" in let plus_var2 = if plus then get_label_ctr() else string2var "" in - let ornest = + let (ornest,just_nest) = + (* just_nest is used when considering whether to stop early, to continue + to collect nest information in the if branch *) match (nest,guard && not plus) with - (None,_) | (_,true) -> whencodes CTL.True + (None,_) | (_,true) -> (whencodes CTL.True,CTL.True) | (Some nest,false) -> let v = get_let_ctr() in let is_plus x = @@ -1379,9 +1403,11 @@ let rec dots_and_nests plus nest whencodes bef aft dotcode after label CTL.Pred(Lib_engine.BindGood(plus_var), CTL.Modif plus_var2))) else x in - CTL.Let(v,nest, - CTL.Or(is_plus (CTL.Ref v), - whencodes (CTL.Not(ctl_uncheck (CTL.Ref v))))) in + let body = + CTL.Let(v,nest, + CTL.Or(is_plus (CTL.Ref v), + whencodes (CTL.Not(ctl_uncheck (CTL.Ref v))))) in + (body,body) in let plus_modifier x = if plus then @@ -1417,8 +1443,9 @@ let rec dots_and_nests plus nest whencodes bef aft dotcode after label else exit (* end at the real end of the function *) *) in plus_modifier (dots_au is_strict ((after = Tail) or (after = VeryEnd)) - label (guard_to_strict guard) wrapcode - (ctl_and_ns dotcode (ctl_and_ns ornest labelled)) + label (guard_to_strict guard) wrapcode just_nest + (ctl_and_ns dotcode + (ctl_and_ns (ctl_and_ns (ctl_not bef_aft) ornest) labelled)) aft ender quantifier) and get_whencond_exps e = @@ -1748,7 +1775,7 @@ and statement stmt after quantified minus_quantified (quantify guard b2fvs (statement_list body Tail new_quantified2 new_mquantified2 - (Some (lv,ref true)) + None(*no label because past the goto*) llabel slabel false guard))])) in ctl_or pattern_as_given (ctl_or pattern2 pattern3) else pattern_as_given @@ -2022,81 +2049,113 @@ and statement stmt after quantified minus_quantified Common.union_set mb1fvs (Common.union_set mb2fvs (Common.union_set mb3fvs minus_quantified)) in - let fn_nest = + let optim1 = match (Ast.undots body, contains_modif rbrace or contains_pos rbrace) with ([body],false) -> (match Ast.unwrap body with - Ast.Nest(stmt_dots,[],multi,_,_) -> - if multi - then None (* not sure how to optimize this case *) - else Some (Common.Left stmt_dots) - | Ast.Dots(_,whencode,_,_) when + Ast.Nest(stmt_dots,[],false,_,_) -> + (* special case for function header + body - header is unambiguous + and unique, so we can just look for the nested body anywhere + else in the CFG *) + Some + (CTL.AndAny + (CTL.FORWARD,guard_to_strict guard,start_brace, + statement_list stmt_dots + (* discards match on right brace, but don't need it *) + (Guard (make_seq_after end_brace after)) + new_quantified3 new_mquantified3 + None llabel slabel true guard)) + | Ast.Dots((_,i,d,_),whencode,_,_) when (List.for_all (* flow sensitive, so not optimizable *) (function Ast.WhenNotTrue(_) | Ast.WhenNotFalse(_) -> false | _ -> true) whencode) -> - Some (Common.Right whencode) + (* try to be more efficient for the case where the body is just + ... Perhaps this is too much of a special case, but useful + for dropping a parameter and checking that it is never used. *) + (match d with + Ast.MINUS(_,_,_,_) -> None + | _ -> + Some ( + make_seq + [start_brace; + match whencode with + [] -> CTL.True + | _ -> + let leftarg = + ctl_and + (ctl_not + (List.fold_left + (function prev -> + function + Ast.WhenAlways(s) -> prev + | Ast.WhenNot(sl) -> + let x = + statement_list sl Tail + new_quantified3 + new_mquantified3 + label llabel slabel + true true in + ctl_or prev x + | Ast.WhenNotTrue(_) + | Ast.WhenNotFalse(_) -> + failwith "unexpected" + | Ast.WhenModifier + (Ast.WhenAny) -> CTL.False + | Ast.WhenModifier(_) -> prev) + CTL.False whencode)) + (List.fold_left + (function prev -> + function + Ast.WhenAlways(s) -> + let x = + statement s Tail + new_quantified3 + new_mquantified3 + label llabel slabel true in + ctl_and prev x + | Ast.WhenNot(sl) -> prev + | Ast.WhenNotTrue(_) + | Ast.WhenNotFalse(_) -> + failwith "unexpected" + | Ast.WhenModifier(Ast.WhenAny) -> + CTL.True + | Ast.WhenModifier(_) -> prev) + CTL.True whencode) in + ctl_au leftarg (make_match stripped_rbrace)])) + | _ -> None) + | _ -> None in + let optim2 = + (* function body is all minus, no whencode *) + match Ast.undots body with + [body] -> + (match Ast.unwrap body with + Ast.Dots + ((_,i,(Ast.MINUS(_,_,_,[]) as d),_),[],_,_) -> + (match (Ast.unwrap lbrace,Ast.unwrap rbrace) with + (Ast.SeqStart((_,_,Ast.MINUS(_,_,_,[]),_)), + Ast.SeqEnd((_,_,Ast.MINUS(_,_,_,[]),_))) + when not (contains_pos rbrace) -> + Some + (* andany drops everything to the end, including close + braces - not just function body, could check + label to keep braces *) + (ctl_and start_brace + (ctl_ax + (CTL.AndAny + (CTL.FORWARD,guard_to_strict guard,CTL.True, + make_match + (make_meta_rule_elem d ([],[],[])))))) + | _ -> None) | _ -> None) | _ -> None in let body_code = - match fn_nest with - Some (Common.Left stmt_dots) -> - (* special case for function header + body - header is unambiguous - and unique, so we can just look for the nested body anywhere - else in the CFG *) - CTL.AndAny - (CTL.FORWARD,guard_to_strict guard,start_brace, - statement_list stmt_dots - (* discards match on right brace, but don't need it *) - (Guard (make_seq_after end_brace after)) - new_quantified3 new_mquantified3 - None llabel slabel true guard) - | Some (Common.Right whencode) -> - (* try to be more efficient for the case where the body is just - ... Perhaps this is too much of a special case, but useful - for dropping a parameter and checking that it is never used. *) - make_seq - [start_brace; - match whencode with - [] -> CTL.True - | _ -> - let leftarg = - ctl_and - (ctl_not - (List.fold_left - (function prev -> - function - Ast.WhenAlways(s) -> prev - | Ast.WhenNot(sl) -> - let x = - statement_list sl Tail - new_quantified3 new_mquantified3 - label llabel slabel true true in - ctl_or prev x - | Ast.WhenNotTrue(_) | Ast.WhenNotFalse(_) -> - failwith "unexpected" - | Ast.WhenModifier(Ast.WhenAny) -> CTL.False - | Ast.WhenModifier(_) -> prev) - CTL.False whencode)) - (List.fold_left - (function prev -> - function - Ast.WhenAlways(s) -> - let x = - statement s Tail - new_quantified3 new_mquantified3 - label llabel slabel true in - ctl_and prev x - | Ast.WhenNot(sl) -> prev - | Ast.WhenNotTrue(_) | Ast.WhenNotFalse(_) -> - failwith "unexpected" - | Ast.WhenModifier(Ast.WhenAny) -> CTL.True - | Ast.WhenModifier(_) -> prev) - CTL.True whencode) in - ctl_au leftarg (make_match stripped_rbrace)] - | None -> + match (optim1,optim2) with + (Some o1,_) -> o1 + | (_,Some o2) -> o2 + | _ -> make_seq [start_brace; quantify guard b3fvs @@ -2224,11 +2283,13 @@ let rec cleanup c = (* --------------------------------------------------------------------- *) (* Function declaration *) -let top_level name (ua,pos) t = +(* ua = used_after, fua = fresh_used_after, fuas = fresh_used_after_seeds *) + +let top_level name ((ua,pos),fua) (fuas,t) = let ua = List.filter (function (nm,_) -> nm = name) ua in used_after := ua; saved := Ast.get_saved t; - let quantified = Common.minus_set ua pos in + let quantified = Common.minus_set (Common.union_set ua fuas) pos in quantify false quantified (match Ast.unwrap t with Ast.FILEINFO(old_file,new_file) -> failwith "not supported fileinfo" @@ -2272,13 +2333,13 @@ let top_level name (ua,pos) t = (* --------------------------------------------------------------------- *) (* Entry points *) -let asttoctlz (name,(_,_,exists_flag),l) used_after positions = +let asttoctlz (name,(_,_,exists_flag),l) + (used_after,fresh_used_after,fresh_used_after_seeds) positions = letctr := 0; labelctr := 0; (match exists_flag with Ast.Exists -> exists := Exists | Ast.Forall -> exists := Forall - | Ast.ReverseForall -> exists := ReverseForall | Ast.Undetermined -> exists := if !Flag.sgrep_mode2 then Exists else Forall); @@ -2288,7 +2349,10 @@ let asttoctlz (name,(_,_,exists_flag),l) used_after positions = (function (t,_) -> match Ast.unwrap t with Ast.ERRORWORDS(exps) -> false | _ -> true) (List.combine l (List.combine used_after positions))) in - let res = List.map2 (top_level name) used_after l in + let res = + List.map2 (top_level name) + (List.combine used_after fresh_used_after) + (List.combine fresh_used_after_seeds l) in exists := Forall; res diff --git a/engine/asttoctl2.mli b/engine/asttoctl2.mli index a872298..7e9c2e7 100644 --- a/engine/asttoctl2.mli +++ b/engine/asttoctl2.mli @@ -3,7 +3,10 @@ type formula = (cocci_predicate,Ast_cocci.meta_name, Wrapper_ctl.info) Ast_ctl.generic_ctl val asttoctl : - Ast_cocci.rule -> Ast_cocci.meta_name list list (* used after *) -> + Ast_cocci.rule -> + (Ast_cocci.meta_name list list (* used after *) * + Ast_cocci.meta_name list list (* fresh used after *) * + Ast_cocci.meta_name list list (* fresh used after seeds *)) -> Ast_cocci.meta_name list list (* positions *) -> formula list diff --git a/engine/cocci_vs_c.ml b/engine/cocci_vs_c.ml index e50003c..f081cea 100644 --- a/engine/cocci_vs_c.ml +++ b/engine/cocci_vs_c.ml @@ -292,6 +292,60 @@ let equal_metavarval valu valu' = ), _ -> raise Impossible +let equal_inh_metavarval valu valu' = + match valu, valu' with + | Ast_c.MetaIdVal a, Ast_c.MetaIdVal b -> a =$= b + | Ast_c.MetaFuncVal a, Ast_c.MetaFuncVal b -> a =$= b + | Ast_c.MetaLocalFuncVal a, Ast_c.MetaLocalFuncVal b -> + (* do something more ? *) + a =$= b + + (* al_expr before comparing !!! and accept when they match. + * Note that here we have Astc._expression, so it is a match + * modulo isomorphism (there is no metavariable involved here, + * just isomorphisms). => TODO call isomorphism_c_c instead of + * =*=. Maybe would be easier to transform ast_c in ast_cocci + * and call the iso engine of julia. *) + | Ast_c.MetaExprVal a, Ast_c.MetaExprVal b -> + Lib_parsing_c.al_inh_expr a =*= Lib_parsing_c.al_inh_expr b + | Ast_c.MetaExprListVal a, Ast_c.MetaExprListVal b -> + Lib_parsing_c.al_inh_arguments a =*= Lib_parsing_c.al_inh_arguments b + + | Ast_c.MetaStmtVal a, Ast_c.MetaStmtVal b -> + Lib_parsing_c.al_inh_statement a =*= Lib_parsing_c.al_inh_statement b + | Ast_c.MetaInitVal a, Ast_c.MetaInitVal b -> + Lib_parsing_c.al_inh_init a =*= Lib_parsing_c.al_inh_init b + | Ast_c.MetaTypeVal a, Ast_c.MetaTypeVal b -> + (* old: Lib_parsing_c.al_inh_type a =*= Lib_parsing_c.al_inh_type b *) + C_vs_c.eq_type a b + + | Ast_c.MetaListlenVal a, Ast_c.MetaListlenVal b -> a =|= b + + | Ast_c.MetaParamVal a, Ast_c.MetaParamVal b -> + Lib_parsing_c.al_param a =*= Lib_parsing_c.al_param b + | Ast_c.MetaParamListVal a, Ast_c.MetaParamListVal b -> + Lib_parsing_c.al_params a =*= Lib_parsing_c.al_params b + + | Ast_c.MetaPosVal (posa1,posa2), Ast_c.MetaPosVal (posb1,posb2) -> + Ast_cocci.equal_pos posa1 posb1 && Ast_cocci.equal_pos posa2 posb2 + + | Ast_c.MetaPosValList l1, Ast_c.MetaPosValList l2 -> + List.exists + (function (fla,cea,posa1,posa2) -> + List.exists + (function (flb,ceb,posb1,posb2) -> + fla =$= flb && cea =$= ceb && + Ast_c.equal_posl posa1 posb1 && Ast_c.equal_posl posa2 posb2) + l2) + l1 + + | (B.MetaPosValList _|B.MetaListlenVal _|B.MetaPosVal _|B.MetaStmtVal _ + |B.MetaTypeVal _ |B.MetaInitVal _ + |B.MetaParamListVal _|B.MetaParamVal _|B.MetaExprListVal _ + |B.MetaExprVal _|B.MetaLocalFuncVal _|B.MetaFuncVal _|B.MetaIdVal _ + ), _ + -> raise Impossible + (*---------------------------------------------------------------------------*) (* could put in ast_c.ml, next to the split/unsplit_comma *) @@ -431,22 +485,37 @@ let initialisation_to_affectation decl = | [x] -> let ({B.v_namei = var; B.v_type = returnType; + B.v_type_bis = tybis; B.v_storage = storage; B.v_local = local}, iisep) = x in + + (match var with | Some (name, iniopt) -> (match iniopt with | Some (iini, (B.InitExpr e, ii_empty2)) -> - let iis = Ast_c.info_of_name name in + let local = match local with Ast_c.NotLocalDecl -> Ast_c.NotLocalVar - | Ast_c.LocalDecl -> Ast_c.LocalVar (iis.Ast_c.pinfo) in - + | Ast_c.LocalDecl -> + Ast_c.LocalVar (Ast_c.info_of_type returnType) in + + let typexp = + (* old: Lib_parsing_c.al_type returnType + * but this type has not the typename completed so + * instead try to use tybis + *) + match !tybis with + | Some ty_with_typename_completed -> + ty_with_typename_completed + | None -> raise Impossible + in + let typ = - ref (Some ((Lib_parsing_c.al_type returnType),local), + ref (Some (typexp,local), Ast_c.NotTest) in let ident = name in let idexpr = @@ -1688,6 +1757,7 @@ and onedecl = fun allminus decla (declb, iiptvirgb, iistob) -> B.v_storage = (B.StoTypedef, inl); B.v_local = local; B.v_attr = attrs; + B.v_type_bis = typb0bis; }, iivirg) -> (match A.unwrap tya0, typb0 with @@ -1751,6 +1821,7 @@ and onedecl = fun allminus decla (declb, iiptvirgb, iistob) -> B.v_storage = (B.StoTypedef, inl); B.v_local = local; B.v_attr = attrs; + B.v_type_bis = typb0bis; }, iivirg),iiptvirgb,iistob) ) @@ -1779,6 +1850,7 @@ and onedecl = fun allminus decla (declb, iiptvirgb, iistob) -> B.v_storage = (B.StoTypedef, inl); B.v_local = local; B.v_attr = attrs; + B.v_type_bis = typb0bis; }, iivirg),iiptvirgb,iistob) ) @@ -1810,6 +1882,7 @@ and onedecl = fun allminus decla (declb, iiptvirgb, iistob) -> B.v_storage = stob; B.v_local = local; B.v_attr = attrs; + B.v_type_bis = typbbis; }, iivirg) -> tokenf ptvirga iiptvirgb >>= (fun ptvirga iiptvirgb -> @@ -1824,6 +1897,7 @@ and onedecl = fun allminus decla (declb, iiptvirgb, iistob) -> B.v_storage = stob; B.v_local = local; B.v_attr = attrs; + B.v_type_bis = typbbis; },iivirg), iiptvirgb,iistob) ))))) @@ -1834,6 +1908,7 @@ and onedecl = fun allminus decla (declb, iiptvirgb, iistob) -> B.v_storage = stob; B.v_local = local; B.v_attr = attrs; + B.v_type_bis = typbbis; },iivirg) -> tokenf ptvirga iiptvirgb >>= (fun ptvirga iiptvirgb -> @@ -1850,6 +1925,7 @@ and onedecl = fun allminus decla (declb, iiptvirgb, iistob) -> B.v_storage = stob; B.v_local = local; B.v_attr = attrs; + B.v_type_bis = typbbis; },iivirg), iiptvirgb,iistob) ))))))) @@ -1860,6 +1936,7 @@ and onedecl = fun allminus decla (declb, iiptvirgb, iistob) -> B.v_storage = stob; B.v_local = local; B.v_attr = attrs; + B.v_type_bis = typbbis; }, iivirg) -> if stob =*= (B.NoSto, false) @@ -1873,6 +1950,7 @@ and onedecl = fun allminus decla (declb, iiptvirgb, iistob) -> B.v_storage = stob; B.v_local = local; B.v_attr = attrs; + B.v_type_bis = typbbis; }, iivirg), iiptvirgb, iistob) ))) else fail @@ -1884,6 +1962,7 @@ and onedecl = fun allminus decla (declb, iiptvirgb, iistob) -> B.v_storage = (B.StoTypedef,inline); B.v_local = local; B.v_attr = attrs; + B.v_type_bis = typbbis; },iivirg) -> tokenf ptvirga iiptvirgb >>= (fun ptvirga iiptvirgb -> @@ -1936,6 +2015,7 @@ and onedecl = fun allminus decla (declb, iiptvirgb, iistob) -> B.v_storage = (B.StoTypedef,inline); B.v_local = local; B.v_attr = attrs; + B.v_type_bis = typbbis; }, iivirg), iiptvirgb, iistob) @@ -2266,6 +2346,9 @@ and (struct_field: (A.declaration, B.field) matcher) = fun fa fb -> B.v_storage = stob; B.v_local = Ast_c.NotLocalDecl; B.v_attr = Ast_c.noattr; + B.v_type_bis = ref None; + (* the struct field should also get expanded ? no it's not + * important here, we will rematch very soon *) }, iivirg) in @@ -3758,16 +3841,12 @@ let rec (rule_elem_node: (A.rule_elem, Control_flow_c.node) matcher) = | A.Label(id,dd), F.Label (st, nameb, ((),ii)) -> let (ib2) = tuple_of_list1 ii in - (match A.unwrap id with - | A.Id(_s) -> - ident_cpp DontKnow id nameb >>= (fun ida nameb -> - tokenf dd ib2 >>= (fun dd ib2 -> - return ( - A.Label (ida,dd), - F.Label (st,nameb, ((),[ib2])) - ))) - | _ -> failwith "labels with metavariables not supported" - ) + ident_cpp DontKnow id nameb >>= (fun ida nameb -> + tokenf dd ib2 >>= (fun dd ib2 -> + return ( + A.Label (ida,dd), + F.Label (st,nameb, ((),[ib2])) + ))) | A.Goto(goto,id,sem), F.Goto (st,nameb, ((),ii)) -> let (ib1,ib3) = tuple_of_list2 ii in diff --git a/engine/cocci_vs_c.mli b/engine/cocci_vs_c.mli index dfe7db7..0b6798d 100644 --- a/engine/cocci_vs_c.mli +++ b/engine/cocci_vs_c.mli @@ -32,6 +32,10 @@ type mode = PatternMode | TransformMode val equal_metavarval : Ast_c.metavar_binding_kind -> Ast_c.metavar_binding_kind -> bool +(* for inherited metavariables. no declaration link on expressions *) +val equal_inh_metavarval : + Ast_c.metavar_binding_kind -> Ast_c.metavar_binding_kind -> bool + (*****************************************************************************) (* The parameter of the functor (the specific actions) *) (*****************************************************************************) diff --git a/engine/ctlcocci_integration.ml b/engine/ctlcocci_integration.ml index e4c83b0..928bd1c 100644 --- a/engine/ctlcocci_integration.ml +++ b/engine/ctlcocci_integration.ml @@ -426,7 +426,8 @@ let (mysat2: fun (flow, label, states) ctl (used_after, binding) -> let binding2 = metavars_binding_to_binding2 binding in let (triples,(trans_info2, returned_any_states, used_after_envs)) = - WRAPPED_ENGINE.satbis (flow, label, states) ctl (used_after, binding2) + WRAPPED_ENGINE.satbis (flow, label, states) ctl + (used_after, binding2) in if not (!Flag_parsing_cocci.sgrep_mode || !Flag.sgrep_mode2 || !Flag_matcher.allow_inconsistent_paths) diff --git a/engine/flag_matcher.ml b/engine/flag_matcher.ml index 9bcb3f4..9545d76 100644 --- a/engine/flag_matcher.ml +++ b/engine/flag_matcher.ml @@ -35,6 +35,9 @@ let only_return_is_error_exit = ref false (* a hack to allow adding code in some more sgrep-like uses *) let allow_inconsistent_paths = ref false +(* see the use of this variable in asttoctl2.ml *) +let no_safe_expressions = ref false + let show_misc = ref true diff --git a/engine/pattern_c.ml b/engine/pattern_c.ml index 78dfb46..9b964e7 100644 --- a/engine/pattern_c.ml +++ b/engine/pattern_c.ml @@ -300,7 +300,7 @@ module XMATCH = struct inherited variables *) (match Common.optionise (fun () -> tin.binding0 +> List.assoc c) with Some valu' -> - if Cocci_vs_c.equal_metavarval exp valu' + if Cocci_vs_c.equal_inh_metavarval exp valu' then success else failure | None -> (* if the variable is not there, it puts no constraints *) @@ -323,7 +323,7 @@ module XMATCH = struct then match Common.optionise (fun () -> tin.binding0 +> List.assoc k) with | Some (valu') -> - if Cocci_vs_c.equal_metavarval valu valu' + if Cocci_vs_c.equal_inh_metavarval valu valu' then Some tin.binding else None | None -> None diff --git a/engine/postprocess_transinfo.ml b/engine/postprocess_transinfo.ml index 1a66f31..a3e6134 100644 --- a/engine/postprocess_transinfo.ml +++ b/engine/postprocess_transinfo.ml @@ -76,23 +76,40 @@ let process_tree inherited_env l = let fresh_env = List.map (function - ((r,n) as fresh,None) -> + ((r,n) as fresh,Ast.NoVal) -> Printf.printf "%s: name for %s: " r n; (* not debugging code!!! *) flush stdout; - (fresh,string2val(read_fresh_id())) - | ((r,n) as fresh,Some seed) -> - (fresh,string2val(get_seeded seed))) + (fresh,let v = string2val(read_fresh_id()) in function _ -> v) + | ((r,n) as fresh,Ast.StringSeed seed) -> + (fresh,let v = string2val(get_seeded seed) in function _ -> v) + | ((r,n) as fresh,Ast.ListSeed seed) -> + (fresh, + function env -> + let strings = + List.map + (function + Ast.SeedString s -> s + | Ast.SeedId id -> + try + (match List.assoc id env with + Lib_engine.NormalMetaVal(Ast_c.MetaIdVal(str)) -> + str + | _ -> failwith "bad id value") + with + Not_found -> failwith "fresh: no binding for meta") + seed in + string2val(String.concat "" strings))) all_fresh in let (_,res) = List.split (List.fold_left (function freshs_node_env_preds -> - function (fresh,_) as elem -> + function (fresh,fn) -> List.map (function (freshs,((node,env,pred) as cur)) -> try let _ = List.assoc fresh freshs in - (freshs,(node,elem::env,pred)) + (freshs,(node,(fresh,fn env)::env,pred)) with Not_found -> (freshs,cur)) freshs_node_env_preds) (List.combine local_freshs new_triples) @@ -101,9 +118,25 @@ let process_tree inherited_env l = (* ----------------------------------------------------------------------- *) (* Create the environment to be used afterwards *) - -let collect_used_after used_after envs = - List.map (List.filter (function (v,vl) -> List.mem v used_after)) envs +(* anything that a used after fresh variable refers to has to have a unique +value, by virtue of the placement of the quantifier. thus we augment +inherited env with the first element of l, if any *) + +let collect_used_after used_after envs l inherited_env = + List.map2 + (function env -> function l -> + let inherited_env = + match l with + [] -> inherited_env + | (_,fse,_)::_ -> + (* l represents the result from a single tree. fse is a complete + environment in that tree. for a fresh seed, the environments + for all leaves contain the same information *) + fse@inherited_env in + List.map + (function (v,vl) -> (v,vl inherited_env)) + (List.filter (function (v,vl) -> List.mem v used_after) env)) + envs l (* ----------------------------------------------------------------------- *) (* distinguish between distinct witness trees, each gets an index n *) @@ -130,4 +163,4 @@ let process used_after inherited_env l = let (trees, fresh_envs) = List.split (List.map (process_tree inherited_env) l) in let trees = numberify trees in - (trees, collect_used_after used_after fresh_envs) + (trees, collect_used_after used_after fresh_envs l inherited_env) diff --git a/engine/pretty_print_engine.ml b/engine/pretty_print_engine.ml index d405cb3..1842f8d 100644 --- a/engine/pretty_print_engine.ml +++ b/engine/pretty_print_engine.ml @@ -33,8 +33,7 @@ let rec pp_binding_kind = function | Ast_c.MetaIdVal s -> pp ("id " ^ s) | Ast_c.MetaFuncVal s -> pp ("func " ^ s) | Ast_c.MetaLocalFuncVal s -> pp ("localfunc " ^ s) - | Ast_c.MetaExprVal expr -> - Pretty_print_c.pp_expression_simple expr + | Ast_c.MetaExprVal expr -> Pretty_print_c.pp_expression_simple expr | Ast_c.MetaExprListVal expr_list -> pp "<>" | Ast_c.MetaInitVal ini -> Pretty_print_c.pp_init_simple ini diff --git a/engine/transformation_c.ml b/engine/transformation_c.ml index 6bcdb17..2c8a206 100644 --- a/engine/transformation_c.ml +++ b/engine/transformation_c.ml @@ -215,7 +215,7 @@ module XTRANS = struct | (Ast_cocci.MINUS(old_pos,old_inst,old_adj,[]), Ast_cocci.MINUS(new_pos,new_inst,new_adj,[])) - when old_pos = new_pos && oldenv =*= tin.binding + when old_pos = new_pos && (oldenv =*= tin.binding or !Flag.sgrep_mode2) (* no way to combine adjacency information, just drop one *) -> cocciinforef := Some @@ -473,7 +473,7 @@ module XTRANS = struct let meta_name_to_str (s1, s2) = s1 ^ "." ^ s2 - let envf keep _inherited = fun (s, value, _) f tin -> + let envf keep inherited = fun (s, value, _) f tin -> let s = Ast_cocci.unwrap_mcode s in let v = if keep =*= Type_cocci.Saved @@ -504,7 +504,11 @@ module XTRANS = struct *) (*f () tin*) - if Cocci_vs_c.equal_metavarval value value' + let equal = + if inherited + then Cocci_vs_c.equal_inh_metavarval + else Cocci_vs_c.equal_metavarval in + if equal value value' then f () tin else fail tin diff --git a/globals/config.ml.in b/globals/config.ml.in index 3670c92..08fecb3 100644 --- a/globals/config.ml.in +++ b/globals/config.ml.in @@ -1,4 +1,4 @@ -let version = "0.1.8" +let version = "0.1.9-rc1" let path = try (Sys.getenv "COCCINELLE_HOME") diff --git a/main.ml b/main.ml index 7aa9ab5..94ee0bf 100644 --- a/main.ml +++ b/main.ml @@ -37,14 +37,16 @@ let cocci_file = ref "" let output_file = ref "" let inplace_modif = ref false (* but keeps a .cocci_orig *) let outplace_modif = ref false (* generates a .cocci_res *) +let preprocess = ref false (* run the C preprocessor before cocci *) +let compat_mode = ref false (* somehow obsolete now *) -let dir = ref false +let dir = ref false let include_headers = ref false let kbuild_info = ref "" -let macro_file = ref "" +let macro_file = ref "" (* test mode *) let test_mode = ref false @@ -98,6 +100,7 @@ let quiet_profile = ( Flag_parsing_c.verbose_cfg; Flag_parsing_c.verbose_unparsing; Flag_parsing_c.verbose_visit; + Flag_parsing_c.verbose_cpp_ast; Flag_matcher.verbose_matcher; Flag_matcher.debug_engine; @@ -192,9 +195,9 @@ let run_profile p = (* The spatch options *) (*****************************************************************************) -let usage_msg = - "Usage: " ^ basename Sys.argv.(0) ^ - " -sp_file [-o ] [-iso_file ] [options]" ^ +let usage_msg = + "Usage: " ^ basename Sys.argv.(0) ^ + " -sp_file [-o ] [-iso_file ] [options]" ^ "\n" ^ "Options are:" (* forward reference trick *) @@ -206,13 +209,13 @@ let long_usage_func = ref (fun () -> ()) * the developers of coccinelle or advanced-users that know * quite well the underlying semantics of coccinelle. *) - + (* will be printed when use only ./spatch. For the rest you have to - * use -longhelp to see them. + * use -longhelp to see them. *) -let short_options = [ - "-sp_file", Arg.Set_string cocci_file, +let short_options = [ + "-sp_file", Arg.Set_string cocci_file, " the semantic patch file"; "-o", Arg.Set_string output_file, @@ -222,12 +225,12 @@ let short_options = [ "-outplace", Arg.Set outplace_modif, " store modifications in a .cocci_res file"; - "-U", Arg.Int (fun n -> Flag_parsing_c.diff_lines := Some (i_to_s n)), + "-U", Arg.Int (fun n -> Flag_parsing_c.diff_lines := Some (i_to_s n)), " set number of diff context lines"; - "-partial_match", Arg.Set Flag_ctl.partial_match, + "-partial_match", Arg.Set Flag_ctl.partial_match, " report partial matches of the SP on the C file"; - "-iso_file", Arg.Set_string Config.std_iso, + "-iso_file", Arg.Set_string Config.std_iso, " (default=" ^ !Config.std_iso ^")"; "-macro_file", Arg.Set_string macro_file, " "; @@ -248,6 +251,10 @@ let short_options = [ "-I", Arg.String (function x -> FC.include_path := Some x), "

containing the header files (optional)"; + "-preprocess", Arg.Set preprocess, + " run the C preprocessor before applying the semantic match"; + + "-c", Arg.Set compat_mode, " gcc/cpp compatibility mode"; "-dir", Arg.Set dir, " process all files in directory recursively"; @@ -257,70 +264,69 @@ let short_options = [ "-patch", Arg.String (function s -> Flag.patch := Some s), (" path name with respect to which a patch should be created\n"^ " \"\" for a file in the current directory"); - "-kbuild_info", Arg.Set_string kbuild_info, + "-kbuild_info", Arg.Set_string kbuild_info, " improve -dir by grouping related c files"; "-pyoutput", Arg.Set_string Flag.pyoutput, " Sets output routine: Standard values: "; - "-version", Arg.Unit (fun () -> + "-version", Arg.Unit (fun () -> pr2 (spf "spatch version: %s" Config.version); exit 0; - ), + ), " guess what"; - "-date", Arg.Unit (fun () -> - pr2 "version: $Date: 2009/05/08 16:15:31 $"; + "-date", Arg.Unit (fun () -> + pr2 "version: $Date: 2009/07/21 08:21:29 $"; raise (Common.UnixExit 0) - ), + ), " guess what"; - "-shorthelp", Arg.Unit (fun () -> + "-shorthelp", Arg.Unit (fun () -> !short_usage_func(); raise (Common.UnixExit 0) - ), + ), " see short list of options"; - "-longhelp", Arg.Unit (fun () -> + "-longhelp", Arg.Unit (fun () -> !long_usage_func(); raise (Common.UnixExit 0) - ), + ), " see all the available options in different categories"; - "-help", Arg.Unit (fun () -> + "-help", Arg.Unit (fun () -> !long_usage_func(); raise (Common.UnixExit 0) ), " "; - "--help", Arg.Unit (fun () -> + "--help", Arg.Unit (fun () -> !long_usage_func(); raise (Common.UnixExit 0) ), " "; - ] (* the format is a list of triples: * (title of section * (optional) explanation of sections * option list) *) let other_options = [ - "aliases and obsolete options", + "aliases and obsolete options", "", - [ + [ "-sp", Arg.Set_string cocci_file, " short option of -sp_file"; "-iso", Arg.Set_string Config.std_iso, " short option of -iso_file"; - "-cocci_file", Arg.Set_string cocci_file, + "-cocci_file", Arg.Set_string cocci_file, " the semantic patch file"; - "-c", Arg.Set_string cocci_file, " short option of -sp_file"; +(* "-c", Arg.Set_string cocci_file, " short option of -sp_file"; *) ]; - "most useful show options", + "most useful show options", "", [ "-show_diff" , Arg.Set FC.show_diff, " "; "-no_show_diff" , Arg.Clear FC.show_diff, " "; "-show_flow" , Arg.Set FC.show_flow, " "; (* works in conjunction with -show_ctl_text *) - "-ctl_inline_let", + "-ctl_inline_let", Arg.Unit (function _ -> FC.show_ctl_text := true; FC.inline_let_ctl := true), " "; "-ctl_show_mcodekind", @@ -338,7 +344,7 @@ let other_options = [ " show the dependencies related to each rule"; ]; - "verbose subsystems options", + "verbose subsystems options", "", [ "-verbose_ctl_engine", @@ -377,15 +383,15 @@ let other_options = [ "-debug_etdt", Arg.Set Flag_parsing_c.debug_etdt , " "; "-debug_typedef", Arg.Set Flag_parsing_c.debug_typedef, " "; - "-filter_msg", Arg.Set Flag_parsing_c.filter_msg , + "-filter_msg", Arg.Set Flag_parsing_c.filter_msg , " filter some cpp message when the macro is a \"known\" cpp construct"; - "-filter_define_error",Arg.Set Flag_parsing_c.filter_define_error," "; - "-filter_msg_define_error",Arg.Set Flag_parsing_c.filter_msg_define_error, + "-filter_define_error", Arg.Set Flag_parsing_c.filter_define_error," "; + "-filter_msg_define_error", Arg.Set Flag_parsing_c.filter_msg_define_error, " filter the error msg"; - "-filter_passed_level", Arg.Set_int Flag_parsing_c.filter_passed_level," "; + "-filter_passed_level", Arg.Set_int Flag_parsing_c.filter_passed_level," "; (* debug cfg doesn't seem to have any effect, so drop it as an option *) (* "-debug_cfg", Arg.Set Flag_parsing_c.debug_cfg , " "; *) - "-debug_unparsing", Arg.Set Flag_parsing_c.debug_unparsing, " "; + "-debug_unparsing", Arg.Set Flag_parsing_c.debug_unparsing, " "; ]; (* could use Flag_parsing_c.options_debug_with_title instead *) @@ -404,13 +410,13 @@ let other_options = [ "bench options", "", [ - "-profile", Arg.Unit (function () -> Common.profile := Common.PALL) , + "-profile", Arg.Unit (function () -> Common.profile := Common.PALL) , " gather timing information about the main coccinelle functions"; - "-bench", Arg.Int (function x -> Flag_ctl.bench := x), + "-bench", Arg.Int (function x -> Flag_ctl.bench := x), " for profiling the CTL engine"; - "-timeout", Arg.Int (fun x -> FC.timeout := Some x), + "-timeout", Arg.Int (fun x -> FC.timeout := Some x), " timeout in seconds"; - "-steps", Arg.Int (fun x -> Flag_ctl.steps := Some x), + "-steps", Arg.Int (fun x -> Flag_ctl.steps := Some x), " max number of model checking steps per code unit"; "-iso_limit", Arg.Int (fun x -> Flag_parsing_cocci.iso_limit := Some x), " max depth of iso application"; @@ -433,17 +439,17 @@ let other_options = [ "", [ (* no popl in official version - "-popl", Arg.Set FC.popl, + "-popl", Arg.Set FC.popl, " simplified SmPL, for the popl paper"; "-popl_mark_all", Arg.Unit - (function _ -> FC.popl := true; Flag_popl.mark_all := true), + (function _ -> FC.popl := true; Flag_popl.mark_all := true), " simplified SmPL, for the popl paper"; "-popl_keep_all_wits", Arg.Unit - (function _ -> FC.popl := true; Flag_popl.keep_all_wits := true), + (function _ -> FC.popl := true; Flag_popl.keep_all_wits := true), " simplified SmPL, for the popl paper"; *) @@ -453,18 +459,20 @@ let other_options = [ " semantic patch generation"; "-loop", Arg.Set Flag_ctl.loop_in_src_code, " "; + "-no_loops", Arg.Set Flag_parsing_c.no_loops, + " drop all back edges derived from looping constructs - unsafe"; "-l1", Arg.Clear Flag_parsing_c.label_strategy_2, " "; - "-ifdef_to_if", Arg.Set FC.ifdef_to_if, + "-ifdef_to_if", Arg.Set FC.ifdef_to_if, " convert ifdef to if (experimental)"; - "-no_ifdef_to_if", Arg.Clear FC.ifdef_to_if, + "-no_ifdef_to_if", Arg.Clear FC.ifdef_to_if, " convert ifdef to if (experimental)"; "-disable_multi_pass", Arg.Set Flag_parsing_c.disable_multi_pass, " "; - "-noif0_passing", Arg.Clear Flag_parsing_c.if0_passing, + "-noif0_passing", Arg.Clear Flag_parsing_c.if0_passing, " "; - "-noadd_typedef_root", Arg.Clear Flag_parsing_c.add_typedef_root, " "; + "-noadd_typedef_root", Arg.Clear Flag_parsing_c.add_typedef_root, " "; (* could use Flag_parsing_c.options_algo instead *) @@ -481,6 +489,9 @@ let other_options = [ "-allow_inconsistent_paths", Arg.Set Flag_matcher.allow_inconsistent_paths, " if this flag is set don't check for inconsistent paths; dangerous"; + "-no_safe_expressions", + Arg.Set Flag_matcher.no_safe_expressions, + " make an expression disjunction not prioritise the topmost disjunct"; "-int_bits", Arg.Int Flag_parsing_c.set_int_bits, " the number of bits in an unsigned int"; "-long_bits", Arg.Int Flag_parsing_c.set_long_bits, @@ -494,21 +505,21 @@ let other_options = [ "misc options", "", [ - "-debugger", Arg.Set Common.debugger , + "-debugger", Arg.Set Common.debugger, " option to set if launch spatch in ocamldebug"; - "-disable_once", Arg.Set Common.disable_pr2_once, + "-disable_once", Arg.Set Common.disable_pr2_once, " to print more messages"; - "-show_trace_profile", Arg.Set Common.show_trace_profile, + "-show_trace_profile", Arg.Set Common.show_trace_profile, " show trace"; - "-save_tmp_files", Arg.Set Common.save_tmp_files, " "; + "-save_tmp_files", Arg.Set Common.save_tmp_files, " "; ]; "concurrency", "", [ - "-index", Arg.Int (function x -> distrib_index := Some x) , + "-index", Arg.Int (function x -> distrib_index := Some x) , " the processor to use for this run of spatch"; - "-max", Arg.Int (function x -> distrib_max := Some x) , + "-max", Arg.Int (function x -> distrib_max := Some x) , " the number of processors available"; "-mod_distrib", Arg.Set mod_distrib, " use mod to distribute files among the processors"; @@ -517,7 +528,7 @@ let other_options = [ "pad options", "", [ - "-use_cache", Arg.Set Flag_parsing_c.use_cache, + "-use_cache", Arg.Set Flag_parsing_c.use_cache, " use .ast_raw pre-parsed cached C file"; (* could use Flag_parsing_c.options_pad instead *) ]; @@ -527,22 +538,21 @@ let other_options = [ "test mode and test options (works with tests/ or .ok files)", "The test options don't work with the -sp_file and so on.", [ - "-test", Arg.Set test_mode, + "-test", Arg.Set test_mode, " launch spatch on tests/file.[c,cocci]"; - "-testall", Arg.Set test_all, + "-testall", Arg.Set test_all, " launch spatch on all files in tests/ having a .res"; "-test_okfailed", Arg.Set test_okfailed, " generates .{ok,failed,spatch_ok} files using .res files"; "-test_regression_okfailed", Arg.Set test_regression_okfailed, " process the .{ok,failed,spatch_ok} files in current dir"; - "-compare_with_expected", Arg.Set compare_with_expected, - " use also file.res"; - "-expected_score_file", Arg.Set_string expected_score_file, - " which score file to compare with in -testall"; + "-compare_with_expected", Arg.Set compare_with_expected, + " use also file.res"; + "-expected_score_file", Arg.Set_string expected_score_file, + " which score file to compare with in -testall"; "-relax_include_path", Arg.Set FC.relax_include_path, " "; - ]; "action mode", @@ -561,10 +571,9 @@ let other_options = [ ] -let all_options = +let all_options = short_options ++ List.concat (List.map Common.thd3 other_options) - - + (* I don't want the -help and --help that are appended by Arg.align *) let arg_align2 xs = Arg.align xs +> List.rev +> Common.drop 2 +> List.rev @@ -587,7 +596,7 @@ let arg_parse2 l f msg = let short_usage () = begin - Common.short_usage usage_msg short_options; + Common.short_usage usage_msg short_options; pr2 ""; pr2 "Example of use:"; pr2 " ./spatch -sp_file foo.cocci foo.c -o /tmp/newfoo.c"; @@ -595,7 +604,7 @@ let short_usage () = end -let long_usage () = +let long_usage () = Common.long_usage usage_msg short_options other_options let _ = short_usage_func := short_usage @@ -609,18 +618,18 @@ let adjust_stdin cfile k = if !dir then k() else - let newin = + let newin = try let (dir, base, ext) = Common.dbe_of_filename cfile in let varfile = Common.filename_of_dbe (dir, base, "var") in if ext =$= "c" && Common.lfile_exists varfile then Some varfile - else None + else None with Invalid_argument("Filename.chop_extension") -> None in Common.redirect_stdin_opt newin k -let glimpse_filter (coccifile, isofile) dir = +let glimpse_filter (coccifile, isofile) dir = let (_metavars,astcocci,_free_var_lists,_negated_positions, _used_after_lists,_positions_lists,_,query) = Cocci.sp_of_file coccifile (Some isofile) in @@ -638,19 +647,18 @@ let glimpse_filter (coccifile, isofile) dir = List.filter (fun file -> List.mem (Common.filesuffix file) suffixes)) | _ -> None (* error, eg due to pattern too big *) - - + (*****************************************************************************) (* Main action *) (*****************************************************************************) -let main_action xs = +let main_action xs = match xs with | x::xs -> - (* a more general solution would be to use - * Common.files_of_dir_or_files (x::xs) + (* a more general solution would be to use + * Common.files_of_dir_or_files (x::xs) * as some elements in xs may also be directories, or individual * files. *) @@ -671,15 +679,15 @@ let main_action xs = "directory is specified or when the -patch flag is used") ); - let infiles = - Common.profile_code "Main.infiles computation" (fun () -> + let infiles = + Common.profile_code "Main.infiles computation" (fun () -> match !dir, !kbuild_info, !Flag.use_glimpse with (* glimpse *) - | false, _, true -> + | false, _, true -> failwith "-use_glimpse works only with -dir" - | true, s, true when s <> "" -> + | true, s, true when s <> "" -> failwith "-use_glimpse does not work with -kbuild" - | true, "", true -> + | true, "", true -> if not (null xs) then failwith "-use_glimpse can accept only one dir"; @@ -701,7 +709,7 @@ let main_action xs = files +> List.map (fun x -> [x]) (* normal *) | false, _, _ -> [x::xs] - | true, "", _ -> + | true, "", _ -> Common.cmd_to_list (if !include_headers then ("find "^(join " " (x::xs))^" -name \"*.[ch]\"") @@ -709,13 +717,13 @@ let main_action xs = +> List.map (fun x -> [x]) (* kbuild *) - | true, kbuild_info_file,_ -> - let dirs = - Common.cmd_to_list ("find "^(join " " (x::xs))^" -type d") + | true, kbuild_info_file,_ -> + let dirs = + Common.cmd_to_list ("find "^(join " " (x::xs))^" -type d") in let info = Kbuild.parse_kbuild_info kbuild_info_file in let groups = Kbuild.files_in_dirs dirs info in - + groups +> List.map (function Kbuild.Group xs -> xs) ) in @@ -751,42 +759,47 @@ let main_action xs = loop 0 infiles end | _ -> failwith "inconsistent distribution information" in - - let outfiles = + + let outfiles = Common.profile_code "Main.outfiles computation" (fun () -> let cocci_infos = Cocci.pre_engine (!cocci_file, !Config.std_iso) in let res = - infiles +> List.map (fun cfiles -> + infiles +> List.map (fun cfiles -> pr2 ("HANDLING: " ^ (join " " cfiles)); - Common.timeout_function_opt !FC.timeout (fun () -> - Common.report_if_take_time 10 (join " " cfiles) (fun () -> + Common.timeout_function_opt !FC.timeout (fun () -> + Common.report_if_take_time 10 (join " " cfiles) (fun () -> (* Unix.sleep 1; *) - try - (* this is the main call *) - Cocci.full_engine cocci_infos cfiles - with - | Common.UnixExit x -> raise (Common.UnixExit x) - | e -> - if !dir - then begin - pr2 ("EXN:" ^ Printexc.to_string e); - [] (* *) - end - else raise e))) in - Cocci.post_engine cocci_infos; - res - ) +> List.concat + try + let optfile = + if !output_file <> "" && !compat_mode then + Some !output_file + else + None + in + Common.redirect_stdout_opt optfile (fun () -> + (* this is the main call *) + Cocci.full_engine cocci_infos cfiles + ) + with + | Common.UnixExit x -> raise (Common.UnixExit x) + | e -> + if !dir + then begin + pr2 ("EXN:" ^ Printexc.to_string e); + [] (* *) + end + else raise e))) in + Cocci.post_engine cocci_infos; + res + ) +> List.concat in - Common.profile_code "Main.result analysis" (fun () -> - + Common.profile_code "Main.result analysis" (fun () -> Ctlcocci_integration.print_bench(); - let outfiles = Cocci.check_duplicate_modif outfiles in - - outfiles +> List.iter (fun (infile, outopt) -> - outopt +> Common.do_option (fun outfile -> + outfiles +> List.iter (fun (infile, outopt) -> + outopt +> Common.do_option (fun outfile -> if !inplace_modif then begin Common.command2 ("cp "^infile^" "^infile^".cocci_orig"); @@ -795,26 +808,32 @@ let main_action xs = if !outplace_modif then Common.command2 ("cp "^outfile^" "^infile^".cocci_res"); - - if !output_file =$= "" - then begin - let tmpfile = "/tmp/"^Common.basename infile in - pr2 (spf "One file modified. Result is here: %s" tmpfile); - Common.command2 ("cp "^outfile^" "^tmpfile); - end + + (* potential source of security pb if the /tmp/ file is + * a symlink, so simpler to not produce any regular file + * (files created by Common.new_temp_file are still ok) + * anymore in /tmp. + *) + (* + if !output_file =$= "" + then begin + let tmpfile = "/tmp/"^Common.basename infile in + pr2 (spf "One file modified. Result is here: %s" tmpfile); + Common.command2 ("cp "^outfile^" "^tmpfile); + end + *) )); - if !output_file <> "" then - (match outfiles with - | [infile, Some outfile] when infile =$= x && null xs -> + if !output_file <> "" && not !compat_mode then + (match outfiles with + | [infile, Some outfile] when infile =$= x && null xs -> Common.command2 ("cp " ^outfile^ " " ^ !output_file); - | [infile, None] when infile =$= x && null xs -> + | [infile, None] when infile =$= x && null xs -> Common.command2 ("cp " ^infile^ " " ^ !output_file); - | _ -> - failwith + | _ -> + failwith ("-o can not be applied because there is multiple " ^ "modified files"); ); - if !compare_with_expected then Testing.compare_with_expected outfiles)) @@ -824,7 +843,7 @@ let main_action xs = (*****************************************************************************) (* The coccinelle main entry point *) (*****************************************************************************) -let main () = +let main () = begin let arglist = Array.to_list Sys.argv in @@ -862,20 +881,20 @@ let main () = if !cocci_file <> "" && (not (!cocci_file =~ ".*\\.\\(sgrep\\|spatch\\)$")) then cocci_file := Common.adjust_ext_if_needed !cocci_file ".cocci"; - if !Config.std_iso <> "" + if !Config.std_iso <> "" then Config.std_iso := Common.adjust_ext_if_needed !Config.std_iso ".iso"; - if !Config.std_h <> "" + if !Config.std_h <> "" then Config.std_h := Common.adjust_ext_if_needed !Config.std_h ".h"; - if !Config.std_h <> "" + if !Config.std_h <> "" then Parse_c.init_defs_builtins !Config.std_h; - if !macro_file <> "" + if !macro_file <> "" then Parse_c.init_defs_macros !macro_file; (* must be done after Arg.parse, because Common.profile is set by it *) - Common.profile_code "Main total" (fun () -> + Common.profile_code "Main total" (fun () -> let all_actions = Test_parsing_c.actions() in @@ -885,23 +904,23 @@ let main () = (* --------------------------------------------------------- *) (* The test framework. Works with tests/ or .ok and .failed *) (* --------------------------------------------------------- *) - | [x] when !test_mode -> + | [x] when !test_mode -> FC.include_path := Some "tests/include"; Testing.testone x !compare_with_expected - | [] when !test_all -> + | [] when !test_all -> FC.include_path := Some "tests/include"; if !expected_score_file <> "" then Testing.testall ~expected_score_file:!expected_score_file () else Testing.testall () - | [] when !test_regression_okfailed -> + | [] when !test_regression_okfailed -> Testing.test_regression_okfailed () - | x::xs when !test_okfailed -> + | x::xs when !test_okfailed -> (* do its own timeout on FC.timeout internally *) FC.relax_include_path := true; - adjust_stdin x (fun () -> + adjust_stdin x (fun () -> Testing.test_okfailed !cocci_file (x::xs) ) @@ -912,13 +931,13 @@ let main () = | xs when List.mem !action (Common.action_list all_actions) -> Common.do_action !action xs all_actions - | [file] when !action =$= "-parse_cocci" -> + | [file] when !action =$= "-parse_cocci" -> Testing.test_parse_cocci file (* I think this is used by some scripts in some Makefile for our * big-tests. So dont remove. *) - | [file1;file2] when !action =$= "-compare_c" -> + | [file1;file2] when !action =$= "-compare_c" -> Test_parsing_c.test_compare_c file1 file2 (* result = unix code *) (* could add the Test_parsing_c.test_actions such as -parse_c & co *) @@ -927,38 +946,36 @@ let main () = (* --------------------------------------------------------- *) (* This is the main entry *) (* --------------------------------------------------------- *) - | x::xs -> + | x::xs -> main_action (x::xs) (* --------------------------------------------------------- *) (* empty entry *) (* --------------------------------------------------------- *) | [] -> short_usage() - )); if !Pycocci.initialised && (Pycocci.py_isinitialized ()) != 0 then begin ignore(Pycocci.pyrun_simplestring "cocci.finalise()"); - if !Flag.show_misc + if !Flag.show_misc then Common.pr2 "Finalizing python\n"; Pycocci.py_finalize (); end end -let main_with_better_error_report () = - if !Common.debugger then main () - else - try - main () +let main_with_better_error_report () = + if !Common.debugger then main () + else + try + main () with - | Unix.Unix_error (_, "stat", filename) -> + | Unix.Unix_error (_, "stat", filename) -> pr2 (spf "ERROR: File %s does not exist" filename); raise (UnixExit (-1)) - (*****************************************************************************) let start = - Common.main_boilerplate (fun () -> + Common.main_boilerplate (fun () -> main_with_better_error_report (); Ctlcocci_integration.print_bench(); ) diff --git a/parsing_c/Makefile b/parsing_c/Makefile index 3be6d2e..04a03c3 100644 --- a/parsing_c/Makefile +++ b/parsing_c/Makefile @@ -6,17 +6,29 @@ ############################################################################## TARGET=parsing_c +-include ../Makefile.config + +ifeq ($(FEATURE_TARZAN), 1) +TARZANSRC=sexp_ast_c.ml +TARZANINCLUDE=-I ../ocamlsexp +endif + + # - type_cocci.ml ast_cocci.ml # + unparse_hrule SRC= flag_parsing_c.ml parsing_stat.ml \ token_c.ml ast_c.ml control_flow_c.ml \ + $(TARZANSRC) \ visitor_c.ml lib_parsing_c.ml \ control_flow_c_build.ml \ pretty_print_c.ml \ semantic_c.ml lexer_parser.ml parser_c.ml lexer_c.ml \ token_helpers.ml token_views_c.ml \ - cpp_token_c.ml parsing_hacks.ml \ + cpp_token_c.ml \ + parsing_hacks.ml \ + cpp_analysis_c.ml \ unparse_cocci.ml unparse_c.ml unparse_hrule.ml \ + parsing_recovery_c.ml parsing_consistency_c.ml \ parse_c.ml type_c.ml \ cpp_ast_c.ml \ type_annoter_c.ml comment_annotater_c.ml \ @@ -35,6 +47,7 @@ LIBS=../commons/commons.cma ../globals/globals.cma \ ../parsing_cocci/cocci_parser.cma INCLUDES= -I ../commons -I ../commons/ocamlextra -I ../commons/ocollection \ + $(TARZANINCLUDE) \ -I ../globals -I ../parsing_cocci #LIBS=../commons/commons.cma @@ -119,6 +132,10 @@ locindiv: wc -l ast_c.ml wc -l parse_c.ml +############################################################################## +# Literate Programming rules +############################################################################## + ############################################################################## # Generic rules diff --git a/parsing_c/ast_c.ml b/parsing_c/ast_c.ml index 747fac8..3c4177d 100644 --- a/parsing_c/ast_c.ml +++ b/parsing_c/ast_c.ml @@ -511,6 +511,10 @@ and declaration = and onedecl = { v_namei: (name * (info (* = *) * initialiser) option) option; v_type: fullType; + (* semantic: set in type annotated and used in cocci_vs_c + * when we transform some initialisation into affectation + *) + v_type_bis: fullType (* Type_c.completed_and_simplified *) option ref; v_storage: storage; v_local: local_decl; (* cocci: *) v_attr: attribute list; (* gccext: *) @@ -521,6 +525,9 @@ and declaration = and local_decl = LocalDecl | NotLocalDecl + (* fullType is the type used if the type should be converted to + an assignment. It can be adjusted in the type annotation + phase when typedef information is availalble *) and initialiser = initialiserbis wrap and initialiserbis = | InitExpr of expression @@ -916,6 +923,9 @@ let mcode_of_info ii = fst (mcode_and_env_of_cocciref ii.cocci_tag) let pinfo_of_info ii = ii.pinfo let parse_info_of_info ii = get_pi ii.pinfo +let strloc_of_info ii = + spf "%s:%d" (file_of_info ii) (line_of_info ii) + let is_fake ii = match ii.pinfo with FakeTok (_,_) -> true @@ -1162,8 +1172,6 @@ let ii_of_name name = let (s,ii) = get_s_and_ii_of_name name in ii - - let get_local_ii_of_expr_inlining_ii_of_name e = let (ebis,_),ii = e in match ebis, ii with @@ -1182,6 +1190,15 @@ let get_local_ii_of_tybis_inlining_ii_of_name ty = | TypeName (name, _typ), [] -> ii_of_name name | _, ii -> ii +(* the following is used to obtain the argument to LocalVar *) +let info_of_type ft = + let (qu, ty) = ft in + (* bugfix: because of string->name, the ii can be deeper *) + let ii = get_local_ii_of_tybis_inlining_ii_of_name ty in + match ii with + | ii::_ -> ii.pinfo + | [] -> failwith "type has no text; need to think again" + (* only Label and Goto have name *) let get_local_ii_of_st_inlining_ii_of_name st = match st with diff --git a/parsing_c/compare_c.ml b/parsing_c/compare_c.ml index 0b9062f..c398cb0 100644 --- a/parsing_c/compare_c.ml +++ b/parsing_c/compare_c.ml @@ -50,7 +50,7 @@ let cvs_compute_newstr s = let tag = matched1 substr in if not (List.mem tag cvs_keyword_list) - then failwith ("unknown CVS keyword: " ^ tag); + then pr2_once ("unknown CVS keyword: " ^ tag); "CVS_MAGIC_STRING" ) s @@ -166,7 +166,7 @@ let compare_ast filename1 filename2 = let process_filename filename = - let (c, _stat) = Parse_c.parse_print_error_heuristic filename in + let (c, _stat) = Parse_c.parse_c_and_cpp filename in let c = List.map fst c in c +> Lib_parsing_c.al_program +> normal_form_program in @@ -306,8 +306,8 @@ let compare_token filename1 filename2 = loop toks1 toks2 in *) - let (c1, _stat) = Parse_c.parse_print_error_heuristic filename1 in - let (c2, _stat) = Parse_c.parse_print_error_heuristic filename2 in + let (c1, _stat) = Parse_c.parse_c_and_cpp filename1 in + let (c2, _stat) = Parse_c.parse_c_and_cpp filename2 in let res = if List.length c1 <> List.length c2 diff --git a/parsing_c/compare_c.mli b/parsing_c/compare_c.mli index fdf388d..1d7d504 100644 --- a/parsing_c/compare_c.mli +++ b/parsing_c/compare_c.mli @@ -1,5 +1,3 @@ -open Common - type compare_result = | Correct | Pb of string @@ -9,12 +7,12 @@ type compare_result = (* the string list is the output of diff *) val compare_ast : - filename -> filename -> compare_result * string list - + Common.filename -> Common.filename -> compare_result * string list val compare_token : - filename -> filename -> compare_result * string list + Common.filename -> Common.filename -> compare_result * string list -val compare_default : filename -> filename -> compare_result * string list +val compare_default : + Common.filename -> Common.filename -> compare_result * string list val compare_result_to_string : compare_result * string list -> string diff --git a/parsing_c/control_flow_c_build.ml b/parsing_c/control_flow_c_build.ml index 588efbf..220f8e7 100644 --- a/parsing_c/control_flow_c_build.ml +++ b/parsing_c/control_flow_c_build.ml @@ -714,7 +714,8 @@ let rec (aux_statement: (nodei option * xinfo) -> statement -> nodei option) = !g#add_arc ((newafter, newfakeelse), Direct); !g#add_arc ((newi, newafter), Direct); let finalthen = aux_statement (Some newfakethen, newxi) st in - !g +> add_arc_opt (finalthen, newi); + !g +> add_arc_opt + (finalthen, if !Flag_parsing_c.no_loops then newafter else newi); Some newfakeelse @@ -754,7 +755,7 @@ let rec (aux_statement: (nodei option * xinfo) -> statement -> nodei option) = } in - if not is_zero + if not is_zero && not !Flag_parsing_c.no_loops then begin let newfakethen = !g +> add_node InLoopNode lbl "[dowhiletrue]" in !g#add_arc ((taili, newfakethen), Direct); @@ -801,7 +802,8 @@ let rec (aux_statement: (nodei option * xinfo) -> statement -> nodei option) = !g#add_arc ((newafter, newfakeelse), Direct); !g#add_arc ((newi, newafter), Direct); let finalthen = aux_statement (Some newfakethen, newxi) st in - !g +> add_arc_opt (finalthen, newi); + !g +> add_arc_opt + (finalthen, if !Flag_parsing_c.no_loops then newafter else newi); Some newfakeelse @@ -836,7 +838,8 @@ let rec (aux_statement: (nodei option * xinfo) -> statement -> nodei option) = !g#add_arc ((newafter, newfakeelse), Direct); !g#add_arc ((newi, newafter), Direct); let finalthen = aux_statement (Some newfakethen, newxi) st in - !g +> add_arc_opt (finalthen, newi); + !g +> add_arc_opt + (finalthen, if !Flag_parsing_c.no_loops then newafter else newi); Some newfakeelse diff --git a/parsing_c/cpp_analysis_c.ml b/parsing_c/cpp_analysis_c.ml new file mode 100644 index 0000000..04d0522 --- /dev/null +++ b/parsing_c/cpp_analysis_c.ml @@ -0,0 +1,487 @@ +(* Yoann Padioleau + * + * Copyright (C) 2009 University of Urbana Champaign + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License (GPL) + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * file license.txt for more details. + *) + +open Common + +open Oset + +open Parser_c + +(*****************************************************************************) +(* Prelude *) +(*****************************************************************************) +(* + * Is this module make all the tricks used in parsing_hacks and + * most definitions in standard.h obsolete ? It depends. In a + * static analysis context we want to be accurate, and so expand + * all the code that will make our type/callgraph analysis simpler. + * So we want to expand many macros, based on heuristics in this file. + * In a transformation context, we want to let the programmer + * match over certain constructs such as declarator, iterator, + * macro_field, etc, and in this case we want to parse as-is. + * + * What could be done is that some of the analysis performed in this + * file could then be injected in parsing_hacks, for instance via + * hints, to make the parse as-is job easier too. + * + * + * + * todo: right now I find dangerous macro based on ## and go upward + * to also include calling macros. But this dangerous macro itself + * may use other macros that looks ok but that should also be expanded + * because it defines some entities. So also recurse downward ? + * + * todo? do analysis a la Astec ? try infer the meaning of the macro + * from its body but also from its context of use ? Can then + * do a taxonomy of macro ? not just foreach or declarator but + * polymorphic function (e.g. MAX), type generator, etc. Cf astec paper + * or Ernst cpp study paper ? + * + *) + +(*****************************************************************************) +(* Types *) +(*****************************************************************************) + +(* callgraph of macros *) +type key = string +type node = (Common.filename * Cpp_token_c.define_def) list ref +type edge = Direct + +type callgraph_macros = (key, node, edge) Ograph_simple.ograph_mutable + +let rootname = "__ROOT__" + +(*****************************************************************************) +(* Helpers *) +(*****************************************************************************) +let bodytoks_of_body body = + match body with + | Cpp_token_c.DefineHint _ -> + pr2 "weird, hint in cpp_analysis_c"; + [] + | Cpp_token_c.DefineBody xs -> + xs + + +let build_empty_set () = new Osetb.osetb Setb.empty + + +(*****************************************************************************) +(* Builder *) +(*****************************************************************************) + +let build_callgraph_macros xs = + let (g: callgraph_macros) = new Ograph_simple.ograph_mutable in + + g#add_node rootname (ref []); + + (* build nodes *) + xs +> List.iter (fun (file, (x, def)) -> + (* todo? if exist already ? *) + g#add_node x (ref []); + g#add_arc (rootname, x) Direct; + ); + xs +> List.iter (fun (file, (x, def)) -> + let node = g#nodes#find x in + Common.push2 (file, def) node; + ); + + (* build edges *) + xs +> List.iter (fun (file, (x, def)) -> + let (s, params, body) = def in + let toks = bodytoks_of_body body in + toks +> List.iter (fun tok -> + match tok with + | TIdent (x2,ii) -> + (try + let _ = g#nodes#find x2 in + g#add_arc (x, x2) Direct; + with + Not_found -> () + ) + | _ -> + () + ); + + ); + g + + +(* ---------------------------------------------------------------------- *) +let check_no_loop_graph g = + + let self_referential = ref [] in + let macros_in_loop_with_path = ref [] in + + let already = Hashtbl.create 101 in + + let already_error_msg = Hashtbl.create 101 in + + let rec aux_dfs path xi = + if Hashtbl.mem already xi && List.mem xi path + then begin + let node = g#nodes#find xi in + let file = + match !node with + | (file, _)::xs -> file + | [] -> raise Impossible + in + (* in apache/srclib/apr/include/arch/win32/apr_dbg_win32_handles.h + * we get some __ROOT__ -> CreateMutexA -> CreateMutexA because + * the macro is self referential. Probably cpp has + * some special handling of such case and does not expand + * recursively. + * + *) + let is_self_reference = + match xi::path with + | x::y::z -> x = y + | _ -> false + in + if not is_self_reference && not (Hashtbl.mem already_error_msg xi) + then begin + Hashtbl.add already_error_msg xi true; + pr2 (spf "PB: loop in macro %s of file %s" xi file); + pr2 (spf "path is: %s" (Common.join " -> " (List.rev (xi::path)))); + Common.push2 (xi, path) macros_in_loop_with_path; + end + else begin + Common.push2 xi self_referential; + end + end else begin + Hashtbl.add already xi true; + (* f xi path; *) + let succ = g#successors xi in + let succ' = succ#tolist +> List.map fst in + succ' +> List.iter (fun yi -> + aux_dfs (xi::path) yi + ); + end + in + aux_dfs [] rootname; + !self_referential, !macros_in_loop_with_path + +(* ---------------------------------------------------------------------- *) +let slice_of_callgraph_macros (g: callgraph_macros) goodnodes = + + let (g': callgraph_macros) = new Ograph_simple.ograph_mutable in + + goodnodes#tolist +> List.iter (fun k -> + let v = g#nodes#find k in + g'#add_node k v; + ); + goodnodes#tolist +> List.iter (fun k -> + let succ = g#successors k in + let succ = Oset.mapo (fun (k', edge) -> k') (build_empty_set()) succ in + let inter = succ $**$ goodnodes in + inter#tolist +> List.iter (fun k' -> + g'#add_arc (k, k') Direct; + ) + ); + g' + +(*****************************************************************************) +(* Macros expansion *) +(*****************************************************************************) + +(* get the longuest one ? or the one that contains the dangerous macro ? *) +let get_single_file_and_def_of_node k v = + match !v with + | [] -> raise Impossible + | [file, def] -> file, def + | (file, def)::y::ys -> + pr2 (spf "multiple def for %s but I kept only one" k); + file, def + +module TV = Token_views_c + +let (macro_expand: + (string, Cpp_token_c.define_def) Hashtbl.t -> + Cpp_token_c.define_def -> Cpp_token_c.define_def) = + fun current_def def -> + let (s, params, body) = def in + let body' = + match body with + | Cpp_token_c.DefineHint _ -> + body + | Cpp_token_c.DefineBody xs -> + (* bugfix: we dont want to evalute the x ## b at this moment. + * so can not use fix_tokens_cpp in the same we use it + * to parse C code. + let xs' = + Parsing_hacks.fix_tokens_cpp ~macro_defs:current_def xs + in + *) + let tokens = xs in + let tokens2 = ref (tokens +> Common.acc_map TV.mk_token_extended) in + let cleaner = !tokens2 +> Parsing_hacks.filter_cpp_stuff in + let paren_grouped = TV.mk_parenthised cleaner in + Cpp_token_c.apply_macro_defs + ~msg_apply_known_macro:(fun s2 -> + pr2 (spf "APPLYING: %s in definition of %s" s2 s)) + ~msg_apply_known_macro_hint:(fun s -> + pr2 "hint") + ~evaluate_concatop:false + ~inplace_when_single:false + current_def paren_grouped; + (* because the before field is used by apply_macro_defs *) + tokens2 := TV.rebuild_tokens_extented !tokens2; + + (* bugfix *) + let cleaner = !tokens2 +> Parsing_hacks.filter_cpp_stuff in + + let xs' = + Parsing_hacks.insert_virtual_positions + (cleaner +> Common.acc_map (fun x -> x.TV.tok)) + in + + Cpp_token_c.DefineBody xs' + in + (s, params, body') + + +(* work by side effect as both the binding and callgraph are mutable + * data structure + *) +let no_inlining = ref false + +let rec (recurse_expand_macro_topological_order: + int -> (string, Cpp_token_c.define_def) Hashtbl.t -> + callgraph_macros -> unit) = + fun depth current_def g -> + + (* naive: *) + if !no_inlining then + g#nodes#tolist +> List.iter (fun (k, v) -> + if k =$= rootname then () + else + let def = get_single_file_and_def_of_node k v +> snd in + Hashtbl.add current_def k def + ) + else + let remaining = g#nodes#tolist in + (match remaining with + | [] -> raise Impossible + | [(k,n)] -> + assert (k = rootname); + (* end recursion *) + () + | x::y::xs -> + let leafs = (g#leaf_nodes ())#tolist in + pr2 (spf "step: %d, %s" depth (leafs +> Common.join " ")); + + Ograph_simple.print_ograph_generic + ~str_of_key:(fun k -> k) + ~str_of_node:(fun k node -> k) + (spf "/tmp/graph-%d.dot" depth) + g; + + assert(not (null leafs)); + + + (* little specialisation to avoid useless work *) + if depth = 0 + then begin + leafs +> List.iter (fun k -> + let node = g#nodes#find k in + let def = get_single_file_and_def_of_node k node +> snd in + Hashtbl.add current_def k def + ) + end else begin + let new_defs = + leafs +> List.map (fun k -> + let node = g#nodes#find k in + let def = get_single_file_and_def_of_node k node +> snd in + let def' = macro_expand current_def def in + k, def' + ) + in + new_defs +> List.iter (fun (k,def) -> Hashtbl.add current_def k def); + end; + leafs +> List.iter (fun k -> g#del_leaf_node_and_its_edges k); + recurse_expand_macro_topological_order (depth+1) current_def g; + ) + + + +(*****************************************************************************) +(* Macros def analysis *) +(*****************************************************************************) + +let is_dangerous_macro def = + let (s, params, body) = def in + let toks = bodytoks_of_body body in + + (match params, body with + + (* ex: APU_DECLARE_DATA *) + | Cpp_token_c.NoParam, Cpp_token_c.DefineBody [] -> + if s =~ ".*_H_*" + then false + else true + + (* ex: AP_DECLARE(x) x *) + | Cpp_token_c.Params([s1]), Cpp_token_c.DefineBody [TIdent (s2,i1)] -> + s1 =$= s2 + + (* keyword aliases. eg: APR_inline __inline__ *) + | Cpp_token_c.NoParam, Cpp_token_c.DefineBody [x] -> + (match x with + | Tinline _ -> true + | Tconst _ -> true + | Tstatic _ -> true + | Textern _ -> true + | _ -> false + ) + + | _ , Cpp_token_c.DefineBody xs -> + (match List.rev xs with + (* make extract_macros looping on apache, get some infinite "step x" *) + | TPtVirg _::_ -> true + | _ -> false + ) + + | _ -> false + ) || + + + (toks +> List.exists (fun tok -> + match tok with + | TCppConcatOp _ -> true + + | Tattribute (ii) -> true + | TattributeNoarg (ii) -> true + +(* FP with local variable. + | TIdent (s,ii) -> + s ==~ Parsing_hacks.regexp_annot && not (List.mem s + ["__FILE__";"__LINE__";"__FUNCTION__"]) +*) + | _ -> false + )) + + +let is_trivial_macro def = + let (s, params, body) = def in + match params, body with + | Cpp_token_c.NoParam, Cpp_token_c.DefineBody [Parser_c.TInt _] +(* no!!! those are not trivial macro, they are dangerous too. + | Cpp_token_c.NoParam, Cpp_token_c.DefineBody [] -> + true +*) + | _ -> + false + +(* + | () when s ==~ Parsing_hacks.regexp_annot -> true + | () when List.exists (function + (*| Parser_c.Tattribute _ -> true*) + | Parser_c.TCppConcatOp _ -> true + | _ -> false) bodytoks + -> true + | () -> false + in +*) + + +(*****************************************************************************) +(* Main entry point *) +(*****************************************************************************) + +let extract_dangerous_macros xs = + + (* prepare initial set of macro definitions to work on *) + let all_macros = + xs +> List.map (fun (file, defs) -> + defs +> List.map (fun def -> file, def) + ) +> List.flatten + in + let macros = + all_macros +> Common.exclude(fun (file,(x,def)) -> is_trivial_macro def) in + + (* initial set of problematic macros *) + let problematic_macros = + macros +> Common.filter (fun (file, (x, def)) -> is_dangerous_macro def) in + + + (* include the ancestors of problematic macros *) + let g = + build_callgraph_macros macros in + let self_referiential, macros_in_loop_with_path = + check_no_loop_graph g in + + Ograph_simple.print_ograph_generic + ~str_of_key:(fun k -> k) + ~str_of_node:(fun k node -> k) + "/tmp/graph.dot" + g; + let start = + problematic_macros +> List.map (fun (file, (x, def)) -> x) +> Common.nub in + + let finalset = + start +> List.fold_left (fun acc x -> + if List.exists (fun y -> fst y = x) macros_in_loop_with_path + || List.mem x self_referiential + then begin + pr2 (spf "PB: ignoring %s macro as it is in a loop" x); + acc + end + else + let acc = acc#add x in + let ancestors = g#ancestors x in + acc $++$ ancestors + ) (build_empty_set ()) + in + + + (* Now prepare for fixpoint expansion of macros to avoid doing + * the work in cpp_engine. + *) + let sliced_g = + slice_of_callgraph_macros g finalset + in + Ograph_simple.print_ograph_generic + ~str_of_key:(fun k -> k) + ~str_of_node:(fun k node -> k) + "/tmp/graph2.dot" + sliced_g; + + + (* do fixpoint expansion *) + let (binding: (string, Cpp_token_c.define_def) Hashtbl.t) = + Hashtbl.create 101 in + (* work by side effects on the hashtbl and graph *) + recurse_expand_macro_topological_order 0 binding sliced_g; + + + + (* prepare final result *) + let final_macros = + binding +> Common.hash_to_list +> List.map (fun (x, def) -> + let node = g#nodes#find x in + let file = get_single_file_and_def_of_node x node +> fst in + (file, (x, def)) + ) + in + + pr2 (spf "total macros numbers: %d" + (List.length all_macros)); + pr2 (spf "problematic macros numbers: %d" + (List.length problematic_macros)); + pr2 (spf "final (after closure) problematic macros numbers: %d" + (List.length final_macros)); + + let grouped = Common.group_assoc_bykey_eff final_macros in + grouped diff --git a/parsing_c/cpp_analysis_c.mli b/parsing_c/cpp_analysis_c.mli new file mode 100644 index 0000000..2a8e317 --- /dev/null +++ b/parsing_c/cpp_analysis_c.mli @@ -0,0 +1,4 @@ + +val extract_dangerous_macros: + (Common.filename * (string * Cpp_token_c.define_def) list) list -> + (Common.filename * (string * Cpp_token_c.define_def) list) list diff --git a/parsing_c/cpp_ast_c.ml b/parsing_c/cpp_ast_c.ml index ae2ce2c..331d9d6 100644 --- a/parsing_c/cpp_ast_c.ml +++ b/parsing_c/cpp_ast_c.ml @@ -18,7 +18,8 @@ open Ast_c (*****************************************************************************) (* Wrappers *) (*****************************************************************************) -let pr2, pr2_once = Common.mk_pr2_wrappers Flag_parsing_c.verbose_cpp_ast +let pr2, pr2_once = + Common.mk_pr2_wrappers Flag_parsing_c.verbose_cpp_ast let pr2_debug,pr2_debug_once = Common.mk_pr2_wrappers Flag_parsing_c.debug_cpp_ast @@ -98,10 +99,37 @@ let cpp_option_of_cmdline (xs, ys) = D (s, None) )) +(*****************************************************************************) +(* Debug *) +(*****************************************************************************) +let (show_cpp_i_opts: string list -> unit) = fun xs -> + if not (null xs) then begin + pr2 "-I"; + xs +> List.iter pr2 + end + + +let (show_cpp_d_opts: string list -> unit) = fun xs -> + if not (null xs) then begin + pr2 "-D"; + xs +> List.iter pr2 + end + +(* ---------------------------------------------------------------------- *) +let trace_cpp_process depth mark inc_file = + pr2_debug (spf "%s>%s %s" + (Common.repeat "-" depth +> Common.join "") + mark + (s_of_inc_file_bis inc_file)); + () + + + (*****************************************************************************) (* Helpers *) (*****************************************************************************) + let _hcandidates = Hashtbl.create 101 let init_adjust_candidate_header_files dir = @@ -171,15 +199,6 @@ let find_header_file cppopts dirname inc_file = -(* ---------------------------------------------------------------------- *) -let trace_cpp_process depth mark inc_file = - pr2_debug (spf "%s>%s %s" - (Common.repeat "-" depth +> Common.join "") - mark - (s_of_inc_file_bis inc_file)); - () - - (* ---------------------------------------------------------------------- *) let _headers_hash = Hashtbl.create 101 @@ -193,10 +212,12 @@ let _headers_hash = Hashtbl.create 101 * even if the cache is small. That's because huge single * ast element and probably the ast marshalling fail. *) -let threshold_cache_nb_files = ref 200 +let default_threshold_cache_nb_files = 200 + +let parse_c_and_cpp_cache + ?(threshold_cache_nb_files= default_threshold_cache_nb_files) file = -let parse_c_and_cpp_cache file = - if Hashtbl.length _headers_hash > !threshold_cache_nb_files + if Hashtbl.length _headers_hash > threshold_cache_nb_files then Hashtbl.clear _headers_hash; Common.memoized _headers_hash file (fun () -> @@ -204,19 +225,6 @@ let parse_c_and_cpp_cache file = ) -(* ---------------------------------------------------------------------- *) -let (show_cpp_i_opts: string list -> unit) = fun xs -> - if not (null xs) then begin - pr2 "-I"; - xs +> List.iter pr2 - end - - -let (show_cpp_d_opts: string list -> unit) = fun xs -> - if not (null xs) then begin - pr2 "-D"; - xs +> List.iter pr2 - end (*****************************************************************************) (* Main entry *) @@ -225,8 +233,9 @@ let (show_cpp_d_opts: string list -> unit) = fun xs -> let (cpp_expand_include2: ?depth_limit:int option -> + ?threshold_cache_nb_files:int -> cpp_option list -> Common.dirname -> Ast_c.program -> Ast_c.program) = - fun ?(depth_limit=None) iops dirname ast -> + fun ?(depth_limit=None) ?threshold_cache_nb_files iops dirname ast -> if !Flag_parsing_c.debug_cpp_ast then pr2_xxxxxxxxxxxxxxxxx(); @@ -262,7 +271,9 @@ let (cpp_expand_include2: (* CONFIG *) Flag_parsing_c.verbose_parsing := false; Flag_parsing_c.verbose_lexing := false; - let (ast2, _stat) = parse_c_and_cpp_cache file in + let (ast2, _stat) = + parse_c_and_cpp_cache ?threshold_cache_nb_files file + in let ast = Parse_c.program_of_program2 ast2 in let dirname' = Filename.dirname file in @@ -293,9 +304,9 @@ let (cpp_expand_include2: aux [] dirname ast -let cpp_expand_include ?depth_limit a b c = +let cpp_expand_include ?depth_limit ?threshold_cache_nb_files a b c = Common.profile_code "cpp_expand_include" - (fun () -> cpp_expand_include2 ?depth_limit a b c) + (fun () -> cpp_expand_include2 ?depth_limit ?threshold_cache_nb_files a b c) (* let unparse_showing_include_content ? @@ -325,12 +336,14 @@ let is_ifdef_and_same_tag tag x = * indice. Or simply count the number of directives with the same tag and * put this information in the tag. Hence the total_with_this_tag below. *) -let should_ifdefize tag ifdefs_directives xxs = +let should_ifdefize (tag,ii) ifdefs_directives xxs = let IfdefTag (_tag, total_with_this_tag) = tag in if total_with_this_tag <> List.length ifdefs_directives then begin - pr2 "CPPASTC: can not ifdefize, some of its directives were passed"; + let strloc = Ast_c.strloc_of_info (List.hd ii) in + pr2 (spf "CPPASTC: can not ifdefize ifdef at %s" strloc); + pr2 "CPPASTC: some of its directives were passed"; false end else (* todo? put more condition ? dont ifdefize declaration ? *) @@ -373,7 +386,7 @@ let rec cpp_ifdef_statementize ast = | IfdefDirective ((Ifdef,tag),ii) -> let (restifdefs, xxs, xs') = group_ifdef tag xs in - if should_ifdefize tag (ifdef::restifdefs) xxs + if should_ifdefize (tag,ii) (ifdef::restifdefs) xxs then let res = IfdefStmt2 (ifdef::restifdefs, xxs) in Visitor_c.vk_statement_sequencable_s bigf res::aux xs' diff --git a/parsing_c/cpp_ast_c.mli b/parsing_c/cpp_ast_c.mli index 838e191..a32d510 100644 --- a/parsing_c/cpp_ast_c.mli +++ b/parsing_c/cpp_ast_c.mli @@ -12,30 +12,35 @@ val show_cpp_d_opts: string list -> unit (* cpp_expand_include below must internally use a cache of header files to * speedup as programs very often reinclude the same basic set of * header files. - * note: that also means that the asts of those headers are then shared so take - * care. + * + * note: that also means that the asts of those headers are then shared + * so take care!! *) val _headers_hash: (Common.filename, Parse_c.program2 * Parsing_stat.parsing_stat) Hashtbl.t -val threshold_cache_nb_files: int ref (* It can also try to find header files in nested directories if the * caller use the function below first. *) +val _hcandidates: + (string, Common.filename) Hashtbl.t + val init_adjust_candidate_header_files: Common.dirname -> unit (* ---------------------------------------------------------------------- *) -(* include *) +(* #include *) val cpp_expand_include: - ?depth_limit:int option -> cpp_option list -> - Common.dirname (* start point for relative paths *) -> + ?depth_limit:int option -> + ?threshold_cache_nb_files:int -> + cpp_option list -> Common.dirname (* start point for relative paths *) -> Ast_c.program -> Ast_c.program -(* ifdef *) -val cpp_ifdef_statementize: Ast_c.program -> Ast_c.program +(* #ifdef *) +val cpp_ifdef_statementize: + Ast_c.program -> Ast_c.program -(* define *) +(* #define *) val cpp_expand_macro_expr: Ast_c.define_kind -> Ast_c.argument Ast_c.wrap2 list -> Ast_c.expression option diff --git a/parsing_c/cpp_token_c.ml b/parsing_c/cpp_token_c.ml index 5ad5de6..8f7f134 100644 --- a/parsing_c/cpp_token_c.ml +++ b/parsing_c/cpp_token_c.ml @@ -58,7 +58,6 @@ let pr2, pr2_once = Common.mk_pr2_wrappers Flag_parsing_c.verbose_parsing (* Types *) (*****************************************************************************) - (* ------------------------------------------------------------------------- *) (* mimic standard.h *) (* ------------------------------------------------------------------------- *) @@ -80,6 +79,9 @@ type define_def = string * define_param * define_body | HintMacroIdentBuilder +(*****************************************************************************) +(* Parsing and helpers of hints *) +(*****************************************************************************) (* cf also data/test.h *) let assoc_hint_string = [ @@ -96,6 +98,11 @@ let assoc_hint_string = [ let (parsinghack_hint_of_string: string -> parsinghack_hint option) = fun s -> Common.assoc_option s assoc_hint_string +let (string_of_parsinghack_hint: parsinghack_hint -> string) = fun hint -> + let assoc' = assoc_hint_string +> List.map (fun (a,b) -> (b,a) ) in + Common.assoc hint assoc' + + let (is_parsinghack_hint: string -> bool) = fun s -> parsinghack_hint_of_string s <> None @@ -118,8 +125,24 @@ let (token_from_parsinghack_hint: Parser_c.TMacroIdentBuilder (s, ii) +(* used in extract_macros for example *) +let string_of_define_def (s, params, body) = - + let s1 = + match params with + | NoParam -> + spf "#define %s " s + | Params xs -> + spf "#define %s(%s) " s (Common.join "," xs) + in + let s2 = + match body with + | DefineHint hint -> + string_of_parsinghack_hint hint + | DefineBody xs -> + Common.join " " (xs +> List.map Token_helpers.str_of_tok) + in + s1 ^ s2 (*****************************************************************************) @@ -153,7 +176,7 @@ let rec remap_keyword_tokens xs = let ii = TH.info_of_tok y in if s ==~ Common.regexp_alpha then begin - pr2 (spf "remaping: %s to an ident in expanded code" s); + pr2 (spf "remapping: %s to an ident in expanded code" s); x::(Parser_c.TIdent (s, ii))::remap_keyword_tokens xs end else @@ -164,7 +187,7 @@ let rec remap_keyword_tokens xs = let ii = TH.info_of_tok x in if s ==~ Common.regexp_alpha then begin - pr2 (spf "remaping: %s to an ident in expanded code" s); + pr2 (spf "remapping: %s to an ident in expanded code" s); (Parser_c.TIdent (s, ii))::remap_keyword_tokens (y::xs) end else @@ -173,6 +196,60 @@ let rec remap_keyword_tokens xs = | _, _ -> x::remap_keyword_tokens (y::xs) ) + + +(* works with agglomerate_concat_op_ident below *) +let rec get_ident_in_concat_op xs = + match xs with + | [] -> + pr2 "weird: ident after ## operator not found"; + "", [] + | [x] -> + (match x with + | Parser_c.TIdent (s, i1) -> s, [] + | _ -> + pr2 "weird: ident after ## operator not found"; + "", [x] + ) + | x::y::xs -> + (match x, y with + | Parser_c.TIdent (s,i1), Parser_c.TCppConcatOp (i2) -> + let (s2, rest) = get_ident_in_concat_op xs in + s ^ s2, rest + | Parser_c.TIdent (s, i1), _ -> + s, (y::xs) + | _ -> + pr2 "weird: ident after ## operator not found"; + "", x::y::xs + ) + +(* must be run after the expansion has been done for the parameter so + * that all idents are actually ident, not macro parameter names. + *) +let rec agglomerate_concat_op_ident xs = + match xs with + | [] -> [] + | [x] -> [x] + | x::y::xs -> + (* can we have ## id, and so ## as first token ? yes + * but the semantic is different as it represents variadic + * names so this must be handled elsewhere. + *) + (match x, y with + | Parser_c.TIdent (s,i1), Parser_c.TCppConcatOp (i2) -> + let (all_str_ident, rest_toks) = + get_ident_in_concat_op xs + in + let new_s = s ^ all_str_ident in + let i1' = Ast_c.rewrap_str new_s i1 in + Parser_c.TIdent (new_s, i1')::agglomerate_concat_op_ident rest_toks + | Parser_c.TCppConcatOp _, _ -> + pr2 "weird, ## alone"; + x::agglomerate_concat_op_ident (y::xs) + | _ -> + x::agglomerate_concat_op_ident (y::xs) + + ) @@ -194,14 +271,17 @@ let rec remap_keyword_tokens xs = * for instance transform some of the back into some TypedefIdent * so cpp_engine may be fooled? *) -let rec (cpp_engine: (string , Parser_c.token list) assoc -> +let rec (cpp_engine: + ?evaluate_concatop:bool -> + (string , Parser_c.token list) assoc -> Parser_c.token list -> Parser_c.token list) = - fun env xs -> + fun ?(evaluate_concatop=true) env xs -> xs +> List.map (fun tok -> (* expand only TIdent ? no cos the parameter of the macro * can actually be some 'register' so may have to look for * any tokens candidates for the expansion. * Only subtelity is maybe dont expand the TDefineIdent. + * * update: in fact now the caller (define_parse) will have done * the job right and already replaced the macro parameter with a TIdent. *) @@ -211,6 +291,11 @@ let rec (cpp_engine: (string , Parser_c.token list) assoc -> ) +> List.flatten +> remap_keyword_tokens + +> (fun xs -> + if evaluate_concatop + then agglomerate_concat_op_ident xs + else xs + ) @@ -231,6 +316,8 @@ let rec (cpp_engine: (string , Parser_c.token list) assoc -> let rec apply_macro_defs ~msg_apply_known_macro ~msg_apply_known_macro_hint + ?evaluate_concatop + ?(inplace_when_single=true) defs xs = let rec apply_macro_defs xs = match xs with @@ -301,7 +388,8 @@ let rec apply_macro_defs ) in id.new_tokens_before <- (* !!! cpp expansion job here !!! *) - cpp_engine (Common.zip params xxs') bodymacro; + cpp_engine ?evaluate_concatop + (Common.zip params xxs') bodymacro; (* important to do that after have apply the macro, otherwise * will pass as argument to the macro some tokens that @@ -364,7 +452,10 @@ let rec apply_macro_defs () | NoParam -> (match body with - | DefineBody [newtok] -> + (* bugfix: we prefer not using this special case when we come + * from extract_macros context + *) + | DefineBody [newtok] when inplace_when_single -> (* special case when 1-1 substitution, we reuse the token *) id.tok <- (newtok +> TH.visitor_info_of_tok (fun _ -> TH.info_of_tok id.tok)) @@ -391,162 +482,10 @@ let rec apply_macro_defs - (*****************************************************************************) -(* The parsing hack for #define *) -(*****************************************************************************) - -(* To parse macro definitions I need to do some tricks - * as some information can be get only at the lexing level. For instance - * the space after the name of the macro in '#define foo (x)' is meaningful - * but the grammar can not get this information. So define_ident below - * look at such space and generate a special TOpardefine. In a similar - * way macro definitions can contain some antislash and newlines - * and the grammar need to know where the macro ends (which is - * a line-level and so low token-level information). Hence the - * function 'define_line' below and the TDefEol. - * - * update: TDefEol is handled in a special way at different places, - * a little bit like EOF, especially for error recovery, so this - * is an important token that should not be retagged! - * - * - * ugly hack, a better solution perhaps would be to erase TDefEOL - * from the Ast and list of tokens in parse_c. - * - * note: I do a +1 somewhere, it's for the unparsing to correctly sync. - * - * note: can't replace mark_end_define by simply a fakeInfo(). The reason - * is where is the \n TCommentSpace. Normally there is always a last token - * to synchronize on, either EOF or the token of the next toplevel. - * In the case of the #define we got in list of token - * [TCommentSpace "\n"; TDefEOL] but if TDefEOL is a fakeinfo then we will - * not synchronize on it and so we will not print the "\n". - * A solution would be to put the TDefEOL before the "\n". - * - * todo?: could put a ExpandedTok for that ? - *) -let mark_end_define ii = - let ii' = - { Ast_c.pinfo = Ast_c.OriginTok { (Ast_c.parse_info_of_info ii) with - Common.str = ""; - Common.charpos = Ast_c.pos_of_info ii + 1 - }; - cocci_tag = ref Ast_c.emptyAnnot; - comments_tag = ref Ast_c.emptyComments; - } - in - TDefEOL (ii') - -(* put the TDefEOL at the good place *) -let rec define_line_1 acc xs = - match xs with - | [] -> List.rev acc - | TDefine ii::xs -> - let line = Ast_c.line_of_info ii in - let acc = (TDefine ii) :: acc in - define_line_2 acc line ii xs - | TCppEscapedNewline ii::xs -> - pr2 "WEIRD: a \\ outside a #define"; - let acc = (TCommentSpace ii) :: acc in - define_line_1 acc xs - | x::xs -> define_line_1 (x::acc) xs - -and define_line_2 acc line lastinfo xs = - match xs with - | [] -> - (* should not happened, should meet EOF before *) - pr2 "PB: WEIRD"; - List.rev (mark_end_define lastinfo::acc) - | x::xs -> - let line' = TH.line_of_tok x in - let info = TH.info_of_tok x in - - (match x with - | EOF ii -> - let acc = (mark_end_define lastinfo) :: acc in - let acc = (EOF ii) :: acc in - define_line_1 acc xs - | TCppEscapedNewline ii -> - if (line' <> line) then pr2 "PB: WEIRD: not same line number"; - let acc = (TCommentSpace ii) :: acc in - define_line_2 acc (line+1) info xs - | x -> - if line' =|= line - then define_line_2 (x::acc) line info xs - else define_line_1 (mark_end_define lastinfo::acc) (x::xs) - ) - -let rec define_ident acc xs = - match xs with - | [] -> List.rev acc - | TDefine ii::xs -> - let acc = TDefine ii :: acc in - (match xs with - | TCommentSpace i1::TIdent (s,i2)::TOPar (i3)::xs -> - (* Change also the kind of TIdent to avoid bad interaction - * with other parsing_hack tricks. For instant if keep TIdent then - * the stringication algo can believe the TIdent is a string-macro. - * So simpler to change the kind of the ident too. - *) - (* if TOParDefine sticked to the ident, then - * it's a macro-function. Change token to avoid ambiguity - * between #define foo(x) and #define foo (x) - *) - let acc = (TCommentSpace i1) :: acc in - let acc = (TIdentDefine (s,i2)) :: acc in - let acc = (TOParDefine i3) :: acc in - define_ident acc xs - - | TCommentSpace i1::TIdent (s,i2)::xs -> - let acc = (TCommentSpace i1) :: acc in - let acc = (TIdentDefine (s,i2)) :: acc in - define_ident acc xs - - (* bugfix: ident of macro (as well as params, cf below) can be tricky - * note, do we need to subst in the body of the define ? no cos - * here the issue is the name of the macro, as in #define inline, - * so obviously the name of this macro will not be used in its - * body (it would be a recursive macro, which is forbidden). - *) - - | TCommentSpace i1::t::xs -> - - let s = TH.str_of_tok t in - let ii = TH.info_of_tok t in - if s ==~ Common.regexp_alpha - then begin - pr2 (spf "remaping: %s to an ident in macro name" s); - let acc = (TCommentSpace i1) :: acc in - let acc = (TIdentDefine (s,ii)) :: acc in - define_ident acc xs - end - else begin - pr2 "WEIRD: weird #define body"; - define_ident acc xs - end - - | _ -> - pr2 "WEIRD: weird #define body"; - define_ident acc xs - ) - | x::xs -> - let acc = x :: acc in - define_ident acc xs - - - -let fix_tokens_define2 xs = - define_ident [] (define_line_1 [] xs) - -let fix_tokens_define a = - Common.profile_code "C parsing.fix_define" (fun () -> fix_tokens_define2 a) - - - -(*****************************************************************************) -(* for the cpp-builtin, standard.h, part 0 *) +(* extracting define_def from a standard.h *) (*****************************************************************************) +(* was the cpp-builtin, standard.h, part 0 *) let macro_body_to_maybe_hint body = match body with @@ -559,7 +498,8 @@ let macro_body_to_maybe_hint body = | xs -> DefineBody body -let rec define_parse xs = +let rec (define_parse: Parser_c.token list -> (string * define_def) list) = + fun xs -> match xs with | [] -> [] | TDefine i1::TIdentDefine (s,i2)::TOParDefine i3::xs -> @@ -585,7 +525,7 @@ let rec define_parse xs = let s = TH.str_of_tok x in if s ==~ Common.regexp_alpha then begin - pr2 (spf "remaping: %s to a macro parameter" s); + pr2 (spf "remapping: %s to a macro parameter" s); Some s end else @@ -602,7 +542,7 @@ let rec define_parse xs = let ii = TH.info_of_tok tok in if s ==~ Common.regexp_alpha && List.mem s params then begin - pr2 (spf "remaping: %s to an ident in macro body" s); + pr2 (spf "remapping: %s to an ident in macro body" s); TIdent (s, ii) end else tok @@ -628,12 +568,10 @@ let rec define_parse xs = -let extract_cpp_define xs = +let extract_macros xs = let cleaner = xs +> List.filter (fun x -> not (TH.is_comment x) ) in define_parse cleaner - - diff --git a/parsing_c/cpp_token_c.mli b/parsing_c/cpp_token_c.mli index 6d5cb99..08c1396 100644 --- a/parsing_c/cpp_token_c.mli +++ b/parsing_c/cpp_token_c.mli @@ -1,8 +1,4 @@ -(* - * Do stuff involving cpp macros, like expanding some macros, - * or try to parse well the body of the define by finding the end of - * define virtual end-of-line token. - *) +(* Expanding or extracting macros, at the token level *) (* corresponds to what is in the yacfe configuration file (e.g. standard.h) *) type define_def = string * define_param * define_body @@ -24,23 +20,27 @@ type define_def = string * define_param * define_body | HintAttribute | HintMacroIdentBuilder +val string_of_define_def: define_def -> string + (* This function work by side effect and may generate new tokens * in the new_tokens_before field of the token_extended in the * paren_grouped list. So don't forget to recall * Token_views_c.rebuild_tokens_extented after this call, as well - * as probably parsing_hacks.insert_virtual_positions as new tokens + * as probably insert_virtual_positions as new tokens * are generated. + * + * note: it does not do some fixpoint, so the generated code may also + * contain some macros names. *) val apply_macro_defs: msg_apply_known_macro:(string -> unit) -> msg_apply_known_macro_hint:(string -> unit) -> + ?evaluate_concatop:bool -> + ?inplace_when_single:bool -> (string, define_def) Hashtbl.t -> Token_views_c.paren_grouped list -> unit -(* generate virtual end-of-line token *) -val fix_tokens_define : - Parser_c.token list -> Parser_c.token list - -val extract_cpp_define : +(* extracting define_def, e.g. from a standard.h; assume have called + * fix_tokens_define before to have the TDefEol *) +val extract_macros : Parser_c.token list -> (string, define_def) Common.assoc - diff --git a/parsing_c/flag_parsing_c.ml b/parsing_c/flag_parsing_c.ml index cfdeceb..9c49c79 100644 --- a/parsing_c/flag_parsing_c.ml +++ b/parsing_c/flag_parsing_c.ml @@ -250,3 +250,7 @@ let set_linux_spacing _ = spacing := LINUX (*follow the conventions of Linux*) let set_smpl_spacing _ = spacing := SMPL (*use spacing from the SP*) (*****************************************************************************) + +(* drop back edges made by proper loop constructs - + unsafe but more efficient *) +let no_loops = ref false diff --git a/parsing_c/lexer_c.mll b/parsing_c/lexer_c.mll index 9dacf58..8c7ca1e 100644 --- a/parsing_c/lexer_c.mll +++ b/parsing_c/lexer_c.mll @@ -135,6 +135,9 @@ let keyword_table = Common.hash_of_list [ "__typeof__", (fun ii -> Ttypeof ii); "__typeof", (fun ii -> Ttypeof ii); + (* found a lot in expanded code *) + "__extension__", (fun ii -> TattributeNoarg ii); + (* gccext: alias *) "__signed__", (fun ii -> Tsigned ii); @@ -145,6 +148,14 @@ let keyword_table = Common.hash_of_list [ "__volatile__", (fun ii -> Tvolatile ii); "__volatile", (fun ii -> Tvolatile ii); + (* windowsext: *) + "__declspec", (fun ii -> Tattribute ii); + + "__stdcall", (fun ii -> TattributeNoarg ii); + "__cdecl", (fun ii -> TattributeNoarg ii); + "WINAPI", (fun ii -> TattributeNoarg ii); + "APIENTRY", (fun ii -> TattributeNoarg ii); + "CALLBACK", (fun ii -> TattributeNoarg ii); (* c99: *) (* no just "restrict" ? maybe for backward compatibility they avoided @@ -158,7 +169,7 @@ let keyword_table = Common.hash_of_list [ let error_radix s = ("numeric " ^ s ^ " constant contains digits beyond the radix:") -(* functions for figuring out the type of integers *) +(* julia: functions for figuring out the type of integers *) let is_long_dec s int uint long ulong = match !Flag_parsing_c.int_thresholds with @@ -256,8 +267,13 @@ rule token = parse (* ----------------------------------------------------------------------- *) (* note: this lexer generate tokens for comments!! so can not give - * this lexer as-is to the parsing function. Must preprocess it, hence - * use techniques like cur_tok ref in parse_c.ml + * this lexer as-is to the parsing function. The caller must preprocess + * it, e.g. by using techniques like cur_tok ref in parse_c.ml. + * + * update: we now also generate a separate token for newlines, so now + * the caller may also have to reagglomerate all those commentspace + * tokens if he was assuming that spaces were agglomerate in a single + * token. *) | ['\n'] [' ' '\t' '\r' '\011' '\012' ]* diff --git a/parsing_c/lexer_parser.mli b/parsing_c/lexer_parser.mli index 30d161f..37befe7 100644 --- a/parsing_c/lexer_parser.mli +++ b/parsing_c/lexer_parser.mli @@ -13,6 +13,7 @@ val _typedef : (string, identkind) Common.scoped_h_env ref val add_ident : string -> unit val add_typedef : string -> unit + val add_typedef_root : string -> unit val new_scope : unit -> unit @@ -35,8 +36,6 @@ type context = | InInitializer | InEnum -val is_top_or_struct : context -> bool - type lexer_hint = { mutable context_stack: context Common.stack; } @@ -47,3 +46,6 @@ val push_context: context -> unit val pop_context: unit -> unit val default_hint : unit -> lexer_hint + +val is_top_or_struct : context -> bool + diff --git a/parsing_c/lib_parsing_c.ml b/parsing_c/lib_parsing_c.ml index 577ef14..7e70038 100644 --- a/parsing_c/lib_parsing_c.ml +++ b/parsing_c/lib_parsing_c.ml @@ -24,11 +24,23 @@ let pr2, pr2_once = Common.mk_pr2_wrappers Flag_parsing_c.verbose_parsing (* todo?: al_expr doit enlever les infos de type ? et doit remettre en * emptyAnnot ? + +No! Keeping the type information is important to ensuring that variables +of different type and declared in different places do not seem to match +each other. On the other hand, we don't want to keep around the +information about whether the expression is a test expression, because a +term that is a test expression should match one that is not. The test +information is only useful for matching to the CTL. + *) (* drop all info information *) let strip_info_visitor _ = + let drop_test ty = + let (ty,_) = !ty in + ref (ty,Ast_c.NotTest) in + { Visitor_c.default_visitor_c_s with Visitor_c.kinfo_s = (* traversal should be deterministic... *) @@ -38,7 +50,7 @@ let strip_info_visitor _ = Visitor_c.kexpr_s = (fun (k,_) e -> let (e', ty), ii' = k e in - (e', Ast_c.noType()(*ref !ty*)), ii' (* keep type - jll *) + (e', drop_test ty), ii' (* keep type - jll *) ); (* @@ -71,15 +83,59 @@ let al_ii x = Visitor_c.vk_ii_s (strip_info_visitor()) x +let strip_inh_info_visitor _ = (* for inherited metavariables *) + let drop_test_lv ty = + let (ty,_) = !ty in + let ty = + match ty with + None -> None + | Some (ty,_) -> Some (ty,Ast_c.NotLocalVar) in + ref (ty,Ast_c.NotTest) in + + { Visitor_c.default_visitor_c_s with + Visitor_c.kinfo_s = + (* traversal should be deterministic... *) + (let ctr = ref 0 in + (function (k,_) -> + function i -> ctr := !ctr + 1; Ast_c.al_info_cpp !ctr i)); + + Visitor_c.kexpr_s = (fun (k,_) e -> + let (e', ty), ii' = k e in + (e', drop_test_lv ty), ii' (* keep type - jll *) + ); + +(* + Visitor_c.ktype_s = (fun (k,_) ft -> + let ft' = k ft in + match Ast_c.unwrap_typeC ft' with + | Ast_c.TypeName (s,_typ) -> + Ast_c.TypeName (s, Ast_c.noTypedefDef()) +> Ast_c.rewrap_typeC ft' + | _ -> ft' + + ); +*) + + } + +let al_inh_expr x = Visitor_c.vk_expr_s (strip_inh_info_visitor()) x +let al_inh_statement x = Visitor_c.vk_statement_s (strip_inh_info_visitor()) x +let al_inh_type x = Visitor_c.vk_type_s (strip_inh_info_visitor()) x +let al_inh_init x = Visitor_c.vk_ini_s (strip_inh_info_visitor()) x +let al_inh_arguments x = Visitor_c.vk_arguments_s (strip_inh_info_visitor()) x + let semi_strip_info_visitor = (* keep position information *) + let drop_test ty = + let (ty,_) = !ty in + ref (ty,Ast_c.NotTest) in + { Visitor_c.default_visitor_c_s with Visitor_c.kinfo_s = (fun (k,_) i -> Ast_c.semi_al_info_cpp i); Visitor_c.kexpr_s = (fun (k,_) e -> let (e', ty),ii' = k e in - (e', Ast_c.noType()(*ref !ty*)), ii' (* keep type - jll *) + (e', drop_test ty), ii' (* keep type - jll *) ); } @@ -100,6 +156,7 @@ let semi_al_program = (* really strip, do not keep position nor anything specificities, true * abstracted form. *) +(* is this used for anything? jll *) let real_strip_info_visitor _ = { Visitor_c.default_visitor_c_s with Visitor_c.kinfo_s = (fun (k,_) i -> diff --git a/parsing_c/parse_c.ml b/parsing_c/parse_c.ml index 20910aa..97546c6 100644 --- a/parsing_c/parse_c.ml +++ b/parsing_c/parse_c.ml @@ -35,28 +35,6 @@ let token_to_strpos tok = (TH.str_of_tok tok, TH.pos_of_tok tok) -let error_msg_tok tok = - let file = TH.file_of_tok tok in - if !Flag_parsing_c.verbose_parsing - then Common.error_message file (token_to_strpos tok) - else ("error in " ^ file ^ "; set verbose_parsing for more info") - - -let print_bad line_error (start_line, end_line) filelines = - begin - pr2 ("badcount: " ^ i_to_s (end_line - start_line)); - - for i = start_line to end_line do - let line = filelines.(i) in - - if i =|= line_error - then pr2 ("BAD:!!!!!" ^ " " ^ line) - else pr2 ("bad:" ^ " " ^ line) - done - end - - - let mk_info_item2 filename toks = let buf = Buffer.create 100 in let s = @@ -84,6 +62,47 @@ let info_same_line line xs = xs +> List.filter (fun info -> Ast_c.line_of_info info =|= line) +(* move in cpp_token_c ? *) +let is_define_passed passed = + let xs = passed +> List.rev +> List.filter TH.is_not_comment in + if List.length xs >= 2 + then + (match Common.head_middle_tail xs with + | Parser_c.TDefine _, _, Parser_c.TDefEOL _ -> + true + | _ -> false + ) + else begin + pr2_err "WEIRD: length list of error recovery tokens < 2 "; + false + end + + +(*****************************************************************************) +(* Error diagnostic *) +(*****************************************************************************) + +let error_msg_tok tok = + let file = TH.file_of_tok tok in + if !Flag_parsing_c.verbose_parsing + then Common.error_message file (token_to_strpos tok) + else ("error in " ^ file ^ "; set verbose_parsing for more info") + + +let print_bad line_error (start_line, end_line) filelines = + begin + pr2 ("badcount: " ^ i_to_s (end_line - start_line)); + + for i = start_line to end_line do + let line = filelines.(i) in + + if i =|= line_error + then pr2 ("BAD:!!!!!" ^ " " ^ line) + else pr2 ("bad:" ^ " " ^ line) + done + end + + (*****************************************************************************) (* Stats on what was passed/commentized *) (*****************************************************************************) @@ -345,537 +364,26 @@ let expression_of_string = parse_gen Parser_c.expr -(*****************************************************************************) -(* Consistency checking *) -(*****************************************************************************) - -(* todo: - * could check that an ident has always the same class, be it a typedef - * (but sometimes do 'acpi_val acpi_val;'), an ident, a TMacroStatement, - * etc. - *) - -type class_ident = - | CIdent (* can be var, func, field, tag, enum constant *) - | CTypedef - -let str_of_class_ident = function - | CIdent -> "Ident" - | CTypedef -> "Typedef" - -(* - | CMacro - | CMacroString - | CMacroStmt - | CMacroDecl - | CMacroIterator - | CAttr - -(* but take care that must still be able to use '=' *) -type context = InFunction | InEnum | InStruct | InInitializer | InParams -type class_token = - | CIdent of class_ident - - | CComment - | CSpace - | CCommentCpp of cppkind - | CCommentMisc - | CCppDirective - - | COPar - | CCPar - | COBrace - | CCBrace - - | CSymbol - | CReservedKwd (type | decl | qualif | flow | misc | attr) -*) - -let ident_to_typename ident : Ast_c.fullType = - Ast_c.mk_ty (Ast_c.TypeName (ident, Ast_c.noTypedefDef())) Ast_c.noii - - -(* parse_typedef_fix4 *) -let consistency_checking2 xs = - - (* first phase, gather data *) - let stat = Hashtbl.create 101 in - - (* default value for hash *) - let v1 () = Hashtbl.create 101 in - let v2 () = ref 0 in - - let bigf = { Visitor_c.default_visitor_c with - - Visitor_c.kexpr = (fun (k,bigf) x -> - match Ast_c.unwrap_expr x with - | Ast_c.Ident (id) -> - let s = Ast_c.str_of_name id in - stat +> - Common.hfind_default s v1 +> Common.hfind_default CIdent v2 +> - (fun aref -> incr aref) - - | _ -> k x - ); - Visitor_c.ktype = (fun (k,bigf) t -> - match Ast_c.unwrap_typeC t with - | Ast_c.TypeName (name,_typ) -> - let s = Ast_c.str_of_name name in - stat +> - Common.hfind_default s v1 +> Common.hfind_default CTypedef v2 +> - (fun aref -> incr aref) - - | _ -> k t - ); - } - in - xs +> List.iter (fun (p, info_item) -> Visitor_c.vk_toplevel bigf p); - - - let ident_to_type = ref [] in - - - (* second phase, analyze data *) - stat +> Hashtbl.iter (fun k v -> - let xs = Common.hash_to_list v in - if List.length xs >= 2 - then begin - pr2_err ("CONFLICT:" ^ k); - let sorted = xs +> List.sort (fun (ka,va) (kb,vb) -> - if !va =|= !vb then - (match ka, kb with - | CTypedef, _ -> 1 (* first is smaller *) - | _, CTypedef -> -1 - | _ -> 0 - ) - else compare !va !vb - ) in - let sorted = List.rev sorted in - match sorted with - | [CTypedef, i1;CIdent, i2] -> - pr2_err ("transforming some ident in typedef"); - push2 k ident_to_type; - | _ -> - pr2_err ("TODO:other transforming?"); - - end - ); - - (* third phase, update ast. - * todo? but normally should try to handle correctly scope ? maybe sometime - * sizeof(id) and even if id was for a long time an identifier, maybe - * a few time, because of the scope it's actually really a type. - *) - if (null !ident_to_type) - then xs - else - let bigf = { Visitor_c.default_visitor_c_s with - Visitor_c.kdefineval_s = (fun (k,bigf) x -> - match x with - | Ast_c.DefineExpr e -> - (match Ast_c.unwrap_expr e with - | Ast_c.Ident (ident) -> - let s = Ast_c.str_of_name ident in - if List.mem s !ident_to_type - then - let t = ident_to_typename ident in - Ast_c.DefineType t - else k x - | _ -> k x - ) - | _ -> k x - ); - Visitor_c.kexpr_s = (fun (k, bigf) x -> - match Ast_c.get_e_and_ii x with - | (Ast_c.SizeOfExpr e, tref), isizeof -> - let i1 = tuple_of_list1 isizeof in - (match Ast_c.get_e_and_ii e with - | (Ast_c.ParenExpr e, _), iiparen -> - let (i2, i3) = tuple_of_list2 iiparen in - (match Ast_c.get_e_and_ii e with - | (Ast_c.Ident (ident), _), _ii -> - - let s = Ast_c.str_of_name ident in - if List.mem s !ident_to_type - then - let t = ident_to_typename ident in - (Ast_c.SizeOfType t, tref),[i1;i2;i3] - else k x - | _ -> k x - ) - | _ -> k x - ) - | _ -> k x - ); - } in - xs +> List.map (fun (p, info_item) -> - Visitor_c.vk_toplevel_s bigf p, info_item - ) - - -let consistency_checking a = - Common.profile_code "C consistencycheck" (fun () -> consistency_checking2 a) - - - -(*****************************************************************************) -(* Error recovery *) -(*****************************************************************************) - -let is_define_passed passed = - let xs = passed +> List.rev +> List.filter TH.is_not_comment in - if List.length xs >= 2 - then - (match Common.head_middle_tail xs with - | Parser_c.TDefine _, _, Parser_c.TDefEOL _ -> - true - | _ -> false - ) - else begin - pr2_err "WEIRD: length list of error recovery tokens < 2 "; - false - end - -let is_defined_passed_bis last_round = - let xs = last_round +> List.filter TH.is_not_comment in - match xs with - | Parser_c.TDefine _::_ -> true - | _ -> false - -(* ---------------------------------------------------------------------- *) - - -(* todo: do something if find Parser_c.Eof ? *) -let rec find_next_synchro next already_passed = - - (* Maybe because not enough }, because for example an ifdef contains - * in both branch some opening {, we later eat too much, "on deborde - * sur la fonction d'apres". So already_passed may be too big and - * looking for next synchro point starting from next may not be the - * best. So maybe we can find synchro point inside already_passed - * instead of looking in next. - * - * But take care! must progress. We must not stay in infinite loop! - * For instance now I have as a error recovery to look for - * a "start of something", corresponding to start of function, - * but must go beyond this start otherwise will loop. - * So look at premier(external_declaration2) in parser.output and - * pass at least those first tokens. - * - * I have chosen to start search for next synchro point after the - * first { I found, so quite sure we will not loop. *) - - let last_round = List.rev already_passed in - if is_defined_passed_bis last_round - then find_next_synchro_define (last_round ++ next) [] - else - - let (before, after) = - last_round +> Common.span (fun tok -> - match tok with - (* by looking at TOBrace we are sure that the "start of something" - * will not arrive too early - *) - | Parser_c.TOBrace _ -> false - | Parser_c.TDefine _ -> false - | _ -> true - ) - in - find_next_synchro_orig (after ++ next) (List.rev before) - - - -and find_next_synchro_define next already_passed = - match next with - | [] -> - pr2_err "ERROR-RECOV: end of file while in recovery mode"; - already_passed, [] - | (Parser_c.TDefEOL i as v)::xs -> - pr2_err ("ERROR-RECOV: found sync end of #define, line "^i_to_s(TH.line_of_tok v)); - v::already_passed, xs - | v::xs -> - find_next_synchro_define xs (v::already_passed) - - - - -and find_next_synchro_orig next already_passed = - match next with - | [] -> - pr2_err "ERROR-RECOV: end of file while in recovery mode"; - already_passed, [] - - | (Parser_c.TCBrace i as v)::xs when TH.col_of_tok v =|= 0 -> - pr2_err ("ERROR-RECOV: found sync '}' at line "^i_to_s (TH.line_of_tok v)); - - (match xs with - | [] -> raise Impossible (* there is a EOF token normally *) - - (* still useful: now parser.mly allow empty ';' so normally no pb *) - | Parser_c.TPtVirg iptvirg::xs -> - pr2_err "ERROR-RECOV: found sync bis, eating } and ;"; - (Parser_c.TPtVirg iptvirg)::v::already_passed, xs - - | Parser_c.TIdent x::Parser_c.TPtVirg iptvirg::xs -> - pr2_err "ERROR-RECOV: found sync bis, eating ident, }, and ;"; - (Parser_c.TPtVirg iptvirg)::(Parser_c.TIdent x)::v::already_passed, - xs - - | Parser_c.TCommentSpace sp::Parser_c.TIdent x::Parser_c.TPtVirg iptvirg - ::xs -> - pr2_err "ERROR-RECOV: found sync bis, eating ident, }, and ;"; - (Parser_c.TCommentSpace sp):: - (Parser_c.TPtVirg iptvirg):: - (Parser_c.TIdent x):: - v:: - already_passed, - xs - - | Parser_c.TCommentNewline sp::Parser_c.TIdent x::Parser_c.TPtVirg iptvirg - ::xs -> - pr2_err "ERROR-RECOV: found sync bis, eating ident, }, and ;"; - (Parser_c.TCommentNewline sp):: - (Parser_c.TPtVirg iptvirg):: - (Parser_c.TIdent x):: - v:: - already_passed, - xs - - | _ -> - v::already_passed, xs - ) - | v::xs when TH.col_of_tok v =|= 0 && TH.is_start_of_something v -> - pr2_err ("ERROR-RECOV: found sync col 0 at line "^ i_to_s(TH.line_of_tok v)); - already_passed, v::xs - - | v::xs -> - find_next_synchro_orig xs (v::already_passed) - - -(*****************************************************************************) -(* Macro problem recovery *) -(*****************************************************************************) -module TV = Token_views_c - -let candidate_macros_in_passed2 passed defs_optional = - let res = ref [] in - let res2 = ref [] in - - passed +> List.iter (function - | Parser_c.TIdent (s,_) - (* bugfix: may have to undo some infered things *) - | Parser_c.TMacroIterator (s,_) - | Parser_c.TypedefIdent (s,_) - -> - (match Common.hfind_option s defs_optional with - | Some def -> - if s ==~ Parsing_hacks.regexp_macro - then - (* pr2 (spf "candidate: %s" s); *) - Common.push2 (s, def) res - else - Common.push2 (s, def) res2 - | None -> () - ) - - | _ -> () - ); - if null !res - then !res2 - else !res - -let candidate_macros_in_passed a b = - Common.profile_code "MACRO managment" (fun () -> - candidate_macros_in_passed2 a b) - - - -let find_optional_macro_to_expand2 ~defs toks = - - let defs = Common.hash_of_list defs in - - let toks = toks +> Common.map (function - - (* special cases to undo *) - | Parser_c.TMacroIterator (s, ii) -> - if Hashtbl.mem defs s - then Parser_c.TIdent (s, ii) - else Parser_c.TMacroIterator (s, ii) - - | Parser_c.TypedefIdent (s, ii) -> - if Hashtbl.mem defs s - then Parser_c.TIdent (s, ii) - else Parser_c.TypedefIdent (s, ii) - - | x -> x - ) in - - let tokens = toks in - Parsing_hacks.fix_tokens_cpp ~macro_defs:defs tokens - - (* just calling apply_macro_defs and having a specialized version - * of the code in fix_tokens_cpp is not enough as some work such - * as the passing of the body of attribute in Parsing_hacks.find_macro_paren - * will not get the chance to be run on the new expanded tokens. - * Hence even if it's expensive, it's currently better to - * just call directly fix_tokens_cpp again here. - - let tokens2 = ref (tokens +> Common.acc_map TV.mk_token_extended) in - let cleaner = !tokens2 +> Parsing_hacks.filter_cpp_stuff in - let paren_grouped = TV.mk_parenthised cleaner in - Cpp_token_c.apply_macro_defs - ~msg_apply_known_macro:(fun s -> pr2 (spf "APPLYING: %s" s)) - ~msg_apply_known_macro_hint:(fun s -> pr2 "hint") - defs paren_grouped; - (* because the before field is used by apply_macro_defs *) - tokens2 := TV.rebuild_tokens_extented !tokens2; - Parsing_hacks.insert_virtual_positions - (!tokens2 +> Common.acc_map (fun x -> x.TV.tok)) - *) -let find_optional_macro_to_expand ~defs a = - Common.profile_code "MACRO managment" (fun () -> - find_optional_macro_to_expand2 ~defs a) - - - -(*****************************************************************************) -(* Include/Define hacks *) -(*****************************************************************************) - -(* Sometimes I prefer to generate a single token for a list of things in the - * lexer so that if I have to passed them, like for passing TInclude then - * it's easy. Also if I don't do a single token, then I need to - * parse the rest which may not need special stuff, like detecting - * end of line which the parser is not really ready for. So for instance - * could I parse a #include as 2 or more tokens ? just - * lex #include ? so then need recognize as one token ? - * but this kind of token is valid only after a #include and the - * lexing and parsing rules are different for such tokens so not that - * easy to parse such things in parser_c.mly. Hence the following hacks. - * - * less?: maybe could get rid of this like I get rid of some of fix_define. - *) - -(* ------------------------------------------------------------------------- *) -(* helpers *) -(* ------------------------------------------------------------------------- *) - -(* used to generate new token from existing one *) -let new_info posadd str ii = - { Ast_c.pinfo = - Ast_c.OriginTok { (Ast_c.parse_info_of_info ii) with - charpos = Ast_c.pos_of_info ii + posadd; - str = str; - column = Ast_c.col_of_info ii + posadd; - }; - (* must generate a new ref each time, otherwise share *) - cocci_tag = ref Ast_c.emptyAnnot; - comments_tag = ref Ast_c.emptyComments; - } - - -let rec comment_until_defeol xs = - match xs with - | [] -> - (* job not done in Cpp_token_c.define_parse ? *) - failwith "cant find end of define token TDefEOL" - | x::xs -> - (match x with - | Parser_c.TDefEOL i -> - Parser_c.TCommentCpp (Token_c.CppDirective, TH.info_of_tok x) - ::xs - | _ -> - let x' = - (* bugfix: otherwise may lose a TComment token *) - if TH.is_real_comment x - then x - else Parser_c.TCommentCpp (Token_c.CppPassingNormal (*good?*), TH.info_of_tok x) - in - x'::comment_until_defeol xs - ) - -let drop_until_defeol xs = - List.tl - (Common.drop_until (function Parser_c.TDefEOL _ -> true | _ -> false) xs) - - - -(* ------------------------------------------------------------------------- *) -(* returns a pair (replaced token, list of next tokens) *) -(* ------------------------------------------------------------------------- *) - -let tokens_include (info, includes, filename, inifdef) = - Parser_c.TIncludeStart (Ast_c.rewrap_str includes info, inifdef), - [Parser_c.TIncludeFilename - (filename, (new_info (String.length includes) filename info)) - ] - (*****************************************************************************) (* Parsing default define macros, usually in a standard.h file *) (*****************************************************************************) -let parse_cpp_define_file2 file = +let extract_macros2 file = Common.save_excursion Flag_parsing_c.verbose_lexing (fun () -> Flag_parsing_c.verbose_lexing := false; let toks = tokens ~profile:false file in - let toks = Cpp_token_c.fix_tokens_define toks in - Cpp_token_c.extract_cpp_define toks + let toks = Parsing_hacks.fix_tokens_define toks in + Cpp_token_c.extract_macros toks ) -let parse_cpp_define_file a = - Common.profile_code_exclusif "HACK" (fun () -> parse_cpp_define_file2 a) - - - -let (_defs : (string, Cpp_token_c.define_def) Hashtbl.t ref) = - ref (Hashtbl.create 101) - -let (_defs_builtins : (string, Cpp_token_c.define_def) Hashtbl.t ref) = - ref (Hashtbl.create 101) - - -(* can not be put in parsing_hack, cos then mutually recursive problem as - * we also want to parse the standard.h file. - *) -let init_defs_macros std_h = - if not (Common.lfile_exists std_h) - then pr2 ("warning: Can't find default macro file: " ^ std_h) - else begin - pr2 ("init_defs: " ^ std_h); - _defs := Common.hash_of_list (parse_cpp_define_file std_h); - end - -let init_defs_builtins file_h = - if not (Common.lfile_exists file_h) - then pr2 ("warning: Can't find macro file: " ^ file_h) - else begin - pr2 ("init_defs_builtins: " ^ file_h); - _defs_builtins := - Common.hash_of_list (parse_cpp_define_file file_h); - end +let extract_macros a = + Common.profile_code_exclusif "HACK" (fun () -> extract_macros2 a) (*****************************************************************************) -(* Main entry point *) +(* Helper for main entry point *) (*****************************************************************************) -type info_item = string * Parser_c.token list - -type program2 = toplevel2 list - and toplevel2 = Ast_c.toplevel * info_item - -let program_of_program2 xs = - xs +> List.map fst - -let with_program2 f program2 = - program2 - +> Common.unzip - +> (fun (program, infos) -> - f program, infos - ) - +> Common.uncurry Common.zip - - (* The use of local refs (remaining_tokens, passed_tokens, ...) makes * possible error recovery. Indeed, they allow to skip some tokens and @@ -1013,8 +521,8 @@ let rec lexer_function ~pass tr = fun lexbuf -> let v' = Parser_c.TCommentCpp (Token_c.CppDirective,TH.info_of_tok v) in tr.passed <- v'::tr.passed; - tr.rest <- comment_until_defeol tr.rest; - tr.rest_clean <- drop_until_defeol tr.rest_clean; + tr.rest <- Parsing_hacks.comment_until_defeol tr.rest; + tr.rest_clean <- Parsing_hacks.drop_until_defeol tr.rest_clean; lexer_function ~pass tr lexbuf end else begin @@ -1035,7 +543,7 @@ let rec lexer_function ~pass tr = fun lexbuf -> end else begin let (v,new_tokens) = - tokens_include (info, includes, filename, inifdef) in + Parsing_hacks.tokens_include (info, includes, filename, inifdef) in let new_tokens_clean = new_tokens +> List.filter TH.is_not_comment in @@ -1116,7 +624,8 @@ let get_one_elem ~pass tr (file, filelines) = let current = tr.current in (* error recovery, go to next synchro point *) - let (passed', rest') = find_next_synchro tr.rest tr.passed in + let (passed', rest') = + Parsing_recovery_c.find_next_synchro tr.rest tr.passed in tr.rest <- rest'; tr.passed <- passed'; @@ -1134,6 +643,152 @@ let get_one_elem ~pass tr (file, filelines) = +(* Macro problem recovery *) +(* used by the multi-pass error recovery expand-on-demand *) +(* +val candidate_macros_in_passed: + defs: (string, define_def) Hashtbl.t -> + Parser_c.token list -> (string * define_def) list +*) + +let candidate_macros_in_passed2 ~defs passed = + let res = ref [] in + let res2 = ref [] in + + passed +> List.iter (function + | Parser_c.TIdent (s,_) + (* bugfix: may have to undo some infered things *) + | Parser_c.TMacroIterator (s,_) + | Parser_c.TypedefIdent (s,_) + -> + (match Common.hfind_option s defs with + | Some def -> + if s ==~ Parsing_hacks.regexp_macro + then + (* pr2 (spf "candidate: %s" s); *) + Common.push2 (s, def) res + else + Common.push2 (s, def) res2 + | None -> () + ) + + | _ -> () + ); + if null !res + then !res2 + else !res + +let candidate_macros_in_passed ~defs b = + Common.profile_code "MACRO managment" (fun () -> + candidate_macros_in_passed2 ~defs b) + + + + + +let find_optional_macro_to_expand2 ~defs toks = + + let defs = Common.hash_of_list defs in + + let toks = toks +> Common.map (function + + (* special cases to undo *) + | Parser_c.TMacroIterator (s, ii) -> + if Hashtbl.mem defs s + then Parser_c.TIdent (s, ii) + else Parser_c.TMacroIterator (s, ii) + + | Parser_c.TypedefIdent (s, ii) -> + if Hashtbl.mem defs s + then Parser_c.TIdent (s, ii) + else Parser_c.TypedefIdent (s, ii) + + | x -> x + ) in + + let tokens = toks in + Parsing_hacks.fix_tokens_cpp ~macro_defs:defs tokens + + (* just calling apply_macro_defs and having a specialized version + * of the code in fix_tokens_cpp is not enough as some work such + * as the passing of the body of attribute in Parsing_hacks.find_macro_paren + * will not get the chance to be run on the new expanded tokens. + * Hence even if it's expensive, it's currently better to + * just call directly fix_tokens_cpp again here. + + let tokens2 = ref (tokens +> Common.acc_map TV.mk_token_extended) in + let cleaner = !tokens2 +> Parsing_hacks.filter_cpp_stuff in + let paren_grouped = TV.mk_parenthised cleaner in + Cpp_token_c.apply_macro_defs + ~msg_apply_known_macro:(fun s -> pr2 (spf "APPLYING: %s" s)) + ~msg_apply_known_macro_hint:(fun s -> pr2 "hint") + defs paren_grouped; + (* because the before field is used by apply_macro_defs *) + tokens2 := TV.rebuild_tokens_extented !tokens2; + Parsing_hacks.insert_virtual_positions + (!tokens2 +> Common.acc_map (fun x -> x.TV.tok)) + *) +let find_optional_macro_to_expand ~defs a = + Common.profile_code "MACRO managment" (fun () -> + find_optional_macro_to_expand2 ~defs a) + + + + + +(*****************************************************************************) +(* Main entry points *) +(*****************************************************************************) + +let (_defs : (string, Cpp_token_c.define_def) Hashtbl.t ref) = + ref (Hashtbl.create 101) + +let (_defs_builtins : (string, Cpp_token_c.define_def) Hashtbl.t ref) = + ref (Hashtbl.create 101) + + +(* can not be put in parsing_hack, cos then mutually recursive problem as + * we also want to parse the standard.h file. + *) +let init_defs_macros std_h = + if not (Common.lfile_exists std_h) + then pr2 ("warning: Can't find default macro file: " ^ std_h) + else begin + pr2 ("init_defs: " ^ std_h); + _defs := Common.hash_of_list (extract_macros std_h); + end + +let init_defs_builtins file_h = + if not (Common.lfile_exists file_h) + then pr2 ("warning: Can't find macro file: " ^ file_h) + else begin + pr2 ("init_defs_builtins: " ^ file_h); + _defs_builtins := + Common.hash_of_list (extract_macros file_h); + end + + + +type info_item = string * Parser_c.token list + +type program2 = toplevel2 list + and toplevel2 = Ast_c.toplevel * info_item + +let program_of_program2 xs = + xs +> List.map fst + +let with_program2 f program2 = + program2 + +> Common.unzip + +> (fun (program, infos) -> + f program, infos + ) + +> Common.uncurry Common.zip + + + + + (* note: as now we go in 2 passes, there is first all the error message of * the lexer, and then the error of the parser. It is not anymore @@ -1159,9 +814,7 @@ let parse_print_error_heuristic2 file = Parsing_hacks.ifdef_paren_cnt := 0; let toks_orig = tokens file in - - let toks = Cpp_token_c.fix_tokens_define toks_orig in - + let toks = Parsing_hacks.fix_tokens_define toks_orig in let toks = Parsing_hacks.fix_tokens_cpp ~macro_defs:!_defs_builtins toks in (* expand macros on demand trick, preparation phase *) @@ -1178,7 +831,7 @@ let parse_print_error_heuristic2 file = ) in Common.profile_code "MACRO mgmt prep 2" (fun () -> - let local_macros = parse_cpp_define_file file in + let local_macros = extract_macros file in local_macros +> List.iter (fun (s, def) -> Hashtbl.replace macros s def; ); @@ -1225,8 +878,10 @@ let parse_print_error_heuristic2 file = | Left e -> passx | Right (info,line_err,passed,passed_before_error,cur,exn) -> let candidates = - candidate_macros_in_passed passed macros + candidate_macros_in_passed ~defs:macros passed in + + if is_define_passed passed || null candidates then passx else begin @@ -1246,7 +901,9 @@ let parse_print_error_heuristic2 file = pr2_err "parsing pass4: try again"; let candidates = - candidate_macros_in_passed passed macros in + candidate_macros_in_passed + ~defs:macros passed + in let toks = List.rev passed ++ tr.rest in let toks' = @@ -1351,7 +1008,7 @@ let parse_print_error_heuristic2 file = ) in let v = loop tr in - let v = consistency_checking v in + let v = with_program2 Parsing_consistency_c.consistency_checking v in (v, stat) diff --git a/parsing_c/parse_c.mli b/parsing_c/parse_c.mli index c877e7d..d5a6a96 100644 --- a/parsing_c/parse_c.mli +++ b/parsing_c/parse_c.mli @@ -1,55 +1,51 @@ -open Common - (* The main function is parse_c_and_cpp. It uses globals in Lexer_Parser and - * Parsing_hacks. Especially Parsing_hacks._defs which often comes - * from a standard.h macro file. Cf also init_defs below. + * and also _defs below which often comes from a standard.h macro file. + * cf also init_defs_xxx below. *) -(* ---------------------------------------------------------------------- *) type program2 = toplevel2 list and toplevel2 = Ast_c.toplevel * info_item - - (* the token list contains now also the comment-tokens *) - and info_item = (string * Parser_c.token list) - -(* ---------------------------------------------------------------------- *) -(* a few globals *) -val parse_cpp_define_file : - filename -> (string, Cpp_token_c.define_def) assoc + (* the token list contains now also the comment-tokens *) + and info_item = (string * Parser_c.token list) (* usually correspond to what is inside your macros.h *) val _defs : (string, Cpp_token_c.define_def) Hashtbl.t ref (* usually correspond to what is inside your standard.h *) val _defs_builtins : (string, Cpp_token_c.define_def) Hashtbl.t ref -val init_defs_macros : filename -> unit -val init_defs_builtins : filename -> unit +val init_defs_macros : Common.filename -> unit +val init_defs_builtins : Common.filename -> unit -(* ---------------------------------------------------------------------- *) (* This is the main function *) -val parse_print_error_heuristic: - filename (*cfile*) -> (program2 * Parsing_stat.parsing_stat) -(* alias of previous func *) val parse_c_and_cpp : - filename (*cfile*) -> (program2 * Parsing_stat.parsing_stat) + Common.filename (*cfile*) -> (program2 * Parsing_stat.parsing_stat) (* use some .ast_raw memoized version, and take care if obsolete *) val parse_cache: - filename (*cfile*) -> (program2 * Parsing_stat.parsing_stat) + Common.filename (*cfile*) -> (program2 * Parsing_stat.parsing_stat) + + +(* ---------------------------------------------------------------------- *) +(* used to extract macros from standard.h, but also now from regular C files + * in -extract_macros to later feed an automatically build standard.h *) +val extract_macros : + Common.filename -> (string, Cpp_token_c.define_def) Common.assoc + + + + (* ---------------------------------------------------------------------- *) (* used also for the standard.h file *) -val tokens: ?profile:bool -> filename -> Parser_c.token list +val tokens: ?profile:bool -> Common.filename -> Parser_c.token list val tokens_of_string: string -> Parser_c.token list -val parse: filename -> Ast_c.program -val parse_print_error: filename -> Ast_c.program +val parse: Common.filename -> Ast_c.program +val parse_print_error: Common.filename -> Ast_c.program val parse_gen: ((Lexing.lexbuf -> Parser_c.token) -> Lexing.lexbuf -> 'a) -> string -> 'a - - (* ---------------------------------------------------------------------- *) (* Easy way to build complex Ast elements from simple strings. * Can also be useful when called from the ocaml toplevel to test. @@ -62,14 +58,9 @@ val cstatement_of_string : string -> Ast_c.statement val cexpression_of_string : string -> Ast_c.expression - - (* ---------------------------------------------------------------------- *) (* a few helpers *) val print_commentized : Parser_c.token list -> unit val program_of_program2 : program2 -> Ast_c.program val with_program2: (Ast_c.program -> Ast_c.program) -> program2 -> program2 - - - diff --git a/parsing_c/parser_c.mly b/parsing_c/parser_c.mly index 14d3f8c..9ad9c4c 100644 --- a/parsing_c/parser_c.mly +++ b/parsing_c/parser_c.mly @@ -21,7 +21,6 @@ open Lexer_parser (* for the fields *) open Semantic_c (* Semantic exn *) -module Stat = Parsing_stat (*****************************************************************************) (* Wrappers *) @@ -446,6 +445,7 @@ let mk_string_wrap (s,info) = (s, [info]) /*(*-----------------------------------------*)*/ %token Tasm %token Tattribute +%token TattributeNoarg %token Tinline %token Ttypeof @@ -1269,6 +1269,7 @@ decl2: DeclList ([{v_namei = None; v_type = returnType; v_storage = unwrap storage; v_local = local; v_attr = Ast_c.noattr; + v_type_bis = ref None; },[]], ($2::iistart::snd storage)) } @@ -1291,6 +1292,7 @@ decl2: v_storage = unwrap storage; v_local = local; v_attr = attrs; + v_type_bis = ref None; }, iivirg ) diff --git a/parsing_c/parsing_consistency_c.ml b/parsing_c/parsing_consistency_c.ml new file mode 100644 index 0000000..8a5c432 --- /dev/null +++ b/parsing_c/parsing_consistency_c.ml @@ -0,0 +1,195 @@ +(* Yoann Padioleau + * + * Copyright (C) 2006, 2007, 2008 Ecole des Mines de Nantes + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License (GPL) + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * file license.txt for more details. + *) + +open Common + + +(*****************************************************************************) +(* Wrappers *) +(*****************************************************************************) +let pr2_err, pr2_once = Common.mk_pr2_wrappers Flag_parsing_c.verbose_parsing + +(*****************************************************************************) +(* Consistency checking *) +(*****************************************************************************) + +(* todo: + * could check that an ident has always the same class, be it a typedef + * (but sometimes do 'acpi_val acpi_val;'), an ident, a TMacroStatement, + * etc. + *) + +type class_ident = + | CIdent (* can be var, func, field, tag, enum constant *) + | CTypedef + +let str_of_class_ident = function + | CIdent -> "Ident" + | CTypedef -> "Typedef" + +(* + | CMacro + | CMacroString + | CMacroStmt + | CMacroDecl + | CMacroIterator + | CAttr + +(* but take care that must still be able to use '=' *) +type context = InFunction | InEnum | InStruct | InInitializer | InParams +type class_token = + | CIdent of class_ident + + | CComment + | CSpace + | CCommentCpp of cppkind + | CCommentMisc + | CCppDirective + + | COPar + | CCPar + | COBrace + | CCBrace + + | CSymbol + | CReservedKwd (type | decl | qualif | flow | misc | attr) +*) + +let ident_to_typename ident : Ast_c.fullType = + Ast_c.mk_ty (Ast_c.TypeName (ident, Ast_c.noTypedefDef())) Ast_c.noii + + +(* parse_typedef_fix4 *) +let consistency_checking2 xs = + + (* first phase, gather data *) + let stat = Hashtbl.create 101 in + + (* default value for hash *) + let v1 () = Hashtbl.create 101 in + let v2 () = ref 0 in + + let bigf = { Visitor_c.default_visitor_c with + + Visitor_c.kexpr = (fun (k,bigf) x -> + match Ast_c.unwrap_expr x with + | Ast_c.Ident (id) -> + let s = Ast_c.str_of_name id in + stat +> + Common.hfind_default s v1 +> Common.hfind_default CIdent v2 +> + (fun aref -> incr aref) + + | _ -> k x + ); + Visitor_c.ktype = (fun (k,bigf) t -> + match Ast_c.unwrap_typeC t with + | Ast_c.TypeName (name,_typ) -> + let s = Ast_c.str_of_name name in + stat +> + Common.hfind_default s v1 +> Common.hfind_default CTypedef v2 +> + (fun aref -> incr aref) + + | _ -> k t + ); + } + in + xs +> List.iter (fun (p) -> Visitor_c.vk_toplevel bigf p); + + + let ident_to_type = ref [] in + + + (* second phase, analyze data *) + stat +> Hashtbl.iter (fun k v -> + let xs = Common.hash_to_list v in + if List.length xs >= 2 + then begin + pr2_err ("CONFLICT:" ^ k); + let sorted = xs +> List.sort (fun (ka,va) (kb,vb) -> + if !va =|= !vb then + (match ka, kb with + | CTypedef, _ -> 1 (* first is smaller *) + | _, CTypedef -> -1 + | _ -> 0 + ) + else compare !va !vb + ) in + let sorted = List.rev sorted in + match sorted with + | [CTypedef, i1;CIdent, i2] -> + pr2_err ("transforming some ident in typedef"); + push2 k ident_to_type; + | _ -> + pr2_err ("TODO:other transforming?"); + + end + ); + + (* third phase, update ast. + * todo? but normally should try to handle correctly scope ? maybe sometime + * sizeof(id) and even if id was for a long time an identifier, maybe + * a few time, because of the scope it's actually really a type. + *) + if (null !ident_to_type) + then xs + else + let bigf = { Visitor_c.default_visitor_c_s with + Visitor_c.kdefineval_s = (fun (k,bigf) x -> + match x with + | Ast_c.DefineExpr e -> + (match Ast_c.unwrap_expr e with + | Ast_c.Ident (ident) -> + let s = Ast_c.str_of_name ident in + if List.mem s !ident_to_type + then + let t = ident_to_typename ident in + Ast_c.DefineType t + else k x + | _ -> k x + ) + | _ -> k x + ); + Visitor_c.kexpr_s = (fun (k, bigf) x -> + match Ast_c.get_e_and_ii x with + | (Ast_c.SizeOfExpr e, tref), isizeof -> + let i1 = tuple_of_list1 isizeof in + (match Ast_c.get_e_and_ii e with + | (Ast_c.ParenExpr e, _), iiparen -> + let (i2, i3) = tuple_of_list2 iiparen in + (match Ast_c.get_e_and_ii e with + | (Ast_c.Ident (ident), _), _ii -> + + let s = Ast_c.str_of_name ident in + if List.mem s !ident_to_type + then + let t = ident_to_typename ident in + (Ast_c.SizeOfType t, tref),[i1;i2;i3] + else k x + | _ -> k x + ) + | _ -> k x + ) + | _ -> k x + ); + } in + xs +> List.map (fun (p) -> + Visitor_c.vk_toplevel_s bigf p + ) + + +let consistency_checking a = + Common.profile_code "C consistencycheck" (fun () -> consistency_checking2 a) + + + diff --git a/parsing_c/parsing_consistency_c.mli b/parsing_c/parsing_consistency_c.mli new file mode 100644 index 0000000..ad24556 --- /dev/null +++ b/parsing_c/parsing_consistency_c.mli @@ -0,0 +1,4 @@ +(* check consistency and possibly change some Ident expression into + * TypeName, especially in argument to functions. *) +val consistency_checking: + Ast_c.program -> Ast_c.program diff --git a/parsing_c/parsing_hacks.ml b/parsing_c/parsing_hacks.ml index 50d769a..fdc5a97 100644 --- a/parsing_c/parsing_hacks.ml +++ b/parsing_c/parsing_hacks.ml @@ -363,6 +363,234 @@ let rec set_ifdef_parenthize_info xs = ) +(*****************************************************************************) +(* The parsing hack for #define *) +(*****************************************************************************) + +(* To parse macro definitions I need to do some tricks + * as some information can be get only at the lexing level. For instance + * the space after the name of the macro in '#define foo (x)' is meaningful + * but the grammar can not get this information. So define_ident below + * look at such space and generate a special TOpardefine. In a similar + * way macro definitions can contain some antislash and newlines + * and the grammar need to know where the macro ends (which is + * a line-level and so low token-level information). Hence the + * function 'define_line' below and the TDefEol. + * + * update: TDefEol is handled in a special way at different places, + * a little bit like EOF, especially for error recovery, so this + * is an important token that should not be retagged! + * + * + * ugly hack, a better solution perhaps would be to erase TDefEOL + * from the Ast and list of tokens in parse_c. + * + * note: I do a +1 somewhere, it's for the unparsing to correctly sync. + * + * note: can't replace mark_end_define by simply a fakeInfo(). The reason + * is where is the \n TCommentSpace. Normally there is always a last token + * to synchronize on, either EOF or the token of the next toplevel. + * In the case of the #define we got in list of token + * [TCommentSpace "\n"; TDefEOL] but if TDefEOL is a fakeinfo then we will + * not synchronize on it and so we will not print the "\n". + * A solution would be to put the TDefEOL before the "\n". + * + * todo?: could put a ExpandedTok for that ? + *) +let mark_end_define ii = + let ii' = + { Ast_c.pinfo = Ast_c.OriginTok { (Ast_c.parse_info_of_info ii) with + Common.str = ""; + Common.charpos = Ast_c.pos_of_info ii + 1 + }; + cocci_tag = ref Ast_c.emptyAnnot; + comments_tag = ref Ast_c.emptyComments; + } + in + TDefEOL (ii') + +(* put the TDefEOL at the good place *) +let rec define_line_1 acc xs = + match xs with + | [] -> List.rev acc + | TDefine ii::xs -> + let line = Ast_c.line_of_info ii in + let acc = (TDefine ii) :: acc in + define_line_2 acc line ii xs + | TCppEscapedNewline ii::xs -> + pr2 ("SUSPICIOUS: a \\ character appears outside of a #define at"); + pr2 (Ast_c.strloc_of_info ii); + let acc = (TCommentSpace ii) :: acc in + define_line_1 acc xs + | x::xs -> define_line_1 (x::acc) xs + +and define_line_2 acc line lastinfo xs = + match xs with + | [] -> + (* should not happened, should meet EOF before *) + pr2 "PB: WEIRD"; + List.rev (mark_end_define lastinfo::acc) + | x::xs -> + let line' = TH.line_of_tok x in + let info = TH.info_of_tok x in + + (match x with + | EOF ii -> + let acc = (mark_end_define lastinfo) :: acc in + let acc = (EOF ii) :: acc in + define_line_1 acc xs + | TCppEscapedNewline ii -> + if (line' <> line) then pr2 "PB: WEIRD: not same line number"; + let acc = (TCommentSpace ii) :: acc in + define_line_2 acc (line+1) info xs + | x -> + if line' =|= line + then define_line_2 (x::acc) line info xs + else define_line_1 (mark_end_define lastinfo::acc) (x::xs) + ) + +let rec define_ident acc xs = + match xs with + | [] -> List.rev acc + | TDefine ii::xs -> + let acc = TDefine ii :: acc in + (match xs with + | TCommentSpace i1::TIdent (s,i2)::TOPar (i3)::xs -> + (* Change also the kind of TIdent to avoid bad interaction + * with other parsing_hack tricks. For instant if keep TIdent then + * the stringication algo can believe the TIdent is a string-macro. + * So simpler to change the kind of the ident too. + *) + (* if TOParDefine sticked to the ident, then + * it's a macro-function. Change token to avoid ambiguity + * between #define foo(x) and #define foo (x) + *) + let acc = (TCommentSpace i1) :: acc in + let acc = (TIdentDefine (s,i2)) :: acc in + let acc = (TOParDefine i3) :: acc in + define_ident acc xs + + | TCommentSpace i1::TIdent (s,i2)::xs -> + let acc = (TCommentSpace i1) :: acc in + let acc = (TIdentDefine (s,i2)) :: acc in + define_ident acc xs + + (* bugfix: ident of macro (as well as params, cf below) can be tricky + * note, do we need to subst in the body of the define ? no cos + * here the issue is the name of the macro, as in #define inline, + * so obviously the name of this macro will not be used in its + * body (it would be a recursive macro, which is forbidden). + *) + + | TCommentSpace i1::t::xs -> + + let s = TH.str_of_tok t in + let ii = TH.info_of_tok t in + if s ==~ Common.regexp_alpha + then begin + pr2 (spf "remapping: %s to an ident in macro name" s); + let acc = (TCommentSpace i1) :: acc in + let acc = (TIdentDefine (s,ii)) :: acc in + define_ident acc xs + end + else begin + pr2 "WEIRD: weird #define body"; + define_ident acc xs + end + + | _ -> + pr2 "WEIRD: weird #define body"; + define_ident acc xs + ) + | x::xs -> + let acc = x :: acc in + define_ident acc xs + + + +let fix_tokens_define2 xs = + define_ident [] (define_line_1 [] xs) + +let fix_tokens_define a = + Common.profile_code "C parsing.fix_define" (fun () -> fix_tokens_define2 a) + + + + + +(* ------------------------------------------------------------------------- *) +(* Other parsing hacks related to cpp, Include/Define hacks *) +(* ------------------------------------------------------------------------- *) + +(* Sometimes I prefer to generate a single token for a list of things in the + * lexer so that if I have to passed them, like for passing TInclude then + * it's easy. Also if I don't do a single token, then I need to + * parse the rest which may not need special stuff, like detecting + * end of line which the parser is not really ready for. So for instance + * could I parse a #include as 2 or more tokens ? just + * lex #include ? so then need recognize as one token ? + * but this kind of token is valid only after a #include and the + * lexing and parsing rules are different for such tokens so not that + * easy to parse such things in parser_c.mly. Hence the following hacks. + * + * less?: maybe could get rid of this like I get rid of some of fix_define. + *) + +(* helpers *) + +(* used to generate new token from existing one *) +let new_info posadd str ii = + { Ast_c.pinfo = + Ast_c.OriginTok { (Ast_c.parse_info_of_info ii) with + charpos = Ast_c.pos_of_info ii + posadd; + str = str; + column = Ast_c.col_of_info ii + posadd; + }; + (* must generate a new ref each time, otherwise share *) + cocci_tag = ref Ast_c.emptyAnnot; + comments_tag = ref Ast_c.emptyComments; + } + + +let rec comment_until_defeol xs = + match xs with + | [] -> + (* job not done in Cpp_token_c.define_parse ? *) + failwith "cant find end of define token TDefEOL" + | x::xs -> + (match x with + | Parser_c.TDefEOL i -> + Parser_c.TCommentCpp (Token_c.CppDirective, TH.info_of_tok x) + ::xs + | _ -> + let x' = + (* bugfix: otherwise may lose a TComment token *) + if TH.is_real_comment x + then x + else Parser_c.TCommentCpp (Token_c.CppPassingNormal (*good?*), TH.info_of_tok x) + in + x'::comment_until_defeol xs + ) + +let drop_until_defeol xs = + List.tl + (Common.drop_until (function Parser_c.TDefEOL _ -> true | _ -> false) xs) + + + +(* ------------------------------------------------------------------------- *) +(* returns a pair (replaced token, list of next tokens) *) +(* ------------------------------------------------------------------------- *) + +let tokens_include (info, includes, filename, inifdef) = + Parser_c.TIncludeStart (Ast_c.rewrap_str includes info, inifdef), + [Parser_c.TIncludeFilename + (filename, (new_info (String.length includes) filename info)) + ] + + + + (*****************************************************************************) (* CPP handling: macros, ifdefs, macros defs *) (*****************************************************************************) @@ -685,6 +913,13 @@ let rec find_macro_paren xs = set_as_comment Token_c.CppAttr id; find_macro_paren xs + | PToken ({tok = TattributeNoarg _} as id) + ::xs + -> + pr2_cpp ("MACRO: __attributenoarg detected "); + set_as_comment Token_c.CppAttr id; + find_macro_paren xs + (* (* attribute cpp, __xxx id *) | PToken ({tok = TIdent (s,i1)} as id) @@ -1348,11 +1583,6 @@ let fix_tokens_cpp ~macro_defs a = -(*****************************************************************************) -(* for the cpp-builtin, standard.h, part 0 *) -(*****************************************************************************) - -(* now in cpp_token_c.ml *) (*****************************************************************************) (* Lexing with lookahead *) diff --git a/parsing_c/parsing_hacks.mli b/parsing_c/parsing_hacks.mli index 4689fd0..1236651 100644 --- a/parsing_c/parsing_hacks.mli +++ b/parsing_c/parsing_hacks.mli @@ -1,5 +1,3 @@ -open Common - (* This module tries to detect some cpp idioms so that we can parse as-is * files by adjusting or commenting some tokens. Parsing hack style. * Sometime we use some indentation information, @@ -50,13 +48,35 @@ val filter_cpp_stuff : val insert_virtual_positions: Parser_c.token list -> Parser_c.token list + +(* will among other things interally call cpp_token_c to macro + * expand some macros *) val fix_tokens_cpp : macro_defs:(string, Cpp_token_c.define_def) Hashtbl.t -> Parser_c.token list -> Parser_c.token list + (* next stream tokens -> passed stream tokens -> final next token *) val lookahead : pass:int -> Parser_c.token list -> Parser_c.token list -> Parser_c.token + +(* ------------------------------------------------------------------------ *) +(* Parsing hack helpers related to #define or #include *) +(* ------------------------------------------------------------------------ *) + +(* generate virtual end-of-line token, TDefEol, pass the antislash, etc *) +val fix_tokens_define : + Parser_c.token list -> Parser_c.token list + +(* called when need to pass some tokens during some error recovery *) +val drop_until_defeol: Parser_c.token list -> Parser_c.token list +val comment_until_defeol: Parser_c.token list -> Parser_c.token list + +(* generates TIncludeStart and TIncludeFilename tokens *) +val tokens_include: + Ast_c.info * string * string * bool ref -> + Parser_c.token * Parser_c.token list + diff --git a/parsing_c/parsing_recovery_c.ml b/parsing_c/parsing_recovery_c.ml new file mode 100644 index 0000000..569c502 --- /dev/null +++ b/parsing_c/parsing_recovery_c.ml @@ -0,0 +1,143 @@ +(* Yoann Padioleau + * + * Copyright (C) 2006, 2007, 2008 Ecole des Mines de Nantes + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License (GPL) + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * file license.txt for more details. + *) + +open Common + +module TH = Token_helpers + +(*****************************************************************************) +(* Wrappers *) +(*****************************************************************************) +let pr2_err, pr2_once = Common.mk_pr2_wrappers Flag_parsing_c.verbose_parsing + +(*****************************************************************************) +(* Helpers *) +(*****************************************************************************) + +let is_defined_passed_bis last_round = + let xs = last_round +> List.filter TH.is_not_comment in + match xs with + | Parser_c.TDefine _::_ -> true + | _ -> false + + +(*****************************************************************************) +(* Skipping stuff, find next "synchronisation" point *) +(*****************************************************************************) + +(* todo: do something if find Parser_c.Eof ? *) +let rec find_next_synchro ~next ~already_passed = + + (* Maybe because not enough }, because for example an ifdef contains + * in both branch some opening {, we later eat too much, "on deborde + * sur la fonction d'apres". So already_passed may be too big and + * looking for next synchro point starting from next may not be the + * best. So maybe we can find synchro point inside already_passed + * instead of looking in next. + * + * But take care! must progress. We must not stay in infinite loop! + * For instance now I have as a error recovery to look for + * a "start of something", corresponding to start of function, + * but must go beyond this start otherwise will loop. + * So look at premier(external_declaration2) in parser.output and + * pass at least those first tokens. + * + * I have chosen to start search for next synchro point after the + * first { I found, so quite sure we will not loop. *) + + let last_round = List.rev already_passed in + if is_defined_passed_bis last_round + then find_next_synchro_define (last_round ++ next) [] + else + + let (before, after) = + last_round +> Common.span (fun tok -> + match tok with + (* by looking at TOBrace we are sure that the "start of something" + * will not arrive too early + *) + | Parser_c.TOBrace _ -> false + | Parser_c.TDefine _ -> false + | _ -> true + ) + in + find_next_synchro_orig (after ++ next) (List.rev before) + + + +and find_next_synchro_define next already_passed = + match next with + | [] -> + pr2_err "ERROR-RECOV: end of file while in recovery mode"; + already_passed, [] + | (Parser_c.TDefEOL i as v)::xs -> + pr2_err ("ERROR-RECOV: found sync end of #define, line "^i_to_s(TH.line_of_tok v)); + v::already_passed, xs + | v::xs -> + find_next_synchro_define xs (v::already_passed) + + + + +and find_next_synchro_orig next already_passed = + match next with + | [] -> + pr2_err "ERROR-RECOV: end of file while in recovery mode"; + already_passed, [] + + | (Parser_c.TCBrace i as v)::xs when TH.col_of_tok v =|= 0 -> + pr2_err ("ERROR-RECOV: found sync '}' at line "^i_to_s (TH.line_of_tok v)); + + (match xs with + | [] -> raise Impossible (* there is a EOF token normally *) + + (* still useful: now parser.mly allow empty ';' so normally no pb *) + | Parser_c.TPtVirg iptvirg::xs -> + pr2_err "ERROR-RECOV: found sync bis, eating } and ;"; + (Parser_c.TPtVirg iptvirg)::v::already_passed, xs + + | Parser_c.TIdent x::Parser_c.TPtVirg iptvirg::xs -> + pr2_err "ERROR-RECOV: found sync bis, eating ident, }, and ;"; + (Parser_c.TPtVirg iptvirg)::(Parser_c.TIdent x)::v::already_passed, + xs + + | Parser_c.TCommentSpace sp::Parser_c.TIdent x::Parser_c.TPtVirg iptvirg + ::xs -> + pr2_err "ERROR-RECOV: found sync bis, eating ident, }, and ;"; + (Parser_c.TCommentSpace sp):: + (Parser_c.TPtVirg iptvirg):: + (Parser_c.TIdent x):: + v:: + already_passed, + xs + + | Parser_c.TCommentNewline sp::Parser_c.TIdent x::Parser_c.TPtVirg iptvirg + ::xs -> + pr2_err "ERROR-RECOV: found sync bis, eating ident, }, and ;"; + (Parser_c.TCommentNewline sp):: + (Parser_c.TPtVirg iptvirg):: + (Parser_c.TIdent x):: + v:: + already_passed, + xs + + | _ -> + v::already_passed, xs + ) + | v::xs when TH.col_of_tok v =|= 0 && TH.is_start_of_something v -> + pr2_err ("ERROR-RECOV: found sync col 0 at line "^ i_to_s(TH.line_of_tok v)); + already_passed, v::xs + + | v::xs -> + find_next_synchro_orig xs (v::already_passed) diff --git a/parsing_c/parsing_recovery_c.mli b/parsing_c/parsing_recovery_c.mli new file mode 100644 index 0000000..140410c --- /dev/null +++ b/parsing_c/parsing_recovery_c.mli @@ -0,0 +1,4 @@ +val find_next_synchro: + next:Parser_c.token list -> + already_passed:Parser_c.token list -> + Parser_c.token list * Parser_c.token list diff --git a/parsing_c/pretty_print_c.ml b/parsing_c/pretty_print_c.ml index 560240d..b277f65 100644 --- a/parsing_c/pretty_print_c.ml +++ b/parsing_c/pretty_print_c.ml @@ -13,51 +13,41 @@ *) open Common - open Ast_c +module F = Control_flow_c + (*****************************************************************************) (* Wrappers *) (*****************************************************************************) let pr2, pr2_once = Common.mk_pr2_wrappers Flag_parsing_c.verbose_unparsing +(*****************************************************************************) +(* Types *) (*****************************************************************************) -type pr_elem_func = Ast_c.info -> unit -type pr_space_func = unit -> unit -type pr_nl_func = unit -> unit -type pr_indent_func = unit -> unit -type pr_outdent_func = unit -> unit -type pr_unindent_func = unit -> unit - -type expression_printer = Ast_c.expression -> unit -type arg_list_printer = Ast_c.argument Ast_c.wrap2 list -> unit -type statement_printer = Ast_c.statement -> unit -type declaration_printer = Ast_c.declaration -> unit -type initialiser_printer = Ast_c.initialiser -> unit -type param_printer = Ast_c.parameterType -> unit -type type_printer = Ast_c.fullType -> unit -type type_with_ident_printer = +type type_with_ident = (string * Ast_c.info) option -> - (Ast_c.storage * Ast_c.il) option -> Ast_c.fullType -> - Ast_c.attribute list -> unit -type toplevel_printer = Ast_c.toplevel -> unit -type flow_printer = Control_flow_c.node -> unit + (Ast_c.storage * Ast_c.il) option -> + Ast_c.fullType -> + Ast_c.attribute list -> unit + +type 'a printer = 'a -> unit + +type pretty_printers = { + expression : Ast_c.expression printer; + arg_list : (Ast_c.argument Ast_c.wrap2 list) printer; + statement : Ast_c.statement printer; + decl : Ast_c.declaration printer; + init : Ast_c.initialiser printer; + param : Ast_c.parameterType printer; + ty : Ast_c.fullType printer; + type_with_ident : type_with_ident; + toplevel : Ast_c.toplevel printer; + flow : Control_flow_c.node printer +} -(* result type *) -type pretty_printers = - {expression : expression_printer; - arg_list : arg_list_printer; - statement : statement_printer; - decl : declaration_printer; - init : initialiser_printer; - param : param_printer; - ty : type_printer; - type_with_ident : type_with_ident_printer; - toplevel : toplevel_printer; - flow : flow_printer} -module F = Control_flow_c (*****************************************************************************) @@ -70,7 +60,10 @@ module F = Control_flow_c * to pretty print some piece of C that was generated, or some * abstract-lined piece of code, etc. *) -let pretty_print_c pr_elem pr_space pr_nl pr_indent pr_outdent pr_unindent = +let mk_pretty_printers + ~pr_elem ~pr_space + ~pr_nl ~pr_indent ~pr_outdent ~pr_unindent + = let start_block () = pr_nl(); pr_indent() in let end_block () = pr_unindent(); pr_nl() in @@ -81,6 +74,9 @@ let pretty_print_c pr_elem pr_space pr_nl pr_indent pr_outdent pr_unindent = (*no newline at the end - someone else will do that*) start_block(); f(); pr_unindent() in + + + let rec pp_expression = fun ((exp, typ), ii) -> (match exp, ii with | Ident (ident), [] -> pp_name ident @@ -1276,7 +1272,7 @@ and pp_init (init, iinit) = pr2 "YYY" in - {expression = pp_expression; + { expression = pp_expression; arg_list = pp_arg_list; statement = pp_statement; decl = pp_decl; @@ -1285,7 +1281,8 @@ and pp_init (init, iinit) = ty = pp_type; type_with_ident = pp_type_with_ident; toplevel = pp_toplevel; - flow = pp_flow} + flow = pp_flow; + } (*****************************************************************************) @@ -1312,9 +1309,11 @@ let pr_indent _ = () let pr_outdent _ = () let pr_unindent _ = () + let ppc = - pretty_print_c pr_elem pr_space pr_nl pr_outdent pr_indent pr_unindent - + mk_pretty_printers + ~pr_elem ~pr_space ~pr_nl ~pr_outdent ~pr_indent ~pr_unindent + let pp_expression_simple = ppc.expression let pp_statement_simple = ppc.statement let pp_type_simple = ppc.ty @@ -1322,47 +1321,49 @@ let pp_init_simple = ppc.init let pp_toplevel_simple = ppc.toplevel let pp_flow_simple = ppc.flow -let pp_elem_sp pr_elem pr_space = - pretty_print_c pr_elem pr_space pr_nl pr_outdent pr_indent pr_unindent -let pp_expression_gen pr_elem pr_space = +let pp_elem_sp ~pr_elem ~pr_space = + mk_pretty_printers + ~pr_elem ~pr_space + ~pr_nl ~pr_outdent ~pr_indent ~pr_unindent + +let pp_expression_gen ~pr_elem ~pr_space = (pp_elem_sp pr_elem pr_space).expression let pp_arg_list_gen pr_elem pr_space = (pp_elem_sp pr_elem pr_space).arg_list -let pp_statement_gen pr_elem pr_space = +let pp_statement_gen ~pr_elem ~pr_space = (pp_elem_sp pr_elem pr_space).statement let pp_decl_gen pr_elem pr_space = (pp_elem_sp pr_elem pr_space).decl -let pp_init_gen pr_elem pr_space = +let pp_init_gen ~pr_elem ~pr_space = (pp_elem_sp pr_elem pr_space).init -let pp_param_gen pr_elem pr_space = +let pp_param_gen ~pr_elem ~pr_space = (pp_elem_sp pr_elem pr_space).param -let pp_type_gen pr_elem pr_space = +let pp_type_gen ~pr_elem ~pr_space = (pp_elem_sp pr_elem pr_space).ty let pp_type_with_ident_gen pr_elem pr_space = (pp_elem_sp pr_elem pr_space).type_with_ident -let pp_program_gen pr_elem pr_space = +let pp_program_gen ~pr_elem ~pr_space = (pp_elem_sp pr_elem pr_space).toplevel - let string_of_expression e = Common.format_to_string (fun () -> pp_expression_simple e - ) + ) let string_of_toplevel top = Common.format_to_string (fun () -> pp_toplevel_simple top - ) + ) let (debug_info_of_node: Ograph_extended.nodei -> Control_flow_c.cflow -> string) = diff --git a/parsing_c/pretty_print_c.mli b/parsing_c/pretty_print_c.mli dissimilarity index 94% index d6273a8..b850dd1 100644 --- a/parsing_c/pretty_print_c.mli +++ b/parsing_c/pretty_print_c.mli @@ -1,65 +1,57 @@ - -type pr_elem_func = Ast_c.info -> unit -type pr_space_func = unit -> unit -type pr_nl_func = unit -> unit -type pr_indent_func = unit -> unit -type pr_outdent_func = unit -> unit -type pr_unindent_func = unit -> unit - -type expression_printer = Ast_c.expression -> unit -type arg_list_printer = Ast_c.argument Ast_c.wrap2 list -> unit -type statement_printer = Ast_c.statement -> unit -type declaration_printer = Ast_c.declaration -> unit -type initialiser_printer = Ast_c.initialiser -> unit -type param_printer = Ast_c.parameterType -> unit -type type_printer = Ast_c.fullType -> unit -type type_with_ident_printer = - (string * Ast_c.info) option -> - (Ast_c.storage * Ast_c.il) option -> Ast_c.fullType -> - Ast_c.attribute list -> unit -type toplevel_printer = Ast_c.toplevel -> unit -type flow_printer = Control_flow_c.node -> unit - -type pretty_printers = - {expression : expression_printer; - arg_list : arg_list_printer; - statement : statement_printer; - decl : declaration_printer; - init : initialiser_printer; - param : param_printer; - ty : type_printer; - type_with_ident : type_with_ident_printer; - toplevel : toplevel_printer; - flow : flow_printer} - -val pretty_print_c : - pr_elem_func -> pr_space_func -> pr_nl_func -> pr_indent_func -> - pr_outdent_func -> pr_unindent_func -> pretty_printers - - -val pp_expression_gen : pr_elem_func -> pr_space_func -> expression_printer -val pp_arg_list_gen : pr_elem_func -> pr_space_func -> arg_list_printer -val pp_statement_gen : pr_elem_func -> pr_space_func -> statement_printer -val pp_decl_gen : pr_elem_func -> pr_space_func -> declaration_printer -val pp_init_gen : pr_elem_func -> pr_space_func -> initialiser_printer -val pp_param_gen : pr_elem_func -> pr_space_func -> param_printer - -val pp_type_gen : pr_elem_func -> pr_space_func -> type_printer -val pp_type_with_ident_gen : - pr_elem_func -> pr_space_func -> type_with_ident_printer - -val pp_program_gen : pr_elem_func -> pr_space_func -> toplevel_printer - - -val pp_expression_simple : expression_printer -val pp_statement_simple : statement_printer -val pp_type_simple : type_printer -val pp_init_simple : initialiser_printer -val pp_toplevel_simple : toplevel_printer -val pp_flow_simple: flow_printer - - -val debug_info_of_node: Ograph_extended.nodei -> Control_flow_c.cflow -> string - -val string_of_expression: Ast_c.expression -> string -val string_of_toplevel: Ast_c.toplevel -> string +type type_with_ident = + (string * Ast_c.info) option -> + (Ast_c.storage * Ast_c.il) option -> + Ast_c.fullType -> + Ast_c.attribute list -> unit + +type 'a printer = 'a -> unit + +type pretty_printers = { + expression : Ast_c.expression printer; + arg_list : (Ast_c.argument Ast_c.wrap2 list) printer; + statement : Ast_c.statement printer; + decl : Ast_c.declaration printer; + init : Ast_c.initialiser printer; + param : Ast_c.parameterType printer; + ty : Ast_c.fullType printer; + type_with_ident : type_with_ident; + toplevel : Ast_c.toplevel printer; + flow : Control_flow_c.node printer +} + +val mk_pretty_printers : + pr_elem:Ast_c.info printer -> + pr_space:unit printer -> + pr_nl: unit printer -> + pr_indent: unit printer -> + pr_outdent: unit printer -> + pr_unindent: unit printer -> + pretty_printers + +(* used in pycocci mostly *) +val pp_expression_gen: pr_elem:Ast_c.info printer -> pr_space: unit printer -> + Ast_c.expression printer +val pp_statement_gen: pr_elem:Ast_c.info printer -> pr_space: unit printer -> + Ast_c.statement printer +val pp_param_gen: pr_elem:Ast_c.info printer -> pr_space: unit printer -> + Ast_c.parameterType printer +val pp_type_gen: pr_elem:Ast_c.info printer -> pr_space:unit printer -> + Ast_c.fullType printer +val pp_init_gen: pr_elem:Ast_c.info printer -> pr_space:unit printer -> + Ast_c.initialiser printer +val pp_program_gen : pr_elem:Ast_c.info printer -> pr_space:unit printer -> + Ast_c.toplevel printer + + +(* used in pretty_print_engine.ml mostly *) +val pp_expression_simple: Ast_c.expression printer +val pp_init_simple: Ast_c.initialiser printer +val pp_type_simple: Ast_c.fullType printer +val pp_statement_simple: Ast_c.statement printer +val pp_toplevel_simple: Ast_c.toplevel printer + +val debug_info_of_node: + Ograph_extended.nodei -> Control_flow_c.cflow -> string + +val string_of_expression: Ast_c.expression -> string +val string_of_toplevel: Ast_c.toplevel -> string diff --git a/parsing_c/sexp_ast_c.ml b/parsing_c/sexp_ast_c.ml new file mode 100644 index 0000000..4c6f2aa --- /dev/null +++ b/parsing_c/sexp_ast_c.ml @@ -0,0 +1,4023 @@ +(* generated by ocamltarzan with: camlp4o -o /tmp/yyy.ml -I pa/ pa_type_conv.cmo pa_sexp_conv.cmo pr_o.cmo /tmp/xxx.ml *) +open Ast_c + +(* +let sexp_of_program x = + raise (Common.Todo) +*) + +(* pad addons: *) +module Common = Sexp_common +module Ast_cocci = struct +let mcodekind_of_sexp x = failwith "todo" +let sexp_of_mcodekind x = failwith "todo" +let fixpos_of_sexp x = failwith "todo" +let sexp_of_fixpos x = failwith "todo" +end +module Token_c = struct +let comment_like_token_of_sexp x = failwith "todo" +let sexp_of_comment_like_token x = failwith "todo" +end +(* cf also the failwith and comment I have added in this file + (C-s failwith et C-s ( * ) + mainly to break the mutually recursive, for the cocci_tag and + metavars_binding stuff. I also moved some function up + outside the big 'rec .. and .. and .. and', especially the wrap_of_sexp + by transforming some 'and xxx' in 'let xxx'. +*) + +let show_info = ref false +let show_qualifier = ref false +let show_expr_info = ref true + + + +let posl_of_sexp__ = + let _loc = "Xxx.posl" + in + function + | Sexp.List ([ v1; v2 ]) -> + let v1 = Conv.int_of_sexp v1 and v2 = Conv.int_of_sexp v2 in (v1, v2) + | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp + +let posl_of_sexp sexp = + try posl_of_sexp__ sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp + +let sexp_of_posl (v1, v2) = + let v1 = Conv.sexp_of_int v1 + and v2 = Conv.sexp_of_int v2 + in Sexp.List [ v1; v2 ] + +let virtual_position_of_sexp__ = + let _loc = "Xxx.virtual_position" + in + function + | Sexp.List ([ v1; v2 ]) -> + let v1 = Common.parse_info_of_sexp v1 + and v2 = Conv.int_of_sexp v2 + in (v1, v2) + | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp + +let virtual_position_of_sexp sexp = + try virtual_position_of_sexp__ sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp + +let sexp_of_virtual_position (v1, v2) = + let v1 = Common.sexp_of_parse_info v1 + and v2 = Conv.sexp_of_int v2 + in Sexp.List [ v1; v2 ] + +let parse_info_of_sexp__ = + let _loc = "Xxx.parse_info" + in + function + | (Sexp.List + (Sexp.Atom (("originTok" | "OriginTok" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = Common.parse_info_of_sexp v1 in OriginTok v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("fakeTok" | "FakeTok" as tag)) :: sexp_args) as + sexp) -> + (match sexp_args with + | [ v1; v2 ] -> + let v1 = Conv.string_of_sexp v1 + and v2 = virtual_position_of_sexp v2 + in FakeTok ((v1, v2)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("expandedTok" | "ExpandedTok" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1; v2 ] -> + let v1 = Common.parse_info_of_sexp v1 + and v2 = virtual_position_of_sexp v2 + in ExpandedTok ((v1, v2)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("abstractLineTok" | "AbstractLineTok" as tag)) :: + sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> + let v1 = Common.parse_info_of_sexp v1 in AbstractLineTok v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.Atom ("originTok" | "OriginTok") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("fakeTok" | "FakeTok") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("expandedTok" | "ExpandedTok") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("abstractLineTok" | "AbstractLineTok") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp + +let parse_info_of_sexp sexp = parse_info_of_sexp__ sexp + +let sexp_of_parse_info = + function + | OriginTok v1 -> + let v1 = Common.sexp_of_parse_info v1 + in Sexp.List [ Sexp.Atom "OriginTok"; v1 ] + | FakeTok ((v1, v2)) -> + let v1 = Conv.sexp_of_string v1 + and v2 = sexp_of_virtual_position v2 + in Sexp.List [ Sexp.Atom "FakeTok"; v1; v2 ] + | ExpandedTok ((v1, v2)) -> + let v1 = Common.sexp_of_parse_info v1 + and v2 = sexp_of_virtual_position v2 + in Sexp.List [ Sexp.Atom "ExpandedTok"; v1; v2 ] + | AbstractLineTok v1 -> + let v1 = Common.sexp_of_parse_info v1 + in Sexp.List [ Sexp.Atom "AbstractLineTok"; v1 ] + +let rec info_of_sexp__ = + let _loc = "Xxx.info" + in + function + | (Sexp.List field_sexps as sexp) -> + let pinfo_field = ref None and cocci_tag_field = ref None + and comments_tag_field = ref None and duplicates = ref [] + and extra = ref [] in + let rec iter = + (function + | Sexp.List ([ Sexp.Atom field_name; field_sexp ]) :: tail -> + ((match field_name with + | "pinfo" -> + (match !pinfo_field with + | None -> + let fvalue = parse_info_of_sexp field_sexp + in pinfo_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | "cocci_tag" -> + (match !cocci_tag_field with + | None -> + let fvalue = + Conv.ref_of_sexp + (Conv.option_of_sexp + (function + | Sexp.List ([ v1; v2 ]) -> + let v1 = Ast_cocci.mcodekind_of_sexp v1 + and v2 = + (*metavars_binding_of_sexp v2*) + failwith "todo" + in (v1, v2) + | sexp -> + Conv_error.tuple_of_size_n_expected + _loc 2 sexp)) + field_sexp + in cocci_tag_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | "comments_tag" -> + (match !comments_tag_field with + | None -> + let fvalue = + Conv.ref_of_sexp comments_around_of_sexp + field_sexp + in comments_tag_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | _ -> + if !Conv.record_check_extra_fields + then extra := field_name :: !extra + else ()); + iter tail) + | sexp :: _ -> Conv_error.record_only_pairs_expected _loc sexp + | [] -> ()) + in + (iter field_sexps; + if !duplicates <> [] + then Conv_error.record_duplicate_fields _loc !duplicates sexp + else + if !extra <> [] + then Conv_error.record_extra_fields _loc !extra sexp + else + (match ((!pinfo_field), (!cocci_tag_field), + (!comments_tag_field)) + with + | (Some pinfo_value, Some cocci_tag_value, + Some comments_tag_value) -> + { + pinfo = pinfo_value; + cocci_tag = cocci_tag_value; + comments_tag = comments_tag_value; + } + | _ -> + Conv_error.record_undefined_elements _loc sexp + [ ((!pinfo_field = None), "pinfo"); + ((!cocci_tag_field = None), "cocci_tag"); + ((!comments_tag_field = None), "comments_tag") ])) + | (Sexp.Atom _ as sexp) -> Conv_error.record_list_instead_atom _loc sexp +and info_of_sexp sexp = info_of_sexp__ sexp +and il_of_sexp__ = + let _loc = "Xxx.il" in fun sexp -> Conv.list_of_sexp info_of_sexp sexp +and il_of_sexp sexp = + try il_of_sexp__ sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp +and wrap_of_sexp__ = + let _loc = "Xxx.wrap" + in + fun _of_a -> + function + | Sexp.List ([ v1; v2 ]) -> + let v1 = _of_a v1 and v2 = il_of_sexp v2 in (v1, v2) + | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp +and wrap_of_sexp _of_a sexp = + try wrap_of_sexp__ _of_a sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp +and wrap2_of_sexp__ = + let _loc = "Xxx.wrap2" + in + fun _of_a -> + function + | Sexp.List ([ v1; v2 ]) -> + let v1 = _of_a v1 and v2 = il_of_sexp v2 in (v1, v2) + | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp +and wrap2_of_sexp _of_a sexp = + try wrap2_of_sexp__ _of_a sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp + +(* moved up *) +and comments_around_of_sexp__ = + let _loc = "Xxx.comments_around" + in + function + | (Sexp.List field_sexps as sexp) -> + let mbefore_field = ref None and mafter_field = ref None + and mbefore2_field = ref None and mafter2_field = ref None + and duplicates = ref [] and extra = ref [] in + let rec iter = + (function + | Sexp.List ([ Sexp.Atom field_name; field_sexp ]) :: tail -> + ((match field_name with + | "mbefore" -> + (match !mbefore_field with + | None -> + let fvalue = + Conv.list_of_sexp Token_c. + comment_like_token_of_sexp field_sexp + in mbefore_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | "mafter" -> + (match !mafter_field with + | None -> + let fvalue = + Conv.list_of_sexp Token_c. + comment_like_token_of_sexp field_sexp + in mafter_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | "mbefore2" -> + (match !mbefore2_field with + | None -> + let fvalue = + Conv.list_of_sexp + comment_and_relative_pos_of_sexp field_sexp + in mbefore2_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | "mafter2" -> + (match !mafter2_field with + | None -> + let fvalue = + Conv.list_of_sexp + comment_and_relative_pos_of_sexp field_sexp + in mafter2_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | _ -> + if !Conv.record_check_extra_fields + then extra := field_name :: !extra + else ()); + iter tail) + | sexp :: _ -> Conv_error.record_only_pairs_expected _loc sexp + | [] -> ()) + in + (iter field_sexps; + if !duplicates <> [] + then Conv_error.record_duplicate_fields _loc !duplicates sexp + else + if !extra <> [] + then Conv_error.record_extra_fields _loc !extra sexp + else + (match ((!mbefore_field), (!mafter_field), (!mbefore2_field), + (!mafter2_field)) + with + | (Some mbefore_value, Some mafter_value, + Some mbefore2_value, Some mafter2_value) -> + { + mbefore = mbefore_value; + mafter = mafter_value; + mbefore2 = mbefore2_value; + mafter2 = mafter2_value; + } + | _ -> + Conv_error.record_undefined_elements _loc sexp + [ ((!mbefore_field = None), "mbefore"); + ((!mafter_field = None), "mafter"); + ((!mbefore2_field = None), "mbefore2"); + ((!mafter2_field = None), "mafter2") ])) + | (Sexp.Atom _ as sexp) -> Conv_error.record_list_instead_atom _loc sexp +and comments_around_of_sexp sexp = comments_around_of_sexp__ sexp +and comment_and_relative_pos_of_sexp__ = + let _loc = "Xxx.comment_and_relative_pos" + in + function + | (Sexp.List field_sexps as sexp) -> + let minfo_field = ref None and mpos_field = ref None + and duplicates = ref [] and extra = ref [] in + let rec iter = + (function + | Sexp.List ([ Sexp.Atom field_name; field_sexp ]) :: tail -> + ((match field_name with + | "minfo" -> + (match !minfo_field with + | None -> + let fvalue = Common.parse_info_of_sexp field_sexp + in minfo_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | "mpos" -> + (match !mpos_field with + | None -> + let fvalue = Conv.int_of_sexp field_sexp + in mpos_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | _ -> + if !Conv.record_check_extra_fields + then extra := field_name :: !extra + else ()); + iter tail) + | sexp :: _ -> Conv_error.record_only_pairs_expected _loc sexp + | [] -> ()) + in + (iter field_sexps; + if !duplicates <> [] + then Conv_error.record_duplicate_fields _loc !duplicates sexp + else + if !extra <> [] + then Conv_error.record_extra_fields _loc !extra sexp + else + (match ((!minfo_field), (!mpos_field)) with + | (Some minfo_value, Some mpos_value) -> + { minfo = minfo_value; mpos = mpos_value; } + | _ -> + Conv_error.record_undefined_elements _loc sexp + [ ((!minfo_field = None), "minfo"); + ((!mpos_field = None), "mpos") ])) + | (Sexp.Atom _ as sexp) -> Conv_error.record_list_instead_atom _loc sexp +and comment_and_relative_pos_of_sexp sexp = + comment_and_relative_pos_of_sexp__ sexp +and comment_of_sexp__ = + let _loc = "Xxx.comment" in fun sexp -> Common.parse_info_of_sexp sexp +and comment_of_sexp sexp = + try comment_of_sexp__ sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp +and com_of_sexp__ = + let _loc = "Xxx.com" + in fun sexp -> Conv.ref_of_sexp (Conv.list_of_sexp comment_of_sexp) sexp +and com_of_sexp sexp = + try com_of_sexp__ sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp + + + + + + + +(* break let rec ... and with the previous info *) +let rec name_of_sexp__ = + let _loc = "Xxx.name" + in + function + | (Sexp.List + (Sexp.Atom (("regularName" | "RegularName" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> + let v1 = wrap_of_sexp Conv.string_of_sexp v1 in RegularName v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("cppConcatenatedName" | "CppConcatenatedName" as tag)) :: + sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> + let v1 = + Conv.list_of_sexp + (wrap2_of_sexp (wrap_of_sexp Conv.string_of_sexp)) v1 + in CppConcatenatedName v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("cppVariadicName" | "CppVariadicName" as tag)) :: + sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> + let v1 = wrap_of_sexp Conv.string_of_sexp v1 + in CppVariadicName v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("cppIdentBuilder" | "CppIdentBuilder" as tag)) :: + sexp_args) + as sexp) -> + (match sexp_args with + | [ v1; v2 ] -> + let v1 = wrap_of_sexp Conv.string_of_sexp v1 + and v2 = + Conv.list_of_sexp + (wrap2_of_sexp (wrap_of_sexp Conv.string_of_sexp)) v2 + in CppIdentBuilder ((v1, v2)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.Atom ("regularName" | "RegularName") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("cppConcatenatedName" | "CppConcatenatedName") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("cppVariadicName" | "CppVariadicName") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("cppIdentBuilder" | "CppIdentBuilder") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and name_of_sexp sexp = name_of_sexp__ sexp +and fullType_of_sexp__ = + let _loc = "Xxx.fullType" + in + function + | Sexp.List ([ v1; v2 ]) -> + let v1 = typeQualifier_of_sexp v1 + and v2 = typeC_of_sexp v2 + in (v1, v2) + | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp +and fullType_of_sexp sexp = + try fullType_of_sexp__ sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp +and typeC_of_sexp__ = + let _loc = "Xxx.typeC" in fun sexp -> wrap_of_sexp typeCbis_of_sexp sexp +and typeC_of_sexp sexp = + try typeC_of_sexp__ sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp +and typeCbis_of_sexp__ = + let _loc = "Xxx.typeCbis" + in + function + | (Sexp.List (Sexp.Atom (("baseType" | "BaseType" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = baseType_of_sexp v1 in BaseType v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("pointer" | "Pointer" as tag)) :: sexp_args) as + sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = fullType_of_sexp v1 in Pointer v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("array" | "Array" as tag)) :: sexp_args) as + sexp) -> + (match sexp_args with + | [ v1; v2 ] -> + let v1 = Conv.option_of_sexp constExpression_of_sexp v1 + and v2 = fullType_of_sexp v2 + in Array ((v1, v2)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("functionType" | "FunctionType" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = functionType_of_sexp v1 in FunctionType v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("enum" | "Enum" as tag)) :: sexp_args) as sexp) + -> + (match sexp_args with + | [ v1; v2 ] -> + let v1 = Conv.option_of_sexp Conv.string_of_sexp v1 + and v2 = enumType_of_sexp v2 + in Enum ((v1, v2)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("structUnion" | "StructUnion" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1; v2; v3 ] -> + let v1 = structUnion_of_sexp v1 + and v2 = Conv.option_of_sexp Conv.string_of_sexp v2 + and v3 = structType_of_sexp v3 + in StructUnion ((v1, v2, v3)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("enumName" | "EnumName" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = Conv.string_of_sexp v1 in EnumName v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("structUnionName" | "StructUnionName" as tag)) :: + sexp_args) + as sexp) -> + (match sexp_args with + | [ v1; v2 ] -> + let v1 = structUnion_of_sexp v1 + and v2 = Conv.string_of_sexp v2 + in StructUnionName ((v1, v2)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("typeName" | "TypeName" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1; v2 ] -> + let v1 = name_of_sexp v1 + and v2 = Conv.option_of_sexp fullType_of_sexp v2 + in TypeName ((v1, v2)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("parenType" | "ParenType" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = fullType_of_sexp v1 in ParenType v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("typeOfExpr" | "TypeOfExpr" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = expression_of_sexp v1 in TypeOfExpr v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("typeOfType" | "TypeOfType" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = fullType_of_sexp v1 in TypeOfType v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.Atom ("baseType" | "BaseType") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("pointer" | "Pointer") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("array" | "Array") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("functionType" | "FunctionType") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("enum" | "Enum") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("structUnion" | "StructUnion") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("enumName" | "EnumName") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("structUnionName" | "StructUnionName") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("typeName" | "TypeName") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("parenType" | "ParenType") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("typeOfExpr" | "TypeOfExpr") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("typeOfType" | "TypeOfType") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and typeCbis_of_sexp sexp = typeCbis_of_sexp__ sexp +and baseType_of_sexp__ = + let _loc = "Xxx.baseType" + in + function + | Sexp.Atom ("void" | "Void") -> Void + | (Sexp.List (Sexp.Atom (("intType" | "IntType" as tag)) :: sexp_args) as + sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = intType_of_sexp v1 in IntType v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("floatType" | "FloatType" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = floatType_of_sexp v1 in FloatType v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom ("void" | "Void") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.Atom ("intType" | "IntType") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("floatType" | "FloatType") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and baseType_of_sexp sexp = baseType_of_sexp__ sexp +and intType_of_sexp__ = + let _loc = "Xxx.intType" + in + function + | Sexp.Atom ("cChar" | "CChar") -> CChar + | (Sexp.List (Sexp.Atom (("si" | "Si" as tag)) :: sexp_args) as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = signed_of_sexp v1 in Si v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom ("cChar" | "CChar") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.Atom ("si" | "Si") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and intType_of_sexp sexp = intType_of_sexp__ sexp +and signed_of_sexp__ = + let _loc = "Xxx.signed" + in + function + | Sexp.List ([ v1; v2 ]) -> + let v1 = sign_of_sexp v1 and v2 = base_of_sexp v2 in (v1, v2) + | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp +and signed_of_sexp sexp = + try signed_of_sexp__ sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp +and base_of_sexp__ = + let _loc = "Xxx.base" + in + function + | Sexp.Atom ("cChar2" | "CChar2") -> CChar2 + | Sexp.Atom ("cShort" | "CShort") -> CShort + | Sexp.Atom ("cInt" | "CInt") -> CInt + | Sexp.Atom ("cLong" | "CLong") -> CLong + | Sexp.Atom ("cLongLong" | "CLongLong") -> CLongLong + | (Sexp.List (Sexp.Atom ("cChar2" | "CChar2") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("cShort" | "CShort") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("cInt" | "CInt") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("cLong" | "CLong") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("cLongLong" | "CLongLong") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and base_of_sexp sexp = base_of_sexp__ sexp +and sign_of_sexp__ = + let _loc = "Xxx.sign" + in + function + | Sexp.Atom ("signed" | "Signed") -> Signed + | Sexp.Atom ("unSigned" | "UnSigned") -> UnSigned + | (Sexp.List (Sexp.Atom ("signed" | "Signed") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("unSigned" | "UnSigned") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and sign_of_sexp sexp = sign_of_sexp__ sexp +and floatType_of_sexp__ = + let _loc = "Xxx.floatType" + in + function + | Sexp.Atom ("cFloat" | "CFloat") -> CFloat + | Sexp.Atom ("cDouble" | "CDouble") -> CDouble + | Sexp.Atom ("cLongDouble" | "CLongDouble") -> CLongDouble + | (Sexp.List (Sexp.Atom ("cFloat" | "CFloat") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("cDouble" | "CDouble") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("cLongDouble" | "CLongDouble") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and floatType_of_sexp sexp = floatType_of_sexp__ sexp +and structUnion_of_sexp__ = + let _loc = "Xxx.structUnion" + in + function + | Sexp.Atom ("struct" | "Struct") -> Struct + | Sexp.Atom ("union" | "Union") -> Union + | (Sexp.List (Sexp.Atom ("struct" | "Struct") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("union" | "Union") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and structUnion_of_sexp sexp = structUnion_of_sexp__ sexp +and structType_of_sexp__ = + let _loc = "Xxx.structType" + in fun sexp -> Conv.list_of_sexp field_of_sexp sexp +and structType_of_sexp sexp = + try structType_of_sexp__ sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp +and field_of_sexp__ = + let _loc = "Xxx.field" + in + function + | (Sexp.List + (Sexp.Atom (("declarationField" | "DeclarationField" as tag)) :: + sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> + let v1 = field_declaration_of_sexp v1 in DeclarationField v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("emptyField" | "EmptyField" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = info_of_sexp v1 in EmptyField v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("macroDeclField" | "MacroDeclField" as tag)) :: + sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> + let v1 = + wrap_of_sexp + (function + | Sexp.List ([ v1; v2 ]) -> + let v1 = Conv.string_of_sexp v1 + and v2 = + Conv.list_of_sexp (wrap2_of_sexp argument_of_sexp) v2 + in (v1, v2) + | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp) + v1 + in MacroDeclField v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("cppDirectiveStruct" | "CppDirectiveStruct" as tag)) :: + sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> + let v1 = cpp_directive_of_sexp v1 in CppDirectiveStruct v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("ifdefStruct" | "IfdefStruct" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = ifdef_directive_of_sexp v1 in IfdefStruct v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.Atom ("declarationField" | "DeclarationField") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("emptyField" | "EmptyField") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("macroDeclField" | "MacroDeclField") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("cppDirectiveStruct" | "CppDirectiveStruct") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("ifdefStruct" | "IfdefStruct") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and field_of_sexp sexp = field_of_sexp__ sexp +and field_declaration_of_sexp__ = + let _loc = "Xxx.field_declaration" + in + function + | (Sexp.List + (Sexp.Atom (("fieldDeclList" | "FieldDeclList" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> + let v1 = + wrap_of_sexp + (Conv.list_of_sexp (wrap2_of_sexp fieldkind_of_sexp)) v1 + in FieldDeclList v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.Atom ("fieldDeclList" | "FieldDeclList") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and field_declaration_of_sexp sexp = field_declaration_of_sexp__ sexp +and fieldkind_of_sexp__ = + let _loc = "Xxx.fieldkind" + in + function + | (Sexp.List (Sexp.Atom (("simple" | "Simple" as tag)) :: sexp_args) as + sexp) -> + (match sexp_args with + | [ v1; v2 ] -> + let v1 = Conv.option_of_sexp name_of_sexp v1 + and v2 = fullType_of_sexp v2 + in Simple ((v1, v2)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("bitField" | "BitField" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1; v2; v3; v4 ] -> + let v1 = Conv.option_of_sexp name_of_sexp v1 + and v2 = fullType_of_sexp v2 + and v3 = info_of_sexp v3 + and v4 = constExpression_of_sexp v4 + in BitField ((v1, v2, v3, v4)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.Atom ("simple" | "Simple") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("bitField" | "BitField") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and fieldkind_of_sexp sexp = fieldkind_of_sexp__ sexp + +and enumType_of_sexp__ = + let _loc = "Xxx.enumType" + in + fun sexp -> + Conv.list_of_sexp + (wrap2_of_sexp + (function + | Sexp.List ([ v1; v2 ]) -> + let v1 = name_of_sexp v1 + and v2 = + Conv.option_of_sexp + (function + | Sexp.List ([ v1; v2 ]) -> + let v1 = info_of_sexp v1 + and v2 = constExpression_of_sexp v2 + in (v1, v2) + | sexp -> + Conv_error.tuple_of_size_n_expected _loc 2 sexp) + v2 + in (v1, v2) + | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp)) + sexp +and enumType_of_sexp sexp = + try enumType_of_sexp__ sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp +and functionType_of_sexp__ = + let _loc = "Xxx.functionType" + in + function + | Sexp.List ([ v1; v2 ]) -> + let v1 = fullType_of_sexp v1 + and v2 = + (match v2 with + | Sexp.List ([ v1; v2 ]) -> + let v1 = + Conv.list_of_sexp (wrap2_of_sexp parameterType_of_sexp) v1 + and v2 = wrap_of_sexp Conv.bool_of_sexp v2 + in (v1, v2) + | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp) + in (v1, v2) + | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp +and functionType_of_sexp sexp = + try functionType_of_sexp__ sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp +and parameterType_of_sexp__ = + let _loc = "Xxx.parameterType" + in + function + | (Sexp.List field_sexps as sexp) -> + let p_namei_field = ref None and p_register_field = ref None + and p_type_field = ref None and duplicates = ref [] + and extra = ref [] in + let rec iter = + (function + | Sexp.List ([ Sexp.Atom field_name; field_sexp ]) :: tail -> + ((match field_name with + | "p_namei" -> + (match !p_namei_field with + | None -> + let fvalue = + Conv.option_of_sexp name_of_sexp field_sexp + in p_namei_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | "p_register" -> + (match !p_register_field with + | None -> + let fvalue = + wrap_of_sexp Conv.bool_of_sexp field_sexp + in p_register_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | "p_type" -> + (match !p_type_field with + | None -> + let fvalue = fullType_of_sexp field_sexp + in p_type_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | _ -> + if !Conv.record_check_extra_fields + then extra := field_name :: !extra + else ()); + iter tail) + | sexp :: _ -> Conv_error.record_only_pairs_expected _loc sexp + | [] -> ()) + in + (iter field_sexps; + if !duplicates <> [] + then Conv_error.record_duplicate_fields _loc !duplicates sexp + else + if !extra <> [] + then Conv_error.record_extra_fields _loc !extra sexp + else + (match ((!p_namei_field), (!p_register_field), + (!p_type_field)) + with + | (Some p_namei_value, Some p_register_value, + Some p_type_value) -> + { + p_namei = p_namei_value; + p_register = p_register_value; + p_type = p_type_value; + } + | _ -> + Conv_error.record_undefined_elements _loc sexp + [ ((!p_namei_field = None), "p_namei"); + ((!p_register_field = None), "p_register"); + ((!p_type_field = None), "p_type") ])) + | (Sexp.Atom _ as sexp) -> Conv_error.record_list_instead_atom _loc sexp +and parameterType_of_sexp sexp = parameterType_of_sexp__ sexp +and typeQualifier_of_sexp__ = + let _loc = "Xxx.typeQualifier" + in fun sexp -> wrap_of_sexp typeQualifierbis_of_sexp sexp +and typeQualifier_of_sexp sexp = + try typeQualifier_of_sexp__ sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp +and typeQualifierbis_of_sexp__ = + let _loc = "Xxx.typeQualifierbis" + in + function + | (Sexp.List field_sexps as sexp) -> + let const_field = ref None and volatile_field = ref None + and duplicates = ref [] and extra = ref [] in + let rec iter = + (function + | Sexp.List ([ Sexp.Atom field_name; field_sexp ]) :: tail -> + ((match field_name with + | "const" -> + (match !const_field with + | None -> + let fvalue = Conv.bool_of_sexp field_sexp + in const_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | "volatile" -> + (match !volatile_field with + | None -> + let fvalue = Conv.bool_of_sexp field_sexp + in volatile_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | _ -> + if !Conv.record_check_extra_fields + then extra := field_name :: !extra + else ()); + iter tail) + | sexp :: _ -> Conv_error.record_only_pairs_expected _loc sexp + | [] -> ()) + in + (iter field_sexps; + if !duplicates <> [] + then Conv_error.record_duplicate_fields _loc !duplicates sexp + else + if !extra <> [] + then Conv_error.record_extra_fields _loc !extra sexp + else + (match ((!const_field), (!volatile_field)) with + | (Some const_value, Some volatile_value) -> + { const = const_value; volatile = volatile_value; } + | _ -> + Conv_error.record_undefined_elements _loc sexp + [ ((!const_field = None), "const"); + ((!volatile_field = None), "volatile") ])) + | (Sexp.Atom _ as sexp) -> Conv_error.record_list_instead_atom _loc sexp +and typeQualifierbis_of_sexp sexp = typeQualifierbis_of_sexp__ sexp +and attribute_of_sexp__ = + let _loc = "Xxx.attribute" + in fun sexp -> wrap_of_sexp attributebis_of_sexp sexp +and attribute_of_sexp sexp = + try attribute_of_sexp__ sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp +and attributebis_of_sexp__ = + let _loc = "Xxx.attributebis" + in + function + | (Sexp.List + (Sexp.Atom (("attribute" | "Attribute" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = Conv.string_of_sexp v1 in Attribute v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.Atom ("attribute" | "Attribute") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and attributebis_of_sexp sexp = attributebis_of_sexp__ sexp +and expression_of_sexp__ = + let _loc = "Xxx.expression" + in + fun sexp -> + wrap_of_sexp + (function + | Sexp.List ([ v1; v2 ]) -> + let v1 = expressionbis_of_sexp v1 + and v2 = Conv.ref_of_sexp exp_info_of_sexp v2 + in (v1, v2) + | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp) + sexp +and expression_of_sexp sexp = + try expression_of_sexp__ sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp +and exp_info_of_sexp__ = + let _loc = "Xxx.exp_info" + in + function + | Sexp.List ([ v1; v2 ]) -> + let v1 = Conv.option_of_sexp exp_type_of_sexp v1 + and v2 = test_of_sexp v2 + in (v1, v2) + | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp +and exp_info_of_sexp sexp = + try exp_info_of_sexp__ sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp +and exp_type_of_sexp__ = + let _loc = "Xxx.exp_type" + in + function + | Sexp.List ([ v1; v2 ]) -> + let v1 = fullType_of_sexp v1 and v2 = local_of_sexp v2 in (v1, v2) + | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp +and exp_type_of_sexp sexp = + try exp_type_of_sexp__ sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp +and local_of_sexp__ = + let _loc = "Xxx.local" + in + function + | (Sexp.List (Sexp.Atom (("localVar" | "LocalVar" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = parse_info_of_sexp v1 in LocalVar v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | Sexp.Atom ("notLocalVar" | "NotLocalVar") -> NotLocalVar + | (Sexp.Atom ("localVar" | "LocalVar") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.Atom ("notLocalVar" | "NotLocalVar") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and local_of_sexp sexp = local_of_sexp__ sexp +and test_of_sexp__ = + let _loc = "Xxx.test" + in + function + | Sexp.Atom ("test" | "Test") -> Test + | Sexp.Atom ("notTest" | "NotTest") -> NotTest + | (Sexp.List (Sexp.Atom ("test" | "Test") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("notTest" | "NotTest") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and test_of_sexp sexp = test_of_sexp__ sexp +and expressionbis_of_sexp__ = + let _loc = "Xxx.expressionbis" + in + function + | (Sexp.List (Sexp.Atom (("ident" | "Ident" as tag)) :: sexp_args) as + sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = name_of_sexp v1 in Ident v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("constant" | "Constant" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = constant_of_sexp v1 in Constant v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("funCall" | "FunCall" as tag)) :: sexp_args) as + sexp) -> + (match sexp_args with + | [ v1; v2 ] -> + let v1 = expression_of_sexp v1 + and v2 = Conv.list_of_sexp (wrap2_of_sexp argument_of_sexp) v2 + in FunCall ((v1, v2)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("condExpr" | "CondExpr" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1; v2; v3 ] -> + let v1 = expression_of_sexp v1 + and v2 = Conv.option_of_sexp expression_of_sexp v2 + and v3 = expression_of_sexp v3 + in CondExpr ((v1, v2, v3)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("sequence" | "Sequence" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1; v2 ] -> + let v1 = expression_of_sexp v1 + and v2 = expression_of_sexp v2 + in Sequence ((v1, v2)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("assignment" | "Assignment" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1; v2; v3 ] -> + let v1 = expression_of_sexp v1 + and v2 = assignOp_of_sexp v2 + and v3 = expression_of_sexp v3 + in Assignment ((v1, v2, v3)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("postfix" | "Postfix" as tag)) :: sexp_args) as + sexp) -> + (match sexp_args with + | [ v1; v2 ] -> + let v1 = expression_of_sexp v1 + and v2 = fixOp_of_sexp v2 + in Postfix ((v1, v2)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("infix" | "Infix" as tag)) :: sexp_args) as + sexp) -> + (match sexp_args with + | [ v1; v2 ] -> + let v1 = expression_of_sexp v1 + and v2 = fixOp_of_sexp v2 + in Infix ((v1, v2)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("unary" | "Unary" as tag)) :: sexp_args) as + sexp) -> + (match sexp_args with + | [ v1; v2 ] -> + let v1 = expression_of_sexp v1 + and v2 = unaryOp_of_sexp v2 + in Unary ((v1, v2)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("binary" | "Binary" as tag)) :: sexp_args) as + sexp) -> + (match sexp_args with + | [ v1; v2; v3 ] -> + let v1 = expression_of_sexp v1 + and v2 = binaryOp_of_sexp v2 + and v3 = expression_of_sexp v3 + in Binary ((v1, v2, v3)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("arrayAccess" | "ArrayAccess" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1; v2 ] -> + let v1 = expression_of_sexp v1 + and v2 = expression_of_sexp v2 + in ArrayAccess ((v1, v2)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("recordAccess" | "RecordAccess" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1; v2 ] -> + let v1 = expression_of_sexp v1 + and v2 = name_of_sexp v2 + in RecordAccess ((v1, v2)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("recordPtAccess" | "RecordPtAccess" as tag)) :: + sexp_args) + as sexp) -> + (match sexp_args with + | [ v1; v2 ] -> + let v1 = expression_of_sexp v1 + and v2 = name_of_sexp v2 + in RecordPtAccess ((v1, v2)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("sizeOfExpr" | "SizeOfExpr" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = expression_of_sexp v1 in SizeOfExpr v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("sizeOfType" | "SizeOfType" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = fullType_of_sexp v1 in SizeOfType v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("cast" | "Cast" as tag)) :: sexp_args) as sexp) + -> + (match sexp_args with + | [ v1; v2 ] -> + let v1 = fullType_of_sexp v1 + and v2 = expression_of_sexp v2 + in Cast ((v1, v2)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("statementExpr" | "StatementExpr" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> + let v1 = wrap_of_sexp compound_of_sexp v1 in StatementExpr v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("constructor" | "Constructor" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1; v2 ] -> + let v1 = fullType_of_sexp v1 + and v2 = + Conv.list_of_sexp (wrap2_of_sexp initialiser_of_sexp) v2 + in Constructor ((v1, v2)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("parenExpr" | "ParenExpr" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = expression_of_sexp v1 in ParenExpr v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.Atom ("ident" | "Ident") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("constant" | "Constant") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("funCall" | "FunCall") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("condExpr" | "CondExpr") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("sequence" | "Sequence") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("assignment" | "Assignment") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("postfix" | "Postfix") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("infix" | "Infix") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("unary" | "Unary") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("binary" | "Binary") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("arrayAccess" | "ArrayAccess") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("recordAccess" | "RecordAccess") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("recordPtAccess" | "RecordPtAccess") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("sizeOfExpr" | "SizeOfExpr") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("sizeOfType" | "SizeOfType") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("cast" | "Cast") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("statementExpr" | "StatementExpr") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("constructor" | "Constructor") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("parenExpr" | "ParenExpr") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and expressionbis_of_sexp sexp = expressionbis_of_sexp__ sexp +and argument_of_sexp__ = + let _loc = "Xxx.argument" + in + fun sexp -> Common.either_of_sexp expression_of_sexp weird_argument_of_sexp sexp +and argument_of_sexp sexp = + try argument_of_sexp__ sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp +and weird_argument_of_sexp__ = + let _loc = "Xxx.weird_argument" + in + function + | (Sexp.List (Sexp.Atom (("argType" | "ArgType" as tag)) :: sexp_args) as + sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = parameterType_of_sexp v1 in ArgType v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("argAction" | "ArgAction" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = action_macro_of_sexp v1 in ArgAction v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.Atom ("argType" | "ArgType") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("argAction" | "ArgAction") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and weird_argument_of_sexp sexp = weird_argument_of_sexp__ sexp +and action_macro_of_sexp__ = + let _loc = "Xxx.action_macro" + in + function + | (Sexp.List (Sexp.Atom (("actMisc" | "ActMisc" as tag)) :: sexp_args) as + sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = il_of_sexp v1 in ActMisc v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.Atom ("actMisc" | "ActMisc") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and action_macro_of_sexp sexp = action_macro_of_sexp__ sexp +and constant_of_sexp__ = + let _loc = "Xxx.constant" + in + function + | (Sexp.List (Sexp.Atom (("string" | "String" as tag)) :: sexp_args) as + sexp) -> + (match sexp_args with + | [ v1 ] -> + let v1 = + (match v1 with + | Sexp.List ([ v1; v2 ]) -> + let v1 = Conv.string_of_sexp v1 + and v2 = isWchar_of_sexp v2 + in (v1, v2) + | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp) + in String v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("multiString" | "MultiString" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> + let v1 = Conv.list_of_sexp Conv.string_of_sexp v1 + in MultiString v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("char" | "Char" as tag)) :: sexp_args) as sexp) + -> + (match sexp_args with + | [ v1 ] -> + let v1 = + (match v1 with + | Sexp.List ([ v1; v2 ]) -> + let v1 = Conv.string_of_sexp v1 + and v2 = isWchar_of_sexp v2 + in (v1, v2) + | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp) + in Char v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("int" | "Int" as tag)) :: sexp_args) as sexp) + -> + (match sexp_args with + | [ v1 ] -> let v1 = Conv.string_of_sexp v1 in Int (v1, failwith "Todo") + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("float" | "Float" as tag)) :: sexp_args) as + sexp) -> + (match sexp_args with + | [ v1 ] -> + let v1 = + (match v1 with + | Sexp.List ([ v1; v2 ]) -> + let v1 = Conv.string_of_sexp v1 + and v2 = floatType_of_sexp v2 + in (v1, v2) + | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp) + in Float v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.Atom ("string" | "String") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("multiString" | "MultiString") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("char" | "Char") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("int" | "Int") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("float" | "Float") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and constant_of_sexp sexp = constant_of_sexp__ sexp +and isWchar_of_sexp__ = + let _loc = "Xxx.isWchar" + in + function + | Sexp.Atom ("isWchar" | "IsWchar") -> IsWchar + | Sexp.Atom ("isChar" | "IsChar") -> IsChar + | (Sexp.List (Sexp.Atom ("isWchar" | "IsWchar") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("isChar" | "IsChar") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and isWchar_of_sexp sexp = isWchar_of_sexp__ sexp +and unaryOp_of_sexp__ = + let _loc = "Xxx.unaryOp" + in + function + | Sexp.Atom ("getRef" | "GetRef") -> GetRef + | Sexp.Atom ("deRef" | "DeRef") -> DeRef + | Sexp.Atom ("unPlus" | "UnPlus") -> UnPlus + | Sexp.Atom ("unMinus" | "UnMinus") -> UnMinus + | Sexp.Atom ("tilde" | "Tilde") -> Tilde + | Sexp.Atom ("not" | "Not") -> Not + | Sexp.Atom ("getRefLabel" | "GetRefLabel") -> GetRefLabel + | (Sexp.List (Sexp.Atom ("getRef" | "GetRef") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("deRef" | "DeRef") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("unPlus" | "UnPlus") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("unMinus" | "UnMinus") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("tilde" | "Tilde") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("not" | "Not") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("getRefLabel" | "GetRefLabel") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and unaryOp_of_sexp sexp = unaryOp_of_sexp__ sexp +and assignOp_of_sexp__ = + let _loc = "Xxx.assignOp" + in + function + | Sexp.Atom ("simpleAssign" | "SimpleAssign") -> SimpleAssign + | (Sexp.List (Sexp.Atom (("opAssign" | "OpAssign" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = arithOp_of_sexp v1 in OpAssign v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom ("simpleAssign" | "SimpleAssign") :: _) as sexp) + -> Conv_error.stag_no_args _loc sexp + | (Sexp.Atom ("opAssign" | "OpAssign") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and assignOp_of_sexp sexp = assignOp_of_sexp__ sexp +and fixOp_of_sexp__ = + let _loc = "Xxx.fixOp" + in + function + | Sexp.Atom ("dec" | "Dec") -> Dec + | Sexp.Atom ("inc" | "Inc") -> Inc + | (Sexp.List (Sexp.Atom ("dec" | "Dec") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("inc" | "Inc") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and fixOp_of_sexp sexp = fixOp_of_sexp__ sexp +and binaryOp_of_sexp__ = + let _loc = "Xxx.binaryOp" + in + function + | (Sexp.List (Sexp.Atom (("arith" | "Arith" as tag)) :: sexp_args) as + sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = arithOp_of_sexp v1 in Arith v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("logical" | "Logical" as tag)) :: sexp_args) as + sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = logicalOp_of_sexp v1 in Logical v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.Atom ("arith" | "Arith") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("logical" | "Logical") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and binaryOp_of_sexp sexp = binaryOp_of_sexp__ sexp +and arithOp_of_sexp__ = + let _loc = "Xxx.arithOp" + in + function + | Sexp.Atom ("plus" | "Plus") -> Plus + | Sexp.Atom ("minus" | "Minus") -> Minus + | Sexp.Atom ("mul" | "Mul") -> Mul + | Sexp.Atom ("div" | "Div") -> Div + | Sexp.Atom ("mod" | "Mod") -> Mod + | Sexp.Atom ("decLeft" | "DecLeft") -> DecLeft + | Sexp.Atom ("decRight" | "DecRight") -> DecRight + | Sexp.Atom ("and" | "And") -> And + | Sexp.Atom ("or" | "Or") -> Or + | Sexp.Atom ("xor" | "Xor") -> Xor + | (Sexp.List (Sexp.Atom ("plus" | "Plus") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("minus" | "Minus") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("mul" | "Mul") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("div" | "Div") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("mod" | "Mod") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("decLeft" | "DecLeft") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("decRight" | "DecRight") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("and" | "And") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("or" | "Or") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("xor" | "Xor") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and arithOp_of_sexp sexp = arithOp_of_sexp__ sexp +and logicalOp_of_sexp__ = + let _loc = "Xxx.logicalOp" + in + function + | Sexp.Atom ("inf" | "Inf") -> Inf + | Sexp.Atom ("sup" | "Sup") -> Sup + | Sexp.Atom ("infEq" | "InfEq") -> InfEq + | Sexp.Atom ("supEq" | "SupEq") -> SupEq + | Sexp.Atom ("eq" | "Eq") -> Eq + | Sexp.Atom ("notEq" | "NotEq") -> NotEq + | Sexp.Atom ("andLog" | "AndLog") -> AndLog + | Sexp.Atom ("orLog" | "OrLog") -> OrLog + | (Sexp.List (Sexp.Atom ("inf" | "Inf") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("sup" | "Sup") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("infEq" | "InfEq") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("supEq" | "SupEq") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("eq" | "Eq") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("notEq" | "NotEq") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("andLog" | "AndLog") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("orLog" | "OrLog") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and logicalOp_of_sexp sexp = logicalOp_of_sexp__ sexp +and constExpression_of_sexp__ = + let _loc = "Xxx.constExpression" in fun sexp -> expression_of_sexp sexp +and constExpression_of_sexp sexp = + try constExpression_of_sexp__ sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp +and statement_of_sexp__ = + let _loc = "Xxx.statement" + in fun sexp -> wrap_of_sexp statementbis_of_sexp sexp +and statement_of_sexp sexp = + try statement_of_sexp__ sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp +and statementbis_of_sexp__ = + let _loc = "Xxx.statementbis" + in + function + | (Sexp.List (Sexp.Atom (("labeled" | "Labeled" as tag)) :: sexp_args) as + sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = labeled_of_sexp v1 in Labeled v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("compound" | "Compound" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = compound_of_sexp v1 in Compound v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("exprStatement" | "ExprStatement" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = exprStatement_of_sexp v1 in ExprStatement v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("selection" | "Selection" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = selection_of_sexp v1 in Selection v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("iteration" | "Iteration" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = iteration_of_sexp v1 in Iteration v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("jump" | "Jump" as tag)) :: sexp_args) as sexp) + -> + (match sexp_args with + | [ v1 ] -> let v1 = jump_of_sexp v1 in Jump v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("decl" | "Decl" as tag)) :: sexp_args) as sexp) + -> + (match sexp_args with + | [ v1 ] -> let v1 = declaration_of_sexp v1 in Decl v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("asm" | "Asm" as tag)) :: sexp_args) as sexp) + -> + (match sexp_args with + | [ v1 ] -> let v1 = asmbody_of_sexp v1 in Asm v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("nestedFunc" | "NestedFunc" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = definition_of_sexp v1 in NestedFunc v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | Sexp.Atom ("macroStmt" | "MacroStmt") -> MacroStmt + | (Sexp.Atom ("labeled" | "Labeled") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("compound" | "Compound") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("exprStatement" | "ExprStatement") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("selection" | "Selection") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("iteration" | "Iteration") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("jump" | "Jump") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("decl" | "Decl") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("asm" | "Asm") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("nestedFunc" | "NestedFunc") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.Atom ("macroStmt" | "MacroStmt") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and statementbis_of_sexp sexp = statementbis_of_sexp__ sexp +and labeled_of_sexp__ = + let _loc = "Xxx.labeled" + in + function + | (Sexp.List (Sexp.Atom (("label" | "Label" as tag)) :: sexp_args) as + sexp) -> + (match sexp_args with + | [ v1; v2 ] -> + let v1 = name_of_sexp v1 + and v2 = statement_of_sexp v2 + in Label ((v1, v2)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("case" | "Case" as tag)) :: sexp_args) as sexp) + -> + (match sexp_args with + | [ v1; v2 ] -> + let v1 = expression_of_sexp v1 + and v2 = statement_of_sexp v2 + in Case ((v1, v2)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("caseRange" | "CaseRange" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1; v2; v3 ] -> + let v1 = expression_of_sexp v1 + and v2 = expression_of_sexp v2 + and v3 = statement_of_sexp v3 + in CaseRange ((v1, v2, v3)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("default" | "Default" as tag)) :: sexp_args) as + sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = statement_of_sexp v1 in Default v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.Atom ("label" | "Label") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("case" | "Case") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("caseRange" | "CaseRange") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("default" | "Default") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and labeled_of_sexp sexp = labeled_of_sexp__ sexp +and compound_of_sexp__ = + let _loc = "Xxx.compound" + in fun sexp -> Conv.list_of_sexp statement_sequencable_of_sexp sexp +and compound_of_sexp sexp = + try compound_of_sexp__ sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp +and statement_sequencable_of_sexp__ = + let _loc = "Xxx.statement_sequencable" + in + function + | (Sexp.List (Sexp.Atom (("stmtElem" | "StmtElem" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = statement_of_sexp v1 in StmtElem v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("cppDirectiveStmt" | "CppDirectiveStmt" as tag)) :: + sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = cpp_directive_of_sexp v1 in CppDirectiveStmt v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("ifdefStmt" | "IfdefStmt" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = ifdef_directive_of_sexp v1 in IfdefStmt v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("ifdefStmt2" | "IfdefStmt2" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1; v2 ] -> + let v1 = Conv.list_of_sexp ifdef_directive_of_sexp v1 + and v2 = + Conv.list_of_sexp + (Conv.list_of_sexp statement_sequencable_of_sexp) v2 + in IfdefStmt2 ((v1, v2)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.Atom ("stmtElem" | "StmtElem") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("cppDirectiveStmt" | "CppDirectiveStmt") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("ifdefStmt" | "IfdefStmt") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("ifdefStmt2" | "IfdefStmt2") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and statement_sequencable_of_sexp sexp = statement_sequencable_of_sexp__ sexp +and exprStatement_of_sexp__ = + let _loc = "Xxx.exprStatement" + in fun sexp -> Conv.option_of_sexp expression_of_sexp sexp +and exprStatement_of_sexp sexp = + try exprStatement_of_sexp__ sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp +and selection_of_sexp__ = + let _loc = "Xxx.selection" + in + function + | (Sexp.List (Sexp.Atom (("if" | "If" as tag)) :: sexp_args) as sexp) -> + (match sexp_args with + | [ v1; v2; v3 ] -> + let v1 = expression_of_sexp v1 + and v2 = statement_of_sexp v2 + and v3 = statement_of_sexp v3 + in If ((v1, v2, v3)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("switch" | "Switch" as tag)) :: sexp_args) as + sexp) -> + (match sexp_args with + | [ v1; v2 ] -> + let v1 = expression_of_sexp v1 + and v2 = statement_of_sexp v2 + in Switch ((v1, v2)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.Atom ("if" | "If") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("switch" | "Switch") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and selection_of_sexp sexp = selection_of_sexp__ sexp +and iteration_of_sexp__ = + let _loc = "Xxx.iteration" + in + function + | (Sexp.List (Sexp.Atom (("while" | "While" as tag)) :: sexp_args) as + sexp) -> + (match sexp_args with + | [ v1; v2 ] -> + let v1 = expression_of_sexp v1 + and v2 = statement_of_sexp v2 + in While ((v1, v2)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("doWhile" | "DoWhile" as tag)) :: sexp_args) as + sexp) -> + (match sexp_args with + | [ v1; v2 ] -> + let v1 = statement_of_sexp v1 + and v2 = expression_of_sexp v2 + in DoWhile ((v1, v2)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("for" | "For" as tag)) :: sexp_args) as sexp) + -> + (match sexp_args with + | [ v1; v2; v3; v4 ] -> + let v1 = wrap_of_sexp exprStatement_of_sexp v1 + and v2 = wrap_of_sexp exprStatement_of_sexp v2 + and v3 = wrap_of_sexp exprStatement_of_sexp v3 + and v4 = statement_of_sexp v4 + in For ((v1, v2, v3, v4)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("macroIteration" | "MacroIteration" as tag)) :: + sexp_args) + as sexp) -> + (match sexp_args with + | [ v1; v2; v3 ] -> + let v1 = Conv.string_of_sexp v1 + and v2 = Conv.list_of_sexp (wrap2_of_sexp argument_of_sexp) v2 + and v3 = statement_of_sexp v3 + in MacroIteration ((v1, v2, v3)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.Atom ("while" | "While") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("doWhile" | "DoWhile") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("for" | "For") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("macroIteration" | "MacroIteration") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and iteration_of_sexp sexp = iteration_of_sexp__ sexp +and jump_of_sexp__ = + let _loc = "Xxx.jump" + in + function + | (Sexp.List (Sexp.Atom (("goto" | "Goto" as tag)) :: sexp_args) as sexp) + -> + (match sexp_args with + | [ v1 ] -> let v1 = name_of_sexp v1 in Goto v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | Sexp.Atom ("continue" | "Continue") -> Continue + | Sexp.Atom ("break" | "Break") -> Break + | Sexp.Atom ("return" | "Return") -> Return + | (Sexp.List + (Sexp.Atom (("returnExpr" | "ReturnExpr" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = expression_of_sexp v1 in ReturnExpr v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("gotoComputed" | "GotoComputed" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = expression_of_sexp v1 in GotoComputed v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.Atom ("goto" | "Goto") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.Atom ("continue" | "Continue") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("break" | "Break") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("return" | "Return") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.Atom ("returnExpr" | "ReturnExpr") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("gotoComputed" | "GotoComputed") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and jump_of_sexp sexp = jump_of_sexp__ sexp +and asmbody_of_sexp__ = + let _loc = "Xxx.asmbody" + in + function + | Sexp.List ([ v1; v2 ]) -> + let v1 = il_of_sexp v1 + and v2 = Conv.list_of_sexp (wrap_of_sexp colon_of_sexp) v2 + in (v1, v2) + | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp +and asmbody_of_sexp sexp = + try asmbody_of_sexp__ sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp +and colon_of_sexp__ = + let _loc = "Xxx.colon" + in + function + | (Sexp.List (Sexp.Atom (("colon" | "Colon" as tag)) :: sexp_args) as + sexp) -> + (match sexp_args with + | [ v1 ] -> + let v1 = + Conv.list_of_sexp (wrap2_of_sexp colon_option_of_sexp) v1 + in Colon v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.Atom ("colon" | "Colon") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and colon_of_sexp sexp = colon_of_sexp__ sexp +and colon_option_of_sexp__ = + let _loc = "Xxx.colon_option" + in fun sexp -> wrap_of_sexp colon_option_bis_of_sexp sexp +and colon_option_of_sexp sexp = + try colon_option_of_sexp__ sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp +and colon_option_bis_of_sexp__ = + let _loc = "Xxx.colon_option_bis" + in + function + | Sexp.Atom ("colonMisc" | "ColonMisc") -> ColonMisc + | (Sexp.List + (Sexp.Atom (("colonExpr" | "ColonExpr" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = expression_of_sexp v1 in ColonExpr v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom ("colonMisc" | "ColonMisc") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.Atom ("colonExpr" | "ColonExpr") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and colon_option_bis_of_sexp sexp = colon_option_bis_of_sexp__ sexp +and declaration_of_sexp__ = + let _loc = "Xxx.declaration" + in + function + | (Sexp.List (Sexp.Atom (("declList" | "DeclList" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> + let v1 = + wrap_of_sexp + (Conv.list_of_sexp (wrap2_of_sexp onedecl_of_sexp)) v1 + in DeclList v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("macroDecl" | "MacroDecl" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> + let v1 = + wrap_of_sexp + (function + | Sexp.List ([ v1; v2 ]) -> + let v1 = Conv.string_of_sexp v1 + and v2 = + Conv.list_of_sexp (wrap2_of_sexp argument_of_sexp) v2 + in (v1, v2) + | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp) + v1 + in MacroDecl v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.Atom ("declList" | "DeclList") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("macroDecl" | "MacroDecl") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and declaration_of_sexp sexp = declaration_of_sexp__ sexp +and onedecl_of_sexp__ = + let _loc = "Xxx.onedecl" + in + function + | (Sexp.List field_sexps as sexp) -> + let v_namei_field = ref None and v_type_field = ref None + and v_type_bis_field = ref None and v_storage_field = ref None + and v_local_field = ref None and v_attr_field = ref None + and duplicates = ref [] and extra = ref [] in + let rec iter = + (function + | Sexp.List ([ Sexp.Atom field_name; field_sexp ]) :: tail -> + ((match field_name with + | "v_namei" -> + (match !v_namei_field with + | None -> + let fvalue = + Conv.option_of_sexp + (function + | Sexp.List ([ v1; v2 ]) -> + let v1 = name_of_sexp v1 + and v2 = + Conv.option_of_sexp + (function + | Sexp.List ([ v1; v2 ]) -> + let v1 = info_of_sexp v1 + and v2 = initialiser_of_sexp v2 + in (v1, v2) + | sexp -> + Conv_error. + tuple_of_size_n_expected _loc 2 + sexp) + v2 + in (v1, v2) + | sexp -> + Conv_error.tuple_of_size_n_expected _loc 2 + sexp) + field_sexp + in v_namei_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | "v_type" -> + (match !v_type_field with + | None -> + let fvalue = fullType_of_sexp field_sexp + in v_type_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | "v_type_bis" -> + (match !v_type_bis_field with + | None -> + let fvalue = + Conv.ref_of_sexp + (Conv.option_of_sexp fullType_of_sexp) + field_sexp + in v_type_bis_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | "v_storage" -> + (match !v_storage_field with + | None -> + let fvalue = storage_of_sexp field_sexp + in v_storage_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | "v_local" -> + (match !v_local_field with + | None -> + let fvalue = local_decl_of_sexp field_sexp + in v_local_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | "v_attr" -> + (match !v_attr_field with + | None -> + let fvalue = + Conv.list_of_sexp attribute_of_sexp field_sexp + in v_attr_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | _ -> + if !Conv.record_check_extra_fields + then extra := field_name :: !extra + else ()); + iter tail) + | sexp :: _ -> Conv_error.record_only_pairs_expected _loc sexp + | [] -> ()) + in + (iter field_sexps; + if !duplicates <> [] + then Conv_error.record_duplicate_fields _loc !duplicates sexp + else + if !extra <> [] + then Conv_error.record_extra_fields _loc !extra sexp + else + (match ((!v_namei_field), (!v_type_field), + (!v_type_bis_field), (!v_storage_field), + (!v_local_field), (!v_attr_field)) + with + | (Some v_namei_value, Some v_type_value, + Some v_type_bis_value, Some v_storage_value, + Some v_local_value, Some v_attr_value) -> + { + v_namei = v_namei_value; + v_type = v_type_value; + v_type_bis = v_type_bis_value; + v_storage = v_storage_value; + v_local = v_local_value; + v_attr = v_attr_value; + } + | _ -> + Conv_error.record_undefined_elements _loc sexp + [ ((!v_namei_field = None), "v_namei"); + ((!v_type_field = None), "v_type"); + ((!v_type_bis_field = None), "v_type_bis"); + ((!v_storage_field = None), "v_storage"); + ((!v_local_field = None), "v_local"); + ((!v_attr_field = None), "v_attr") ])) + | (Sexp.Atom _ as sexp) -> Conv_error.record_list_instead_atom _loc sexp +and onedecl_of_sexp sexp = onedecl_of_sexp__ sexp +and storage_of_sexp__ = + let _loc = "Xxx.storage" + in + function + | Sexp.List ([ v1; v2 ]) -> + let v1 = storagebis_of_sexp v1 + and v2 = Conv.bool_of_sexp v2 + in (v1, v2) + | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp +and storage_of_sexp sexp = + try storage_of_sexp__ sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp +and storagebis_of_sexp__ = + let _loc = "Xxx.storagebis" + in + function + | Sexp.Atom ("noSto" | "NoSto") -> NoSto + | Sexp.Atom ("stoTypedef" | "StoTypedef") -> StoTypedef + | (Sexp.List (Sexp.Atom (("sto" | "Sto" as tag)) :: sexp_args) as sexp) + -> + (match sexp_args with + | [ v1 ] -> let v1 = storageClass_of_sexp v1 in Sto v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom ("noSto" | "NoSto") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("stoTypedef" | "StoTypedef") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.Atom ("sto" | "Sto") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and storagebis_of_sexp sexp = storagebis_of_sexp__ sexp +and storageClass_of_sexp__ = + let _loc = "Xxx.storageClass" + in + function + | Sexp.Atom ("auto" | "Auto") -> Auto + | Sexp.Atom ("static" | "Static") -> Static + | Sexp.Atom ("register" | "Register") -> Register + | Sexp.Atom ("extern" | "Extern") -> Extern + | (Sexp.List (Sexp.Atom ("auto" | "Auto") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("static" | "Static") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("register" | "Register") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("extern" | "Extern") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and storageClass_of_sexp sexp = storageClass_of_sexp__ sexp +and local_decl_of_sexp__ = + let _loc = "Xxx.local_decl" + in + function + | Sexp.Atom ("localDecl" | "LocalDecl") -> LocalDecl + | Sexp.Atom ("notLocalDecl" | "NotLocalDecl") -> NotLocalDecl + | (Sexp.List (Sexp.Atom ("localDecl" | "LocalDecl") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("notLocalDecl" | "NotLocalDecl") :: _) as sexp) + -> Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and local_decl_of_sexp sexp = local_decl_of_sexp__ sexp +and initialiser_of_sexp__ = + let _loc = "Xxx.initialiser" + in fun sexp -> wrap_of_sexp initialiserbis_of_sexp sexp +and initialiser_of_sexp sexp = + try initialiser_of_sexp__ sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp +and initialiserbis_of_sexp__ = + let _loc = "Xxx.initialiserbis" + in + function + | (Sexp.List (Sexp.Atom (("initExpr" | "InitExpr" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = expression_of_sexp v1 in InitExpr v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("initList" | "InitList" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> + let v1 = + Conv.list_of_sexp (wrap2_of_sexp initialiser_of_sexp) v1 + in InitList v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("initDesignators" | "InitDesignators" as tag)) :: + sexp_args) + as sexp) -> + (match sexp_args with + | [ v1; v2 ] -> + let v1 = Conv.list_of_sexp designator_of_sexp v1 + and v2 = initialiser_of_sexp v2 + in InitDesignators ((v1, v2)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("initFieldOld" | "InitFieldOld" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1; v2 ] -> + let v1 = Conv.string_of_sexp v1 + and v2 = initialiser_of_sexp v2 + in InitFieldOld ((v1, v2)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("initIndexOld" | "InitIndexOld" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1; v2 ] -> + let v1 = expression_of_sexp v1 + and v2 = initialiser_of_sexp v2 + in InitIndexOld ((v1, v2)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.Atom ("initExpr" | "InitExpr") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("initList" | "InitList") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("initDesignators" | "InitDesignators") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("initFieldOld" | "InitFieldOld") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("initIndexOld" | "InitIndexOld") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and initialiserbis_of_sexp sexp = initialiserbis_of_sexp__ sexp +and designator_of_sexp__ = + let _loc = "Xxx.designator" + in fun sexp -> wrap_of_sexp designatorbis_of_sexp sexp +and designator_of_sexp sexp = + try designator_of_sexp__ sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp +and designatorbis_of_sexp__ = + let _loc = "Xxx.designatorbis" + in + function + | (Sexp.List + (Sexp.Atom (("designatorField" | "DesignatorField" as tag)) :: + sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = Conv.string_of_sexp v1 in DesignatorField v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("designatorIndex" | "DesignatorIndex" as tag)) :: + sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = expression_of_sexp v1 in DesignatorIndex v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("designatorRange" | "DesignatorRange" as tag)) :: + sexp_args) + as sexp) -> + (match sexp_args with + | [ v1; v2 ] -> + let v1 = expression_of_sexp v1 + and v2 = expression_of_sexp v2 + in DesignatorRange ((v1, v2)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.Atom ("designatorField" | "DesignatorField") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("designatorIndex" | "DesignatorIndex") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("designatorRange" | "DesignatorRange") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and designatorbis_of_sexp sexp = designatorbis_of_sexp__ sexp +and definition_of_sexp__ = + let _loc = "Xxx.definition" + in fun sexp -> wrap_of_sexp definitionbis_of_sexp sexp +and definition_of_sexp sexp = + try definition_of_sexp__ sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp +and definitionbis_of_sexp__ = + let _loc = "Xxx.definitionbis" + in + function + | (Sexp.List field_sexps as sexp) -> + let f_name_field = ref None and f_type_field = ref None + and f_storage_field = ref None and f_body_field = ref None + and f_attr_field = ref None and f_old_c_style_field = ref None + and duplicates = ref [] and extra = ref [] in + let rec iter = + (function + | Sexp.List ([ Sexp.Atom field_name; field_sexp ]) :: tail -> + ((match field_name with + | "f_name" -> + (match !f_name_field with + | None -> + let fvalue = name_of_sexp field_sexp + in f_name_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | "f_type" -> + (match !f_type_field with + | None -> + let fvalue = functionType_of_sexp field_sexp + in f_type_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | "f_storage" -> + (match !f_storage_field with + | None -> + let fvalue = storage_of_sexp field_sexp + in f_storage_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | "f_body" -> + (match !f_body_field with + | None -> + let fvalue = compound_of_sexp field_sexp + in f_body_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | "f_attr" -> + (match !f_attr_field with + | None -> + let fvalue = + Conv.list_of_sexp attribute_of_sexp field_sexp + in f_attr_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | "f_old_c_style" -> + (match !f_old_c_style_field with + | None -> + let fvalue = + Conv.option_of_sexp + (Conv.list_of_sexp declaration_of_sexp) + field_sexp + in f_old_c_style_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | _ -> + if !Conv.record_check_extra_fields + then extra := field_name :: !extra + else ()); + iter tail) + | sexp :: _ -> Conv_error.record_only_pairs_expected _loc sexp + | [] -> ()) + in + (iter field_sexps; + if !duplicates <> [] + then Conv_error.record_duplicate_fields _loc !duplicates sexp + else + if !extra <> [] + then Conv_error.record_extra_fields _loc !extra sexp + else + (match ((!f_name_field), (!f_type_field), (!f_storage_field), + (!f_body_field), (!f_attr_field), + (!f_old_c_style_field)) + with + | (Some f_name_value, Some f_type_value, + Some f_storage_value, Some f_body_value, + Some f_attr_value, Some f_old_c_style_value) -> + { + f_name = f_name_value; + f_type = f_type_value; + f_storage = f_storage_value; + f_body = f_body_value; + f_attr = f_attr_value; + f_old_c_style = f_old_c_style_value; + } + | _ -> + Conv_error.record_undefined_elements _loc sexp + [ ((!f_name_field = None), "f_name"); + ((!f_type_field = None), "f_type"); + ((!f_storage_field = None), "f_storage"); + ((!f_body_field = None), "f_body"); + ((!f_attr_field = None), "f_attr"); + ((!f_old_c_style_field = None), "f_old_c_style") ])) + | (Sexp.Atom _ as sexp) -> Conv_error.record_list_instead_atom _loc sexp +and definitionbis_of_sexp sexp = definitionbis_of_sexp__ sexp +and cpp_directive_of_sexp__ = + let _loc = "Xxx.cpp_directive" + in + function + | (Sexp.List (Sexp.Atom (("define" | "Define" as tag)) :: sexp_args) as + sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = define_of_sexp v1 in Define v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("include" | "Include" as tag)) :: sexp_args) as + sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = includ_of_sexp v1 in Include v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("undef" | "Undef" as tag)) :: sexp_args) as + sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = wrap_of_sexp Conv.string_of_sexp v1 in Undef v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("pragmaAndCo" | "PragmaAndCo" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = il_of_sexp v1 in PragmaAndCo v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.Atom ("define" | "Define") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("include" | "Include") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("undef" | "Undef") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("pragmaAndCo" | "PragmaAndCo") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and cpp_directive_of_sexp sexp = cpp_directive_of_sexp__ sexp +and define_of_sexp__ = + let _loc = "Xxx.define" + in + function + | Sexp.List ([ v1; v2 ]) -> + let v1 = wrap_of_sexp Conv.string_of_sexp v1 + and v2 = + (match v2 with + | Sexp.List ([ v1; v2 ]) -> + let v1 = define_kind_of_sexp v1 + and v2 = define_val_of_sexp v2 + in (v1, v2) + | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp) + in (v1, v2) + | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp +and define_of_sexp sexp = + try define_of_sexp__ sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp +and define_kind_of_sexp__ = + let _loc = "Xxx.define_kind" + in + function + | Sexp.Atom ("defineVar" | "DefineVar") -> DefineVar + | (Sexp.List + (Sexp.Atom (("defineFunc" | "DefineFunc" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> + let v1 = + wrap_of_sexp + (Conv.list_of_sexp + (wrap2_of_sexp (wrap_of_sexp Conv.string_of_sexp))) + v1 + in DefineFunc v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom ("defineVar" | "DefineVar") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.Atom ("defineFunc" | "DefineFunc") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and define_kind_of_sexp sexp = define_kind_of_sexp__ sexp +and define_val_of_sexp__ = + let _loc = "Xxx.define_val" + in + function + | (Sexp.List + (Sexp.Atom (("defineExpr" | "DefineExpr" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = expression_of_sexp v1 in DefineExpr v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("defineStmt" | "DefineStmt" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = statement_of_sexp v1 in DefineStmt v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("defineType" | "DefineType" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = fullType_of_sexp v1 in DefineType v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("defineDoWhileZero" | "DefineDoWhileZero" as tag)) :: + sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> + let v1 = + wrap_of_sexp + (function + | Sexp.List ([ v1; v2 ]) -> + let v1 = statement_of_sexp v1 + and v2 = expression_of_sexp v2 + in (v1, v2) + | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp) + v1 + in DefineDoWhileZero v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("defineFunction" | "DefineFunction" as tag)) :: + sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = definition_of_sexp v1 in DefineFunction v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("defineInit" | "DefineInit" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = initialiser_of_sexp v1 in DefineInit v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("defineText" | "DefineText" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> + let v1 = wrap_of_sexp Conv.string_of_sexp v1 in DefineText v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | Sexp.Atom ("defineEmpty" | "DefineEmpty") -> DefineEmpty + | Sexp.Atom ("defineTodo" | "DefineTodo") -> DefineTodo + | (Sexp.Atom ("defineExpr" | "DefineExpr") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("defineStmt" | "DefineStmt") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("defineType" | "DefineType") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("defineDoWhileZero" | "DefineDoWhileZero") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("defineFunction" | "DefineFunction") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("defineInit" | "DefineInit") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("defineText" | "DefineText") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.Atom ("defineEmpty" | "DefineEmpty") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("defineTodo" | "DefineTodo") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and define_val_of_sexp sexp = define_val_of_sexp__ sexp +and includ_of_sexp__ = + let _loc = "Xxx.includ" + in + function + | (Sexp.List field_sexps as sexp) -> + let i_include_field = ref None and i_rel_pos_field = ref None + and i_is_in_ifdef_field = ref None and i_content_field = ref None + and duplicates = ref [] and extra = ref [] in + let rec iter = + (function + | Sexp.List ([ Sexp.Atom field_name; field_sexp ]) :: tail -> + ((match field_name with + | "i_include" -> + (match !i_include_field with + | None -> + let fvalue = + wrap_of_sexp inc_file_of_sexp field_sexp + in i_include_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | "i_rel_pos" -> + (match !i_rel_pos_field with + | None -> + let fvalue = + Conv.ref_of_sexp + (Conv.option_of_sexp include_rel_pos_of_sexp) + field_sexp + in i_rel_pos_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | "i_is_in_ifdef" -> + (match !i_is_in_ifdef_field with + | None -> + let fvalue = Conv.bool_of_sexp field_sexp + in i_is_in_ifdef_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | "i_content" -> + (match !i_content_field with + | None -> + let fvalue = + Conv.option_of_sexp + (function + | Sexp.List ([ v1; v2 ]) -> + let v1 = Common.filename_of_sexp v1 + and v2 = program_of_sexp v2 + in (v1, v2) + | sexp -> + Conv_error.tuple_of_size_n_expected _loc 2 + sexp) + field_sexp + in i_content_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | _ -> + if !Conv.record_check_extra_fields + then extra := field_name :: !extra + else ()); + iter tail) + | sexp :: _ -> Conv_error.record_only_pairs_expected _loc sexp + | [] -> ()) + in + (iter field_sexps; + if !duplicates <> [] + then Conv_error.record_duplicate_fields _loc !duplicates sexp + else + if !extra <> [] + then Conv_error.record_extra_fields _loc !extra sexp + else + (match ((!i_include_field), (!i_rel_pos_field), + (!i_is_in_ifdef_field), (!i_content_field)) + with + | (Some i_include_value, Some i_rel_pos_value, + Some i_is_in_ifdef_value, Some i_content_value) -> + { + i_include = i_include_value; + i_rel_pos = i_rel_pos_value; + i_is_in_ifdef = i_is_in_ifdef_value; + i_content = i_content_value; + } + | _ -> + Conv_error.record_undefined_elements _loc sexp + [ ((!i_include_field = None), "i_include"); + ((!i_rel_pos_field = None), "i_rel_pos"); + ((!i_is_in_ifdef_field = None), "i_is_in_ifdef"); + ((!i_content_field = None), "i_content") ])) + | (Sexp.Atom _ as sexp) -> Conv_error.record_list_instead_atom _loc sexp +and includ_of_sexp sexp = includ_of_sexp__ sexp +and inc_file_of_sexp__ = + let _loc = "Xxx.inc_file" + in + function + | (Sexp.List (Sexp.Atom (("local" | "Local" as tag)) :: sexp_args) as + sexp) -> + (match sexp_args with + | [ v1 ] -> + let v1 = Conv.list_of_sexp inc_elem_of_sexp v1 in Local v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("nonLocal" | "NonLocal" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> + let v1 = Conv.list_of_sexp inc_elem_of_sexp v1 in NonLocal v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("weird" | "Weird" as tag)) :: sexp_args) as + sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = Conv.string_of_sexp v1 in Weird v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.Atom ("local" | "Local") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("nonLocal" | "NonLocal") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("weird" | "Weird") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and inc_file_of_sexp sexp = inc_file_of_sexp__ sexp +and inc_elem_of_sexp__ = + let _loc = "Xxx.inc_elem" in fun sexp -> Conv.string_of_sexp sexp +and inc_elem_of_sexp sexp = + try inc_elem_of_sexp__ sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp +and include_rel_pos_of_sexp__ = + let _loc = "Xxx.include_rel_pos" + in + function + | (Sexp.List field_sexps as sexp) -> + let first_of_field = ref None and last_of_field = ref None + and duplicates = ref [] and extra = ref [] in + let rec iter = + (function + | Sexp.List ([ Sexp.Atom field_name; field_sexp ]) :: tail -> + ((match field_name with + | "first_of" -> + (match !first_of_field with + | None -> + let fvalue = + Conv.list_of_sexp + (Conv.list_of_sexp Conv.string_of_sexp) + field_sexp + in first_of_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | "last_of" -> + (match !last_of_field with + | None -> + let fvalue = + Conv.list_of_sexp + (Conv.list_of_sexp Conv.string_of_sexp) + field_sexp + in last_of_field := Some fvalue + | Some _ -> duplicates := field_name :: !duplicates) + | _ -> + if !Conv.record_check_extra_fields + then extra := field_name :: !extra + else ()); + iter tail) + | sexp :: _ -> Conv_error.record_only_pairs_expected _loc sexp + | [] -> ()) + in + (iter field_sexps; + if !duplicates <> [] + then Conv_error.record_duplicate_fields _loc !duplicates sexp + else + if !extra <> [] + then Conv_error.record_extra_fields _loc !extra sexp + else + (match ((!first_of_field), (!last_of_field)) with + | (Some first_of_value, Some last_of_value) -> + { first_of = first_of_value; last_of = last_of_value; } + | _ -> + Conv_error.record_undefined_elements _loc sexp + [ ((!first_of_field = None), "first_of"); + ((!last_of_field = None), "last_of") ])) + | (Sexp.Atom _ as sexp) -> Conv_error.record_list_instead_atom _loc sexp +and include_rel_pos_of_sexp sexp = include_rel_pos_of_sexp__ sexp +and ifdef_directive_of_sexp__ = + let _loc = "Xxx.ifdef_directive" + in + function + | (Sexp.List + (Sexp.Atom (("ifdefDirective" | "IfdefDirective" as tag)) :: + sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> + let v1 = + wrap_of_sexp + (function + | Sexp.List ([ v1; v2 ]) -> + let v1 = ifdefkind_of_sexp v1 + and v2 = matching_tag_of_sexp v2 + in (v1, v2) + | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp) + v1 + in IfdefDirective v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.Atom ("ifdefDirective" | "IfdefDirective") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and ifdef_directive_of_sexp sexp = ifdef_directive_of_sexp__ sexp +and ifdefkind_of_sexp__ = + let _loc = "Xxx.ifdefkind" + in + function + | Sexp.Atom ("ifdef" | "Ifdef") -> Ifdef + | Sexp.Atom ("ifdefElseif" | "IfdefElseif") -> IfdefElseif + | Sexp.Atom ("ifdefElse" | "IfdefElse") -> IfdefElse + | Sexp.Atom ("ifdefEndif" | "IfdefEndif") -> IfdefEndif + | (Sexp.List (Sexp.Atom ("ifdef" | "Ifdef") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("ifdefElseif" | "IfdefElseif") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("ifdefElse" | "IfdefElse") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.Atom ("ifdefEndif" | "IfdefEndif") :: _) as sexp) -> + Conv_error.stag_no_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and ifdefkind_of_sexp sexp = ifdefkind_of_sexp__ sexp +and matching_tag_of_sexp__ = + let _loc = "Xxx.matching_tag" + in + function + | (Sexp.List (Sexp.Atom (("ifdefTag" | "IfdefTag" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> + let v1 = + (match v1 with + | Sexp.List ([ v1; v2 ]) -> + let v1 = Conv.int_of_sexp v1 + and v2 = Conv.int_of_sexp v2 + in (v1, v2) + | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp) + in IfdefTag v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.Atom ("ifdefTag" | "IfdefTag") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and matching_tag_of_sexp sexp = matching_tag_of_sexp__ sexp +and toplevel_of_sexp__ = + let _loc = "Xxx.toplevel" + in + function + | (Sexp.List + (Sexp.Atom (("declaration" | "Declaration" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = declaration_of_sexp v1 in Declaration v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("definition" | "Definition" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = definition_of_sexp v1 in Definition v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("cppTop" | "CppTop" as tag)) :: sexp_args) as + sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = cpp_directive_of_sexp v1 in CppTop v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("ifdefTop" | "IfdefTop" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = ifdef_directive_of_sexp v1 in IfdefTop v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("macroTop" | "MacroTop" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1; v2; v3 ] -> + let v1 = Conv.string_of_sexp v1 + and v2 = Conv.list_of_sexp (wrap2_of_sexp argument_of_sexp) v2 + and v3 = il_of_sexp v3 + in MacroTop ((v1, v2, v3)) + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("emptyDef" | "EmptyDef" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = il_of_sexp v1 in EmptyDef v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("notParsedCorrectly" | "NotParsedCorrectly" as tag)) :: + sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = il_of_sexp v1 in NotParsedCorrectly v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List (Sexp.Atom (("finalDef" | "FinalDef" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = info_of_sexp v1 in FinalDef v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.Atom ("declaration" | "Declaration") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("definition" | "Definition") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("cppTop" | "CppTop") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("ifdefTop" | "IfdefTop") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("macroTop" | "MacroTop") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("emptyDef" | "EmptyDef") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("notParsedCorrectly" | "NotParsedCorrectly") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("finalDef" | "FinalDef") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and toplevel_of_sexp sexp = toplevel_of_sexp__ sexp +and program_of_sexp__ = + let _loc = "Xxx.program" + in fun sexp -> Conv.list_of_sexp toplevel_of_sexp sexp +and program_of_sexp sexp = + try program_of_sexp__ sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp + + + +(* +and metavars_binding_of_sexp__ = + let _loc = "Xxx.metavars_binding" + in + fun sexp -> + (* + Common.assoc_of_sexp Ast_cocci.meta_name_of_sexp metavar_binding_kind_of_sexp + sexp + *) + failwith "Todo" +and metavars_binding_of_sexp sexp = + try metavars_binding_of_sexp__ sexp + with + | Conv_error.No_variant_match ((msg, sexp)) -> Conv.of_sexp_error msg sexp +and metavar_binding_kind_of_sexp__ = + let _loc = "Xxx.metavar_binding_kind" + in + function + | (Sexp.List + (Sexp.Atom (("metaIdVal" | "MetaIdVal" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = Conv.string_of_sexp v1 in MetaIdVal v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("metaFuncVal" | "MetaFuncVal" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = Conv.string_of_sexp v1 in MetaFuncVal v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("metaLocalFuncVal" | "MetaLocalFuncVal" as tag)) :: + sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = Conv.string_of_sexp v1 in MetaLocalFuncVal v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("metaExprVal" | "MetaExprVal" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = expression_of_sexp v1 in MetaExprVal v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("metaExprListVal" | "MetaExprListVal" as tag)) :: + sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> + let v1 = Conv.list_of_sexp (wrap2_of_sexp argument_of_sexp) v1 + in MetaExprListVal v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("metaParamVal" | "MetaParamVal" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = parameterType_of_sexp v1 in MetaParamVal v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("metaParamListVal" | "MetaParamListVal" as tag)) :: + sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> + let v1 = + Conv.list_of_sexp (wrap2_of_sexp parameterType_of_sexp) v1 + in MetaParamListVal v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("metaTypeVal" | "MetaTypeVal" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = fullType_of_sexp v1 in MetaTypeVal v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("metaInitVal" | "MetaInitVal" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = initialiser_of_sexp v1 in MetaInitVal v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("metaStmtVal" | "MetaStmtVal" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = statement_of_sexp v1 in MetaStmtVal v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("metaPosVal" | "MetaPosVal" as tag)) :: sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> + let v1 = + (match v1 with + | Sexp.List ([ v1; v2 ]) -> + let v1 = Ast_cocci.fixpos_of_sexp v1 + and v2 = Ast_cocci.fixpos_of_sexp v2 + in (v1, v2) + | sexp -> Conv_error.tuple_of_size_n_expected _loc 2 sexp) + in MetaPosVal v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("metaPosValList" | "MetaPosValList" as tag)) :: + sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> + let v1 = + Conv.list_of_sexp + (function + | Sexp.List ([ v1; v2; v3; v4 ]) -> + let v1 = Common.filename_of_sexp v1 + and v2 = Conv.string_of_sexp v2 + and v3 = posl_of_sexp v3 + and v4 = posl_of_sexp v4 + in (v1, v2, v3, v4) + | sexp -> Conv_error.tuple_of_size_n_expected _loc 4 sexp) + v1 + in MetaPosValList v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.List + (Sexp.Atom (("metaListlenVal" | "MetaListlenVal" as tag)) :: + sexp_args) + as sexp) -> + (match sexp_args with + | [ v1 ] -> let v1 = Conv.int_of_sexp v1 in MetaListlenVal v1 + | _ -> Conv_error.stag_incorrect_n_args _loc tag sexp) + | (Sexp.Atom ("metaIdVal" | "MetaIdVal") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("metaFuncVal" | "MetaFuncVal") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("metaLocalFuncVal" | "MetaLocalFuncVal") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("metaExprVal" | "MetaExprVal") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("metaExprListVal" | "MetaExprListVal") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("metaParamVal" | "MetaParamVal") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("metaParamListVal" | "MetaParamListVal") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("metaTypeVal" | "MetaTypeVal") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("metaInitVal" | "MetaInitVal") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("metaStmtVal" | "MetaStmtVal") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("metaPosVal" | "MetaPosVal") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("metaPosValList" | "MetaPosValList") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.Atom ("metaListlenVal" | "MetaListlenVal") as sexp) -> + Conv_error.stag_takes_args _loc sexp + | (Sexp.List (Sexp.List _ :: _) as sexp) -> + Conv_error.nested_list_invalid_sum _loc sexp + | (Sexp.List [] as sexp) -> Conv_error.empty_list_invalid_sum _loc sexp + | sexp -> Conv_error.unexpected_stag _loc sexp +and metavar_binding_kind_of_sexp sexp = metavar_binding_kind_of_sexp__ sexp + +*) + + + +let rec + sexp_of_info { + pinfo = v_pinfo; + cocci_tag = v_cocci_tag; + comments_tag = v_comments_tag + } = + if not !show_info then Sexp.Atom "" + else + let bnds = [] in + let arg = Conv.sexp_of_ref sexp_of_comments_around v_comments_tag in + let bnd = Sexp.List [ Sexp.Atom "comments_tag"; arg ] in + let bnds = bnd :: bnds in + let arg = + Conv.sexp_of_ref + (Conv.sexp_of_option + (fun (v1, v2) -> + let v1 = Ast_cocci.sexp_of_mcodekind v1 + and v2 = (* sexp_of_metavars_binding v2 *) failwith "todo" + in Sexp.List [ v1; v2 ])) + v_cocci_tag in + let bnd = Sexp.List [ Sexp.Atom "cocci_tag"; arg ] in + let bnds = bnd :: bnds in + let arg = sexp_of_parse_info v_pinfo in + let bnd = Sexp.List [ Sexp.Atom "pinfo"; arg ] in + let bnds = bnd :: bnds in Sexp.List bnds +and sexp_of_il v = Conv.sexp_of_list sexp_of_info v +and sexp_of_wrap _of_a (v1, v2) = + let v1 = _of_a v1 and v2 = sexp_of_il v2 in Sexp.List [ v1; v2 ] +and sexp_of_wrap2 _of_a (v1, v2) = + let v1 = _of_a v1 and v2 = sexp_of_il v2 in Sexp.List [ v1; v2 ] + + +and + sexp_of_comments_around { + mbefore = v_mbefore; + mafter = v_mafter; + mbefore2 = v_mbefore2; + mafter2 = v_mafter2 + } = + let bnds = [] in + let arg = Conv.sexp_of_list sexp_of_comment_and_relative_pos v_mafter2 in + let bnd = Sexp.List [ Sexp.Atom "mafter2"; arg ] in + let bnds = bnd :: bnds in + let arg = Conv.sexp_of_list sexp_of_comment_and_relative_pos v_mbefore2 in + let bnd = Sexp.List [ Sexp.Atom "mbefore2"; arg ] in + let bnds = bnd :: bnds in + let arg = Conv.sexp_of_list Token_c.sexp_of_comment_like_token v_mafter in + let bnd = Sexp.List [ Sexp.Atom "mafter"; arg ] in + let bnds = bnd :: bnds in + let arg = Conv.sexp_of_list Token_c.sexp_of_comment_like_token v_mbefore in + let bnd = Sexp.List [ Sexp.Atom "mbefore"; arg ] in + let bnds = bnd :: bnds in Sexp.List bnds +and sexp_of_comment_and_relative_pos { minfo = v_minfo; mpos = v_mpos } = + let bnds = [] in + let arg = Conv.sexp_of_int v_mpos in + let bnd = Sexp.List [ Sexp.Atom "mpos"; arg ] in + let bnds = bnd :: bnds in + let arg = Common.sexp_of_parse_info v_minfo in + let bnd = Sexp.List [ Sexp.Atom "minfo"; arg ] in + let bnds = bnd :: bnds in Sexp.List bnds +and sexp_of_comment v = Common.sexp_of_parse_info v +and sexp_of_com v = Conv.sexp_of_ref (Conv.sexp_of_list sexp_of_comment) v + + + + +(* break let rec *) +let rec sexp_of_name = + function + | RegularName v1 -> + let v1 = sexp_of_wrap Conv.sexp_of_string v1 + in Sexp.List [ Sexp.Atom "RegularName"; v1 ] + | CppConcatenatedName v1 -> + let v1 = + Conv.sexp_of_list (sexp_of_wrap2 (sexp_of_wrap Conv.sexp_of_string)) + v1 + in Sexp.List [ Sexp.Atom "CppConcatenatedName"; v1 ] + | CppVariadicName v1 -> + let v1 = sexp_of_wrap Conv.sexp_of_string v1 + in Sexp.List [ Sexp.Atom "CppVariadicName"; v1 ] + | CppIdentBuilder ((v1, v2)) -> + let v1 = sexp_of_wrap Conv.sexp_of_string v1 + and v2 = + Conv.sexp_of_list (sexp_of_wrap2 (sexp_of_wrap Conv.sexp_of_string)) + v2 + in Sexp.List [ Sexp.Atom "CppIdentBuilder"; v1; v2 ] +and sexp_of_fullType (v1, v2) = + let v1 = sexp_of_typeQualifier v1 + and v2 = sexp_of_typeC v2 + in Sexp.List [ v1; v2 ] +and sexp_of_typeC v = sexp_of_wrap sexp_of_typeCbis v +and sexp_of_typeCbis = + function + | BaseType v1 -> + let v1 = sexp_of_baseType v1 in Sexp.List [ Sexp.Atom "BaseType"; v1 ] + | Pointer v1 -> + let v1 = sexp_of_fullType v1 in Sexp.List [ Sexp.Atom "Pointer"; v1 ] + | Array ((v1, v2)) -> + let v1 = Conv.sexp_of_option sexp_of_constExpression v1 + and v2 = sexp_of_fullType v2 + in Sexp.List [ Sexp.Atom "Array"; v1; v2 ] + | FunctionType v1 -> + let v1 = sexp_of_functionType v1 + in Sexp.List [ Sexp.Atom "FunctionType"; v1 ] + | Enum ((v1, v2)) -> + let v1 = Conv.sexp_of_option Conv.sexp_of_string v1 + and v2 = sexp_of_enumType v2 + in Sexp.List [ Sexp.Atom "Enum"; v1; v2 ] + | StructUnion ((v1, v2, v3)) -> + let v1 = sexp_of_structUnion v1 + and v2 = Conv.sexp_of_option Conv.sexp_of_string v2 + and v3 = sexp_of_structType v3 + in Sexp.List [ Sexp.Atom "StructUnion"; v1; v2; v3 ] + | EnumName v1 -> + let v1 = Conv.sexp_of_string v1 + in Sexp.List [ Sexp.Atom "EnumName"; v1 ] + | StructUnionName ((v1, v2)) -> + let v1 = sexp_of_structUnion v1 + and v2 = Conv.sexp_of_string v2 + in Sexp.List [ Sexp.Atom "StructUnionName"; v1; v2 ] + | TypeName ((v1, v2)) -> + let v1 = sexp_of_name v1 + and v2 = Conv.sexp_of_option sexp_of_fullType v2 + in Sexp.List [ Sexp.Atom "TypeName"; v1; v2 ] + | ParenType v1 -> + let v1 = sexp_of_fullType v1 in Sexp.List [ Sexp.Atom "ParenType"; v1 ] + | TypeOfExpr v1 -> + let v1 = sexp_of_expression v1 + in Sexp.List [ Sexp.Atom "TypeOfExpr"; v1 ] + | TypeOfType v1 -> + let v1 = sexp_of_fullType v1 + in Sexp.List [ Sexp.Atom "TypeOfType"; v1 ] +and sexp_of_baseType = + function + | Void -> Sexp.Atom "Void" + | IntType v1 -> + let v1 = sexp_of_intType v1 in Sexp.List [ Sexp.Atom "IntType"; v1 ] + | FloatType v1 -> + let v1 = sexp_of_floatType v1 + in Sexp.List [ Sexp.Atom "FloatType"; v1 ] +and sexp_of_intType = + function + | CChar -> Sexp.Atom "CChar" + | Si v1 -> let v1 = sexp_of_signed v1 in Sexp.List [ Sexp.Atom "Si"; v1 ] +and sexp_of_signed (v1, v2) = + let v1 = sexp_of_sign v1 and v2 = sexp_of_base v2 in Sexp.List [ v1; v2 ] +and sexp_of_base = + function + | CChar2 -> Sexp.Atom "CChar2" + | CShort -> Sexp.Atom "CShort" + | CInt -> Sexp.Atom "CInt" + | CLong -> Sexp.Atom "CLong" + | CLongLong -> Sexp.Atom "CLongLong" +and sexp_of_sign = + function | Signed -> Sexp.Atom "Signed" | UnSigned -> Sexp.Atom "UnSigned" +and sexp_of_floatType = + function + | CFloat -> Sexp.Atom "CFloat" + | CDouble -> Sexp.Atom "CDouble" + | CLongDouble -> Sexp.Atom "CLongDouble" +and sexp_of_structUnion = + function | Struct -> Sexp.Atom "Struct" | Union -> Sexp.Atom "Union" +and sexp_of_structType v = Conv.sexp_of_list sexp_of_field v +and sexp_of_field = + function + | DeclarationField v1 -> + let v1 = sexp_of_field_declaration v1 + in Sexp.List [ Sexp.Atom "DeclarationField"; v1 ] + | EmptyField v1 -> + let v1 = sexp_of_info v1 in Sexp.List [ Sexp.Atom "EmptyField"; v1 ] + | MacroDeclField v1 -> + let v1 = + sexp_of_wrap + (fun (v1, v2) -> + let v1 = Conv.sexp_of_string v1 + and v2 = Conv.sexp_of_list (sexp_of_wrap2 sexp_of_argument) v2 + in Sexp.List [ v1; v2 ]) + v1 + in Sexp.List [ Sexp.Atom "MacroDeclField"; v1 ] + | CppDirectiveStruct v1 -> + let v1 = sexp_of_cpp_directive v1 + in Sexp.List [ Sexp.Atom "CppDirectiveStruct"; v1 ] + | IfdefStruct v1 -> + let v1 = sexp_of_ifdef_directive v1 + in Sexp.List [ Sexp.Atom "IfdefStruct"; v1 ] +and sexp_of_field_declaration = + function + | FieldDeclList v1 -> + let v1 = + sexp_of_wrap (Conv.sexp_of_list (sexp_of_wrap2 sexp_of_fieldkind)) v1 + in Sexp.List [ Sexp.Atom "FieldDeclList"; v1 ] +and sexp_of_fieldkind = + function + | Simple ((v1, v2)) -> + let v1 = Conv.sexp_of_option sexp_of_name v1 + and v2 = sexp_of_fullType v2 + in Sexp.List [ Sexp.Atom "Simple"; v1; v2 ] + | BitField ((v1, v2, v3, v4)) -> + let v1 = Conv.sexp_of_option sexp_of_name v1 + and v2 = sexp_of_fullType v2 + and v3 = sexp_of_info v3 + and v4 = sexp_of_constExpression v4 + in Sexp.List [ Sexp.Atom "BitField"; v1; v2; v3; v4 ] +and sexp_of_enumType v = + Conv.sexp_of_list + (sexp_of_wrap2 + (fun (v1, v2) -> + let v1 = sexp_of_name v1 + and v2 = + Conv.sexp_of_option + (fun (v1, v2) -> + let v1 = sexp_of_info v1 + and v2 = sexp_of_constExpression v2 + in Sexp.List [ v1; v2 ]) + v2 + in Sexp.List [ v1; v2 ])) + v +and sexp_of_functionType (v1, v2) = + let v1 = sexp_of_fullType v1 + and v2 = + match v2 with + | (v1, v2) -> + let v1 = Conv.sexp_of_list (sexp_of_wrap2 sexp_of_parameterType) v1 + and v2 = sexp_of_wrap Conv.sexp_of_bool v2 + in Sexp.List [ v1; v2 ] + in Sexp.List [ v1; v2 ] +and + sexp_of_parameterType { + p_namei = v_p_namei; + p_register = v_p_register; + p_type = v_p_type + } = + let bnds = [] in + let arg = sexp_of_fullType v_p_type in + let bnd = Sexp.List [ Sexp.Atom "p_type"; arg ] in + let bnds = bnd :: bnds in + let arg = sexp_of_wrap Conv.sexp_of_bool v_p_register in + let bnd = Sexp.List [ Sexp.Atom "p_register"; arg ] in + let bnds = bnd :: bnds in + let arg = Conv.sexp_of_option sexp_of_name v_p_namei in + let bnd = Sexp.List [ Sexp.Atom "p_namei"; arg ] in + let bnds = bnd :: bnds in Sexp.List bnds +and sexp_of_typeQualifier v = sexp_of_wrap sexp_of_typeQualifierbis v +and sexp_of_typeQualifierbis { const = v_const; volatile = v_volatile } = + if not !show_qualifier then Sexp.Atom "" + else + let bnds = [] in + let arg = Conv.sexp_of_bool v_volatile in + let bnd = Sexp.List [ Sexp.Atom "volatile"; arg ] in + let bnds = bnd :: bnds in + let arg = Conv.sexp_of_bool v_const in + let bnd = Sexp.List [ Sexp.Atom "const"; arg ] in + let bnds = bnd :: bnds in Sexp.List bnds +and sexp_of_attribute v = sexp_of_wrap sexp_of_attributebis v +and sexp_of_attributebis = + function + | Attribute v1 -> + let v1 = Conv.sexp_of_string v1 + in Sexp.List [ Sexp.Atom "Attribute"; v1 ] +and sexp_of_expression v = + sexp_of_wrap + (fun (v1, v2) -> + let v1 = sexp_of_expressionbis v1 + and v2 = + if not !show_expr_info then Sexp.Atom "" + else Conv.sexp_of_ref sexp_of_exp_info v2 + in Sexp.List [ v1; v2 ]) + v +and sexp_of_exp_info (v1, v2) = + let v1 = Conv.sexp_of_option sexp_of_exp_type v1 + and v2 = sexp_of_test v2 + in Sexp.List [ v1; v2 ] +and sexp_of_exp_type (v1, v2) = + let v1 = sexp_of_fullType v1 + and v2 = sexp_of_local v2 + in Sexp.List [ v1; v2 ] +and sexp_of_local = + function + | LocalVar v1 -> + let v1 = sexp_of_parse_info v1 + in Sexp.List [ Sexp.Atom "LocalVar"; v1 ] + | NotLocalVar -> Sexp.Atom "NotLocalVar" +and sexp_of_test = + function | Test -> Sexp.Atom "Test" | NotTest -> Sexp.Atom "NotTest" +and sexp_of_expressionbis = + function + | Ident v1 -> + let v1 = sexp_of_name v1 in Sexp.List [ Sexp.Atom "Ident"; v1 ] + | Constant v1 -> + let v1 = sexp_of_constant v1 in Sexp.List [ Sexp.Atom "Constant"; v1 ] + | FunCall ((v1, v2)) -> + let v1 = sexp_of_expression v1 + and v2 = Conv.sexp_of_list (sexp_of_wrap2 sexp_of_argument) v2 + in Sexp.List [ Sexp.Atom "FunCall"; v1; v2 ] + | CondExpr ((v1, v2, v3)) -> + let v1 = sexp_of_expression v1 + and v2 = Conv.sexp_of_option sexp_of_expression v2 + and v3 = sexp_of_expression v3 + in Sexp.List [ Sexp.Atom "CondExpr"; v1; v2; v3 ] + | Sequence ((v1, v2)) -> + let v1 = sexp_of_expression v1 + and v2 = sexp_of_expression v2 + in Sexp.List [ Sexp.Atom "Sequence"; v1; v2 ] + | Assignment ((v1, v2, v3)) -> + let v1 = sexp_of_expression v1 + and v2 = sexp_of_assignOp v2 + and v3 = sexp_of_expression v3 + in Sexp.List [ Sexp.Atom "Assignment"; v1; v2; v3 ] + | Postfix ((v1, v2)) -> + let v1 = sexp_of_expression v1 + and v2 = sexp_of_fixOp v2 + in Sexp.List [ Sexp.Atom "Postfix"; v1; v2 ] + | Infix ((v1, v2)) -> + let v1 = sexp_of_expression v1 + and v2 = sexp_of_fixOp v2 + in Sexp.List [ Sexp.Atom "Infix"; v1; v2 ] + | Unary ((v1, v2)) -> + let v1 = sexp_of_expression v1 + and v2 = sexp_of_unaryOp v2 + in Sexp.List [ Sexp.Atom "Unary"; v1; v2 ] + | Binary ((v1, v2, v3)) -> + let v1 = sexp_of_expression v1 + and v2 = sexp_of_binaryOp v2 + and v3 = sexp_of_expression v3 + in Sexp.List [ Sexp.Atom "Binary"; v1; v2; v3 ] + | ArrayAccess ((v1, v2)) -> + let v1 = sexp_of_expression v1 + and v2 = sexp_of_expression v2 + in Sexp.List [ Sexp.Atom "ArrayAccess"; v1; v2 ] + | RecordAccess ((v1, v2)) -> + let v1 = sexp_of_expression v1 + and v2 = sexp_of_name v2 + in Sexp.List [ Sexp.Atom "RecordAccess"; v1; v2 ] + | RecordPtAccess ((v1, v2)) -> + let v1 = sexp_of_expression v1 + and v2 = sexp_of_name v2 + in Sexp.List [ Sexp.Atom "RecordPtAccess"; v1; v2 ] + | SizeOfExpr v1 -> + let v1 = sexp_of_expression v1 + in Sexp.List [ Sexp.Atom "SizeOfExpr"; v1 ] + | SizeOfType v1 -> + let v1 = sexp_of_fullType v1 + in Sexp.List [ Sexp.Atom "SizeOfType"; v1 ] + | Cast ((v1, v2)) -> + let v1 = sexp_of_fullType v1 + and v2 = sexp_of_expression v2 + in Sexp.List [ Sexp.Atom "Cast"; v1; v2 ] + | StatementExpr v1 -> + let v1 = sexp_of_wrap sexp_of_compound v1 + in Sexp.List [ Sexp.Atom "StatementExpr"; v1 ] + | Constructor ((v1, v2)) -> + let v1 = sexp_of_fullType v1 + and v2 = Conv.sexp_of_list (sexp_of_wrap2 sexp_of_initialiser) v2 + in Sexp.List [ Sexp.Atom "Constructor"; v1; v2 ] + | ParenExpr v1 -> + let v1 = sexp_of_expression v1 + in Sexp.List [ Sexp.Atom "ParenExpr"; v1 ] +and sexp_of_argument v = + Common.sexp_of_either sexp_of_expression sexp_of_weird_argument v +and sexp_of_weird_argument = + function + | ArgType v1 -> + let v1 = sexp_of_parameterType v1 + in Sexp.List [ Sexp.Atom "ArgType"; v1 ] + | ArgAction v1 -> + let v1 = sexp_of_action_macro v1 + in Sexp.List [ Sexp.Atom "ArgAction"; v1 ] +and sexp_of_action_macro = + function + | ActMisc v1 -> + let v1 = sexp_of_il v1 in Sexp.List [ Sexp.Atom "ActMisc"; v1 ] +and sexp_of_constant = + function + | String v1 -> + let v1 = + (match v1 with + | (v1, v2) -> + let v1 = Conv.sexp_of_string v1 + and v2 = sexp_of_isWchar v2 + in Sexp.List [ v1; v2 ]) + in Sexp.List [ Sexp.Atom "String"; v1 ] + | MultiString v1 -> + let v1 = Conv.sexp_of_list Conv.sexp_of_string v1 + in Sexp.List [ Sexp.Atom "MultiString"; v1 ] + | Char v1 -> + let v1 = + (match v1 with + | (v1, v2) -> + let v1 = Conv.sexp_of_string v1 + and v2 = sexp_of_isWchar v2 + in Sexp.List [ v1; v2 ]) + in Sexp.List [ Sexp.Atom "Char"; v1 ] + | Int (v1, _todo) -> + let v1 = Conv.sexp_of_string v1 in Sexp.List [ Sexp.Atom "Int"; v1 ] + | Float v1 -> + let v1 = + (match v1 with + | (v1, v2) -> + let v1 = Conv.sexp_of_string v1 + and v2 = sexp_of_floatType v2 + in Sexp.List [ v1; v2 ]) + in Sexp.List [ Sexp.Atom "Float"; v1 ] +and sexp_of_isWchar = + function | IsWchar -> Sexp.Atom "IsWchar" | IsChar -> Sexp.Atom "IsChar" +and sexp_of_unaryOp = + function + | GetRef -> Sexp.Atom "GetRef" + | DeRef -> Sexp.Atom "DeRef" + | UnPlus -> Sexp.Atom "UnPlus" + | UnMinus -> Sexp.Atom "UnMinus" + | Tilde -> Sexp.Atom "Tilde" + | Not -> Sexp.Atom "Not" + | GetRefLabel -> Sexp.Atom "GetRefLabel" +and sexp_of_assignOp = + function + | SimpleAssign -> Sexp.Atom "SimpleAssign" + | OpAssign v1 -> + let v1 = sexp_of_arithOp v1 in Sexp.List [ Sexp.Atom "OpAssign"; v1 ] +and sexp_of_fixOp = + function | Dec -> Sexp.Atom "Dec" | Inc -> Sexp.Atom "Inc" +and sexp_of_binaryOp = + function + | Arith v1 -> + let v1 = sexp_of_arithOp v1 in Sexp.List [ Sexp.Atom "Arith"; v1 ] + | Logical v1 -> + let v1 = sexp_of_logicalOp v1 in Sexp.List [ Sexp.Atom "Logical"; v1 ] +and sexp_of_arithOp = + function + | Plus -> Sexp.Atom "Plus" + | Minus -> Sexp.Atom "Minus" + | Mul -> Sexp.Atom "Mul" + | Div -> Sexp.Atom "Div" + | Mod -> Sexp.Atom "Mod" + | DecLeft -> Sexp.Atom "DecLeft" + | DecRight -> Sexp.Atom "DecRight" + | And -> Sexp.Atom "And" + | Or -> Sexp.Atom "Or" + | Xor -> Sexp.Atom "Xor" +and sexp_of_logicalOp = + function + | Inf -> Sexp.Atom "Inf" + | Sup -> Sexp.Atom "Sup" + | InfEq -> Sexp.Atom "InfEq" + | SupEq -> Sexp.Atom "SupEq" + | Eq -> Sexp.Atom "Eq" + | NotEq -> Sexp.Atom "NotEq" + | AndLog -> Sexp.Atom "AndLog" + | OrLog -> Sexp.Atom "OrLog" +and sexp_of_constExpression v = sexp_of_expression v +and sexp_of_statement v = sexp_of_wrap sexp_of_statementbis v +and sexp_of_statementbis = + function + | Labeled v1 -> + let v1 = sexp_of_labeled v1 in Sexp.List [ Sexp.Atom "Labeled"; v1 ] + | Compound v1 -> + let v1 = sexp_of_compound v1 in Sexp.List [ Sexp.Atom "Compound"; v1 ] + | ExprStatement v1 -> + let v1 = sexp_of_exprStatement v1 + in Sexp.List [ Sexp.Atom "ExprStatement"; v1 ] + | Selection v1 -> + let v1 = sexp_of_selection v1 + in Sexp.List [ Sexp.Atom "Selection"; v1 ] + | Iteration v1 -> + let v1 = sexp_of_iteration v1 + in Sexp.List [ Sexp.Atom "Iteration"; v1 ] + | Jump v1 -> let v1 = sexp_of_jump v1 in Sexp.List [ Sexp.Atom "Jump"; v1 ] + | Decl v1 -> + let v1 = sexp_of_declaration v1 in Sexp.List [ Sexp.Atom "Decl"; v1 ] + | Asm v1 -> + let v1 = sexp_of_asmbody v1 in Sexp.List [ Sexp.Atom "Asm"; v1 ] + | NestedFunc v1 -> + let v1 = sexp_of_definition v1 + in Sexp.List [ Sexp.Atom "NestedFunc"; v1 ] + | MacroStmt -> Sexp.Atom "MacroStmt" +and sexp_of_labeled = + function + | Label ((v1, v2)) -> + let v1 = sexp_of_name v1 + and v2 = sexp_of_statement v2 + in Sexp.List [ Sexp.Atom "Label"; v1; v2 ] + | Case ((v1, v2)) -> + let v1 = sexp_of_expression v1 + and v2 = sexp_of_statement v2 + in Sexp.List [ Sexp.Atom "Case"; v1; v2 ] + | CaseRange ((v1, v2, v3)) -> + let v1 = sexp_of_expression v1 + and v2 = sexp_of_expression v2 + and v3 = sexp_of_statement v3 + in Sexp.List [ Sexp.Atom "CaseRange"; v1; v2; v3 ] + | Default v1 -> + let v1 = sexp_of_statement v1 in Sexp.List [ Sexp.Atom "Default"; v1 ] +and sexp_of_compound v = Conv.sexp_of_list sexp_of_statement_sequencable v +and sexp_of_statement_sequencable = + function + | StmtElem v1 -> + let v1 = sexp_of_statement v1 in Sexp.List [ Sexp.Atom "StmtElem"; v1 ] + | CppDirectiveStmt v1 -> + let v1 = sexp_of_cpp_directive v1 + in Sexp.List [ Sexp.Atom "CppDirectiveStmt"; v1 ] + | IfdefStmt v1 -> + let v1 = sexp_of_ifdef_directive v1 + in Sexp.List [ Sexp.Atom "IfdefStmt"; v1 ] + | IfdefStmt2 ((v1, v2)) -> + let v1 = Conv.sexp_of_list sexp_of_ifdef_directive v1 + and v2 = + Conv.sexp_of_list (Conv.sexp_of_list sexp_of_statement_sequencable) + v2 + in Sexp.List [ Sexp.Atom "IfdefStmt2"; v1; v2 ] +and sexp_of_exprStatement v = Conv.sexp_of_option sexp_of_expression v +and sexp_of_selection = + function + | If ((v1, v2, v3)) -> + let v1 = sexp_of_expression v1 + and v2 = sexp_of_statement v2 + and v3 = sexp_of_statement v3 + in Sexp.List [ Sexp.Atom "If"; v1; v2; v3 ] + | Switch ((v1, v2)) -> + let v1 = sexp_of_expression v1 + and v2 = sexp_of_statement v2 + in Sexp.List [ Sexp.Atom "Switch"; v1; v2 ] +and sexp_of_iteration = + function + | While ((v1, v2)) -> + let v1 = sexp_of_expression v1 + and v2 = sexp_of_statement v2 + in Sexp.List [ Sexp.Atom "While"; v1; v2 ] + | DoWhile ((v1, v2)) -> + let v1 = sexp_of_statement v1 + and v2 = sexp_of_expression v2 + in Sexp.List [ Sexp.Atom "DoWhile"; v1; v2 ] + | For ((v1, v2, v3, v4)) -> + let v1 = sexp_of_wrap sexp_of_exprStatement v1 + and v2 = sexp_of_wrap sexp_of_exprStatement v2 + and v3 = sexp_of_wrap sexp_of_exprStatement v3 + and v4 = sexp_of_statement v4 + in Sexp.List [ Sexp.Atom "For"; v1; v2; v3; v4 ] + | MacroIteration ((v1, v2, v3)) -> + let v1 = Conv.sexp_of_string v1 + and v2 = Conv.sexp_of_list (sexp_of_wrap2 sexp_of_argument) v2 + and v3 = sexp_of_statement v3 + in Sexp.List [ Sexp.Atom "MacroIteration"; v1; v2; v3 ] +and sexp_of_jump = + function + | Goto v1 -> let v1 = sexp_of_name v1 in Sexp.List [ Sexp.Atom "Goto"; v1 ] + | Continue -> Sexp.Atom "Continue" + | Break -> Sexp.Atom "Break" + | Return -> Sexp.Atom "Return" + | ReturnExpr v1 -> + let v1 = sexp_of_expression v1 + in Sexp.List [ Sexp.Atom "ReturnExpr"; v1 ] + | GotoComputed v1 -> + let v1 = sexp_of_expression v1 + in Sexp.List [ Sexp.Atom "GotoComputed"; v1 ] +and sexp_of_asmbody (v1, v2) = + let v1 = sexp_of_il v1 + and v2 = Conv.sexp_of_list (sexp_of_wrap sexp_of_colon) v2 + in Sexp.List [ v1; v2 ] +and sexp_of_colon = + function + | Colon v1 -> + let v1 = Conv.sexp_of_list (sexp_of_wrap2 sexp_of_colon_option) v1 + in Sexp.List [ Sexp.Atom "Colon"; v1 ] +and sexp_of_colon_option v = sexp_of_wrap sexp_of_colon_option_bis v +and sexp_of_colon_option_bis = + function + | ColonMisc -> Sexp.Atom "ColonMisc" + | ColonExpr v1 -> + let v1 = sexp_of_expression v1 + in Sexp.List [ Sexp.Atom "ColonExpr"; v1 ] +and sexp_of_declaration = + function + | DeclList v1 -> + let v1 = + sexp_of_wrap (Conv.sexp_of_list (sexp_of_wrap2 sexp_of_onedecl)) v1 + in Sexp.List [ Sexp.Atom "DeclList"; v1 ] + | MacroDecl v1 -> + let v1 = + sexp_of_wrap + (fun (v1, v2) -> + let v1 = Conv.sexp_of_string v1 + and v2 = Conv.sexp_of_list (sexp_of_wrap2 sexp_of_argument) v2 + in Sexp.List [ v1; v2 ]) + v1 + in Sexp.List [ Sexp.Atom "MacroDecl"; v1 ] +and + sexp_of_onedecl { + v_namei = v_v_namei; + v_type = v_v_type; + v_type_bis = v_v_type_bis; + v_storage = v_v_storage; + v_local = v_v_local; + v_attr = v_v_attr + } = + let bnds = [] in + let arg = Conv.sexp_of_list sexp_of_attribute v_v_attr in + let bnd = Sexp.List [ Sexp.Atom "v_attr"; arg ] in + let bnds = bnd :: bnds in + let arg = sexp_of_local_decl v_v_local in + let bnd = Sexp.List [ Sexp.Atom "v_local"; arg ] in + let bnds = bnd :: bnds in + let arg = sexp_of_storage v_v_storage in + let bnd = Sexp.List [ Sexp.Atom "v_storage"; arg ] in + let bnds = bnd :: bnds in + let arg = + Conv.sexp_of_ref (Conv.sexp_of_option sexp_of_fullType) v_v_type_bis in + let bnd = Sexp.List [ Sexp.Atom "v_type_bis"; arg ] in + let bnds = bnd :: bnds in + let arg = sexp_of_fullType v_v_type in + let bnd = Sexp.List [ Sexp.Atom "v_type"; arg ] in + let bnds = bnd :: bnds in + let arg = + Conv.sexp_of_option + (fun (v1, v2) -> + let v1 = sexp_of_name v1 + and v2 = + Conv.sexp_of_option + (fun (v1, v2) -> + let v1 = sexp_of_info v1 + and v2 = sexp_of_initialiser v2 + in Sexp.List [ v1; v2 ]) + v2 + in Sexp.List [ v1; v2 ]) + v_v_namei in + let bnd = Sexp.List [ Sexp.Atom "v_namei"; arg ] in + let bnds = bnd :: bnds in Sexp.List bnds +and sexp_of_storage (v1, v2) = + let v1 = sexp_of_storagebis v1 + and v2 = Conv.sexp_of_bool v2 + in Sexp.List [ v1; v2 ] +and sexp_of_storagebis = + function + | NoSto -> Sexp.Atom "NoSto" + | StoTypedef -> Sexp.Atom "StoTypedef" + | Sto v1 -> + let v1 = sexp_of_storageClass v1 in Sexp.List [ Sexp.Atom "Sto"; v1 ] +and sexp_of_storageClass = + function + | Auto -> Sexp.Atom "Auto" + | Static -> Sexp.Atom "Static" + | Register -> Sexp.Atom "Register" + | Extern -> Sexp.Atom "Extern" +and sexp_of_local_decl = + function + | LocalDecl -> Sexp.Atom "LocalDecl" + | NotLocalDecl -> Sexp.Atom "NotLocalDecl" +and sexp_of_initialiser v = sexp_of_wrap sexp_of_initialiserbis v +and sexp_of_initialiserbis = + function + | InitExpr v1 -> + let v1 = sexp_of_expression v1 + in Sexp.List [ Sexp.Atom "InitExpr"; v1 ] + | InitList v1 -> + let v1 = Conv.sexp_of_list (sexp_of_wrap2 sexp_of_initialiser) v1 + in Sexp.List [ Sexp.Atom "InitList"; v1 ] + | InitDesignators ((v1, v2)) -> + let v1 = Conv.sexp_of_list sexp_of_designator v1 + and v2 = sexp_of_initialiser v2 + in Sexp.List [ Sexp.Atom "InitDesignators"; v1; v2 ] + | InitFieldOld ((v1, v2)) -> + let v1 = Conv.sexp_of_string v1 + and v2 = sexp_of_initialiser v2 + in Sexp.List [ Sexp.Atom "InitFieldOld"; v1; v2 ] + | InitIndexOld ((v1, v2)) -> + let v1 = sexp_of_expression v1 + and v2 = sexp_of_initialiser v2 + in Sexp.List [ Sexp.Atom "InitIndexOld"; v1; v2 ] +and sexp_of_designator v = sexp_of_wrap sexp_of_designatorbis v +and sexp_of_designatorbis = + function + | DesignatorField v1 -> + let v1 = Conv.sexp_of_string v1 + in Sexp.List [ Sexp.Atom "DesignatorField"; v1 ] + | DesignatorIndex v1 -> + let v1 = sexp_of_expression v1 + in Sexp.List [ Sexp.Atom "DesignatorIndex"; v1 ] + | DesignatorRange ((v1, v2)) -> + let v1 = sexp_of_expression v1 + and v2 = sexp_of_expression v2 + in Sexp.List [ Sexp.Atom "DesignatorRange"; v1; v2 ] +and sexp_of_definition v = sexp_of_wrap sexp_of_definitionbis v +and + sexp_of_definitionbis { + f_name = v_f_name; + f_type = v_f_type; + f_storage = v_f_storage; + f_body = v_f_body; + f_attr = v_f_attr; + f_old_c_style = v_f_old_c_style + } = + let bnds = [] in + let arg = + Conv.sexp_of_option (Conv.sexp_of_list sexp_of_declaration) + v_f_old_c_style in + let bnd = Sexp.List [ Sexp.Atom "f_old_c_style"; arg ] in + let bnds = bnd :: bnds in + let arg = Conv.sexp_of_list sexp_of_attribute v_f_attr in + let bnd = Sexp.List [ Sexp.Atom "f_attr"; arg ] in + let bnds = bnd :: bnds in + let arg = sexp_of_compound v_f_body in + let bnd = Sexp.List [ Sexp.Atom "f_body"; arg ] in + let bnds = bnd :: bnds in + let arg = sexp_of_storage v_f_storage in + let bnd = Sexp.List [ Sexp.Atom "f_storage"; arg ] in + let bnds = bnd :: bnds in + let arg = sexp_of_functionType v_f_type in + let bnd = Sexp.List [ Sexp.Atom "f_type"; arg ] in + let bnds = bnd :: bnds in + let arg = sexp_of_name v_f_name in + let bnd = Sexp.List [ Sexp.Atom "f_name"; arg ] in + let bnds = bnd :: bnds in Sexp.List bnds +and sexp_of_cpp_directive = + function + | Define v1 -> + let v1 = sexp_of_define v1 in Sexp.List [ Sexp.Atom "Define"; v1 ] + | Include v1 -> + let v1 = sexp_of_includ v1 in Sexp.List [ Sexp.Atom "Include"; v1 ] + | Undef v1 -> + let v1 = sexp_of_wrap Conv.sexp_of_string v1 + in Sexp.List [ Sexp.Atom "Undef"; v1 ] + | PragmaAndCo v1 -> + let v1 = sexp_of_il v1 in Sexp.List [ Sexp.Atom "PragmaAndCo"; v1 ] +and sexp_of_define (v1, v2) = + let v1 = sexp_of_wrap Conv.sexp_of_string v1 + and v2 = + match v2 with + | (v1, v2) -> + let v1 = sexp_of_define_kind v1 + and v2 = sexp_of_define_val v2 + in Sexp.List [ v1; v2 ] + in Sexp.List [ v1; v2 ] +and sexp_of_define_kind = + function + | DefineVar -> Sexp.Atom "DefineVar" + | DefineFunc v1 -> + let v1 = + sexp_of_wrap + (Conv.sexp_of_list + (sexp_of_wrap2 (sexp_of_wrap Conv.sexp_of_string))) + v1 + in Sexp.List [ Sexp.Atom "DefineFunc"; v1 ] +and sexp_of_define_val = + function + | DefineExpr v1 -> + let v1 = sexp_of_expression v1 + in Sexp.List [ Sexp.Atom "DefineExpr"; v1 ] + | DefineStmt v1 -> + let v1 = sexp_of_statement v1 + in Sexp.List [ Sexp.Atom "DefineStmt"; v1 ] + | DefineType v1 -> + let v1 = sexp_of_fullType v1 + in Sexp.List [ Sexp.Atom "DefineType"; v1 ] + | DefineDoWhileZero v1 -> + let v1 = + sexp_of_wrap + (fun (v1, v2) -> + let v1 = sexp_of_statement v1 + and v2 = sexp_of_expression v2 + in Sexp.List [ v1; v2 ]) + v1 + in Sexp.List [ Sexp.Atom "DefineDoWhileZero"; v1 ] + | DefineFunction v1 -> + let v1 = sexp_of_definition v1 + in Sexp.List [ Sexp.Atom "DefineFunction"; v1 ] + | DefineInit v1 -> + let v1 = sexp_of_initialiser v1 + in Sexp.List [ Sexp.Atom "DefineInit"; v1 ] + | DefineText v1 -> + let v1 = sexp_of_wrap Conv.sexp_of_string v1 + in Sexp.List [ Sexp.Atom "DefineText"; v1 ] + | DefineEmpty -> Sexp.Atom "DefineEmpty" + | DefineTodo -> Sexp.Atom "DefineTodo" +and + sexp_of_includ { + i_include = v_i_include; + i_rel_pos = v_i_rel_pos; + i_is_in_ifdef = v_i_is_in_ifdef; + i_content = v_i_content + } = + let bnds = [] in + let arg = + Conv.sexp_of_option + (fun (v1, v2) -> + let v1 = Common.sexp_of_filename v1 + and v2 = sexp_of_program v2 + in Sexp.List [ v1; v2 ]) + v_i_content in + let bnd = Sexp.List [ Sexp.Atom "i_content"; arg ] in + let bnds = bnd :: bnds in + let arg = Conv.sexp_of_bool v_i_is_in_ifdef in + let bnd = Sexp.List [ Sexp.Atom "i_is_in_ifdef"; arg ] in + let bnds = bnd :: bnds in + let arg = + Conv.sexp_of_ref (Conv.sexp_of_option sexp_of_include_rel_pos) + v_i_rel_pos in + let bnd = Sexp.List [ Sexp.Atom "i_rel_pos"; arg ] in + let bnds = bnd :: bnds in + let arg = sexp_of_wrap sexp_of_inc_file v_i_include in + let bnd = Sexp.List [ Sexp.Atom "i_include"; arg ] in + let bnds = bnd :: bnds in Sexp.List bnds +and sexp_of_inc_file = + function + | Local v1 -> + let v1 = Conv.sexp_of_list sexp_of_inc_elem v1 + in Sexp.List [ Sexp.Atom "Local"; v1 ] + | NonLocal v1 -> + let v1 = Conv.sexp_of_list sexp_of_inc_elem v1 + in Sexp.List [ Sexp.Atom "NonLocal"; v1 ] + | Weird v1 -> + let v1 = Conv.sexp_of_string v1 in Sexp.List [ Sexp.Atom "Weird"; v1 ] +and sexp_of_inc_elem v = Conv.sexp_of_string v +and sexp_of_include_rel_pos { first_of = v_first_of; last_of = v_last_of } = + let bnds = [] in + let arg = + Conv.sexp_of_list (Conv.sexp_of_list Conv.sexp_of_string) v_last_of in + let bnd = Sexp.List [ Sexp.Atom "last_of"; arg ] in + let bnds = bnd :: bnds in + let arg = + Conv.sexp_of_list (Conv.sexp_of_list Conv.sexp_of_string) v_first_of in + let bnd = Sexp.List [ Sexp.Atom "first_of"; arg ] in + let bnds = bnd :: bnds in Sexp.List bnds +and sexp_of_ifdef_directive = + function + | IfdefDirective v1 -> + let v1 = + sexp_of_wrap + (fun (v1, v2) -> + let v1 = sexp_of_ifdefkind v1 + and v2 = sexp_of_matching_tag v2 + in Sexp.List [ v1; v2 ]) + v1 + in Sexp.List [ Sexp.Atom "IfdefDirective"; v1 ] +and sexp_of_ifdefkind = + function + | Ifdef -> Sexp.Atom "Ifdef" + | IfdefElseif -> Sexp.Atom "IfdefElseif" + | IfdefElse -> Sexp.Atom "IfdefElse" + | IfdefEndif -> Sexp.Atom "IfdefEndif" +and sexp_of_matching_tag = + function + | IfdefTag v1 -> + let v1 = + (match v1 with + | (v1, v2) -> + let v1 = Conv.sexp_of_int v1 + and v2 = Conv.sexp_of_int v2 + in Sexp.List [ v1; v2 ]) + in Sexp.List [ Sexp.Atom "IfdefTag"; v1 ] +and sexp_of_toplevel = + function + | Declaration v1 -> + let v1 = sexp_of_declaration v1 + in Sexp.List [ Sexp.Atom "Declaration"; v1 ] + | Definition v1 -> + let v1 = sexp_of_definition v1 + in Sexp.List [ Sexp.Atom "Definition"; v1 ] + | CppTop v1 -> + let v1 = sexp_of_cpp_directive v1 + in Sexp.List [ Sexp.Atom "CppTop"; v1 ] + | IfdefTop v1 -> + let v1 = sexp_of_ifdef_directive v1 + in Sexp.List [ Sexp.Atom "IfdefTop"; v1 ] + | MacroTop ((v1, v2, v3)) -> + let v1 = Conv.sexp_of_string v1 + and v2 = Conv.sexp_of_list (sexp_of_wrap2 sexp_of_argument) v2 + and v3 = sexp_of_il v3 + in Sexp.List [ Sexp.Atom "MacroTop"; v1; v2; v3 ] + | EmptyDef v1 -> + let v1 = sexp_of_il v1 in Sexp.List [ Sexp.Atom "EmptyDef"; v1 ] + | NotParsedCorrectly v1 -> + let v1 = sexp_of_il v1 + in Sexp.List [ Sexp.Atom "NotParsedCorrectly"; v1 ] + | FinalDef v1 -> + let v1 = sexp_of_info v1 in Sexp.List [ Sexp.Atom "FinalDef"; v1 ] +and sexp_of_program v = Conv.sexp_of_list sexp_of_toplevel v + +(* +and sexp_of_metavars_binding v = + failwith "Todo" +(* + Common.sexp_of_assoc Ast_cocci.sexp_of_meta_name sexp_of_metavar_binding_kind v +*) +and sexp_of_metavar_binding_kind = + function + | MetaIdVal v1 -> + let v1 = Conv.sexp_of_string v1 + in Sexp.List [ Sexp.Atom "MetaIdVal"; v1 ] + | MetaFuncVal v1 -> + let v1 = Conv.sexp_of_string v1 + in Sexp.List [ Sexp.Atom "MetaFuncVal"; v1 ] + | MetaLocalFuncVal v1 -> + let v1 = Conv.sexp_of_string v1 + in Sexp.List [ Sexp.Atom "MetaLocalFuncVal"; v1 ] + | MetaExprVal v1 -> + let v1 = sexp_of_expression v1 + in Sexp.List [ Sexp.Atom "MetaExprVal"; v1 ] + | MetaExprListVal v1 -> + let v1 = Conv.sexp_of_list (sexp_of_wrap2 sexp_of_argument) v1 + in Sexp.List [ Sexp.Atom "MetaExprListVal"; v1 ] + | MetaParamVal v1 -> + let v1 = sexp_of_parameterType v1 + in Sexp.List [ Sexp.Atom "MetaParamVal"; v1 ] + | MetaParamListVal v1 -> + let v1 = Conv.sexp_of_list (sexp_of_wrap2 sexp_of_parameterType) v1 + in Sexp.List [ Sexp.Atom "MetaParamListVal"; v1 ] + | MetaTypeVal v1 -> + let v1 = sexp_of_fullType v1 + in Sexp.List [ Sexp.Atom "MetaTypeVal"; v1 ] + | MetaInitVal v1 -> + let v1 = sexp_of_initialiser v1 + in Sexp.List [ Sexp.Atom "MetaInitVal"; v1 ] + | MetaStmtVal v1 -> + let v1 = sexp_of_statement v1 + in Sexp.List [ Sexp.Atom "MetaStmtVal"; v1 ] + | MetaPosVal v1 -> + let v1 = + (match v1 with + | (v1, v2) -> + let v1 = Ast_cocci.sexp_of_fixpos v1 + and v2 = Ast_cocci.sexp_of_fixpos v2 + in Sexp.List [ v1; v2 ]) + in Sexp.List [ Sexp.Atom "MetaPosVal"; v1 ] + | MetaPosValList v1 -> + let v1 = + Conv.sexp_of_list + (fun (v1, v2, v3, v4) -> + let v1 = Common.sexp_of_filename v1 + and v2 = Conv.sexp_of_string v2 + and v3 = sexp_of_posl v3 + and v4 = sexp_of_posl v4 + in Sexp.List [ v1; v2; v3; v4 ]) + v1 + in Sexp.List [ Sexp.Atom "MetaPosValList"; v1 ] + | MetaListlenVal v1 -> + let v1 = Conv.sexp_of_int v1 + in Sexp.List [ Sexp.Atom "MetaListlenVal"; v1 ] + +*) + +(* pad: *) +let string_of_toplevel top = + let sexp = sexp_of_toplevel top in + let s = Sexp.to_string_hum sexp in + s + +let string_of_expression x = + let sexp = sexp_of_expression x in + let s = Sexp.to_string_hum sexp in + s + +let string_of_program xs = + let sexp = sexp_of_program xs in + let s = Sexp.to_string_hum sexp in + s diff --git a/parsing_c/sexp_ast_c.mli b/parsing_c/sexp_ast_c.mli new file mode 100644 index 0000000..c280015 --- /dev/null +++ b/parsing_c/sexp_ast_c.mli @@ -0,0 +1,8 @@ +val string_of_toplevel: Ast_c.toplevel -> string +val string_of_expression: Ast_c.expression -> string + +val string_of_program: Ast_c.program -> string + +val show_info: bool ref +val show_qualifier: bool ref +val show_expr_info: bool ref diff --git a/parsing_c/test_parsing_c.ml b/parsing_c/test_parsing_c.ml index e11d5df..21abaab 100644 --- a/parsing_c/test_parsing_c.ml +++ b/parsing_c/test_parsing_c.ml @@ -58,7 +58,7 @@ let test_parse_gen xs ext = pr2 ""; pr2 ("PARSING: " ^ file); - let (xs, stat) = Parse_c.parse_print_error_heuristic file in + let (xs, stat) = Parse_c.parse_c_and_cpp file in xs +> List.iter (fun (ast, (s, toks)) -> Parse_c.print_commentized toks ); @@ -100,64 +100,11 @@ let test_parse_h xs = let test_parse_ch xs = test_parse_gen xs "[ch]" - -(* ---------------------------------------------------------------------- *) - -let test_parse xs = - - Flag_parsing_c.filter_msg_define_error := true; - Flag_parsing_c.filter_define_error := true; - Flag_parsing_c.verbose_lexing := false; - Flag_parsing_c.verbose_parsing := false; - - let dirname_opt = - match xs with - | [x] when is_directory x -> Some x - | _ -> None - in - dirname_opt +> Common.do_option (fun dir -> - - let ext = "h" in - let fullxs = Common.files_of_dir_or_files_no_vcs ext [dir] in - fullxs +> List.iter (fun file -> - let xs = Parse_c.parse_cpp_define_file file in - xs +> List.iter (fun (x, def) -> - let (s, params, body) = def in - Hashtbl.replace !Parse_c._defs s (s, params, body); - ); - ); - ); - - let ext = "[ch]" in - - let fullxs = Common.files_of_dir_or_files_no_vcs ext xs in - - let stat_list = ref [] in - Common.check_stack_nbfiles (List.length fullxs); - - fullxs +> List.iter (fun file -> - if not (file =~ (".*\\."^ext)) - then pr2 ("warning: seems not a ."^ext^" file"); - - pr2 ""; - pr2 ("PARSING: " ^ file); - - let (xs, stat) = Parse_c.parse_print_error_heuristic file in - xs +> List.iter (fun (ast, (s, toks)) -> - Parse_c.print_commentized toks - ); - - Common.push2 stat stat_list; - ); - - if not (null !stat_list) - then begin - Parsing_stat.print_recurring_problematic_tokens !stat_list; - Parsing_stat.print_parsing_stat_list !stat_list; - end; - () - - +(* could use a simpler parser than heavy parse_c_and_cpp here as there + * is no more cpp stuff in the .i files + *) +let test_parse_i xs = + test_parse_gen xs "i" @@ -180,7 +127,7 @@ let test_cfg file = if not (file =~ ".*\\.c") then pr2 "warning: seems not a .c file"; - let (program, _stat) = Parse_c.parse_print_error_heuristic file in + let (program, _stat) = Parse_c.parse_c_and_cpp file in program +> List.iter (fun (e,_) -> let toprocess = @@ -218,7 +165,7 @@ let test_cfg file = let test_cfg_ifdef file = - let (ast2, _stat) = Parse_c.parse_print_error_heuristic file in + let (ast2, _stat) = Parse_c.parse_c_and_cpp file in let ast = Parse_c.program_of_program2 ast2 in let ast = Cpp_ast_c.cpp_ifdef_statementize ast in @@ -240,7 +187,7 @@ let test_parse_unparse infile = if not (infile =~ ".*\\.c") then pr2 "warning: seems not a .c file"; - let (program2, _stat) = Parse_c.parse_print_error_heuristic infile in + let (program2, _stat) = Parse_c.parse_c_and_cpp infile in let program2_with_ppmethod = program2 +> List.map (fun x -> x, Unparse_c.PPnormal) in @@ -252,6 +199,22 @@ let test_parse_unparse infile = () +let parse_and_print_sexp file = + let (ast2,_stat) = Parse_c.parse_c_and_cpp file in + let ast = Parse_c.program_of_program2 ast2 in + let _ast = + Type_annoter_c.annotate_program !Type_annoter_c.initial_env ast + in + + (* + let sexp = Sexp_ast_c.sexp_of_program ast in + let s = Sexp.to_string_hum sexp in + *) + Sexp_ast_c.show_info := false; + let s = Sexp_ast_c.string_of_program ast in + pr2 s; + () + let test_type_c infile = @@ -260,7 +223,7 @@ let test_type_c infile = Flag_parsing_c.pretty_print_type_info := true; - let (program2, _stat) = Parse_c.parse_print_error_heuristic infile in + let (program2, _stat) = Parse_c.parse_c_and_cpp infile in let _program2 = program2 +> Common.unzip @@ -282,7 +245,7 @@ let test_type_c infile = (* ---------------------------------------------------------------------- *) (* ex: demos/platform_ifdef.c *) let test_comment_annotater infile = - let (program2, _stat) = Parse_c.parse_print_error_heuristic infile in + let (program2, _stat) = Parse_c.parse_c_and_cpp infile in let asts = program2 +> List.map (fun (ast,_) -> ast) in let toks = program2 +> List.map (fun (ast, (s, toks)) -> toks) +> List.flatten in @@ -372,64 +335,117 @@ let test_cpp file = let (ast2, _stat) = Parse_c.parse_c_and_cpp file in let dirname = Filename.dirname file in let ast = Parse_c.program_of_program2 ast2 in - let _ast' = Cpp_ast_c.cpp_expand_include (cpp_options()) dirname ast in + let ast = Cpp_ast_c.cpp_expand_include (cpp_options()) dirname ast in + let _ast = Cpp_ast_c.cpp_ifdef_statementize ast in + () -let extract_macros ~selection x = - (* CONFIG [ch] ? also do for .c ? maybe less needed now that I - * add local_macros. - *) - +(* CONFIG [ch] ? also do for .c ? maybe less needed now that I + * add local_macros. + *) +let extract_macros ~selection dir = let ext = "h" in - let fullxs = Common.files_of_dir_or_files_no_vcs ext [x] in - fullxs +> List.iter (fun file -> - + let fullxs = Common.files_of_dir_or_files_no_vcs ext [dir] in + let macros_and_filename = + fullxs +> List.map (fun file -> + pr2 (spf "processing: %s" file); + let xs = Parse_c.extract_macros file in + file, xs + ) + in + + let macros = + if selection + then Cpp_analysis_c.extract_dangerous_macros macros_and_filename + else macros_and_filename + in + macros +> List.iter (fun (file, defs) -> pr ("/* PARSING: " ^ file ^ " */"); - let xs = Parse_c.parse_cpp_define_file file in - xs +> List.iter (fun (x, def) -> - let (s, params, body) = def in - assert(s = x); - (match params, body with - | Cpp_token_c.NoParam, Cpp_token_c.DefineBody [Parser_c.TInt _] - | Cpp_token_c.NoParam, Cpp_token_c.DefineBody [] -> - () - | _ -> - - let s1 = - match params with - | Cpp_token_c.NoParam -> spf "#define %s " s - | Cpp_token_c.Params xs -> - spf "#define %s(%s) " - s (Common.join "," xs) - in - let s2, bodytoks = - match body with - | Cpp_token_c.DefineHint _ -> - failwith "weird, hint in regular header file" - | Cpp_token_c.DefineBody xs -> - Common.join " " (xs +> List.map Token_helpers.str_of_tok), - xs - in - - let print = - match () with - | () when s ==~ Parsing_hacks.regexp_annot -> true - | () when List.exists (function - | Parser_c.Tattribute _ -> true - | _ -> false) bodytoks -> true - | () -> false - in - if print || not selection then pr (s1 ^ s2) + defs +> List.iter (fun (s, def) -> + let str = Cpp_token_c.string_of_define_def def in + pr str; + ) + ); + () + + +let test_parse xs = + + Flag_parsing_c.filter_msg_define_error := true; + Flag_parsing_c.filter_define_error := true; + Flag_parsing_c.verbose_lexing := false; + Flag_parsing_c.verbose_parsing := false; + + let dirname_opt = + match xs with + | [x] when is_directory x -> Some x + | _ -> None + in + dirname_opt +> Common.do_option (fun dir -> + + let ext = "h" in + let fullxs = Common.files_of_dir_or_files_no_vcs ext [dir] in + + let macros_and_filename = + fullxs +> List.map (fun file -> + pr2 (spf "processing: %s" file); + let xs = Parse_c.extract_macros file in + file, xs + ) + in + let macros = + Cpp_analysis_c.extract_dangerous_macros macros_and_filename + in + macros +> List.iter (fun (file, xs) -> + xs +> List.iter (fun (x, def) -> + let (s, params, body) = def in + let str = Cpp_token_c.string_of_define_def def in + pr str; + (* builtins ? *) + Hashtbl.replace !Parse_c._defs_builtins s (s, params, body); ); ); ); + + let ext = "[ch]" in + + let fullxs = Common.files_of_dir_or_files_no_vcs ext xs in + + let stat_list = ref [] in + Common.check_stack_nbfiles (List.length fullxs); + + fullxs +> List.iter (fun file -> + if not (file =~ (".*\\."^ext)) + then pr2 ("warning: seems not a ."^ext^" file"); + + pr2 ""; + pr2 ("PARSING: " ^ file); + + let (xs, stat) = Parse_c.parse_c_and_cpp file in + xs +> List.iter (fun (ast, (s, toks)) -> + Parse_c.print_commentized toks + ); + + Common.push2 stat stat_list; + ); + + if not (null !stat_list) + then begin + Parsing_stat.print_recurring_problematic_tokens !stat_list; + Parsing_stat.print_parsing_stat_list !stat_list; + end; () + + + + + (* ---------------------------------------------------------------------- *) let test_xxx a = () @@ -460,6 +476,8 @@ let actions () = [ Common.mk_action_n_arg test_parse_h; "-parse_ch", " ", Common.mk_action_n_arg test_parse_ch; + "-parse_i", " ", + Common.mk_action_n_arg test_parse_i; "-parse", " ", Common.mk_action_n_arg test_parse; @@ -472,6 +490,8 @@ let actions () = [ Common.mk_action_1_arg test_cfg_ifdef; "-parse_unparse", " ", Common.mk_action_1_arg test_parse_unparse; + "-parse_and_print_sexp", " ", + Common.mk_action_1_arg parse_and_print_sexp; "-type_c", " ", Common.mk_action_1_arg test_type_c; "-compare_c", " ", diff --git a/parsing_c/token_c.ml b/parsing_c/token_c.ml index 7c8e6e7..38a5333 100644 --- a/parsing_c/token_c.ml +++ b/parsing_c/token_c.ml @@ -43,7 +43,7 @@ open Common *) (*****************************************************************************) -(* Cpp constructs put it comments in lexer or parsing_hack *) +(* Cpp constructs put in comments in lexer or parsing_hack *) (*****************************************************************************) (* history: was in ast_c.ml before: diff --git a/parsing_c/token_helpers.ml b/parsing_c/token_helpers.ml index d7e60ca..52d7336 100644 --- a/parsing_c/token_helpers.ml +++ b/parsing_c/token_helpers.ml @@ -350,6 +350,7 @@ let info_of_tok = function | Tsizeof (i) -> i | Tasm (i) -> i | Tattribute (i) -> i + | TattributeNoarg (i) -> i | Tinline (i) -> i | Ttypeof (i) -> i @@ -499,6 +500,7 @@ let visitor_info_of_tok f = function | Tsizeof (i) -> Tsizeof (f i) | Tasm (i) -> Tasm (f i) | Tattribute (i) -> Tattribute (f i) + | TattributeNoarg (i) -> TattributeNoarg (f i) | Tinline (i) -> Tinline (f i) | Ttypeof (i) -> Ttypeof (f i) | EOF (i) -> EOF (f i) diff --git a/parsing_c/token_helpers.mli b/parsing_c/token_helpers.mli index 3fff96d..d2a3ceb 100644 --- a/parsing_c/token_helpers.mli +++ b/parsing_c/token_helpers.mli @@ -29,11 +29,13 @@ val is_cbrace : Parser_c.token -> bool val is_ident_like: Parser_c.token -> bool +(* ---------------------------------------------------------------------- *) val info_of_tok : Parser_c.token -> Ast_c.info val visitor_info_of_tok : (Ast_c.info -> Ast_c.info) -> Parser_c.token -> Parser_c.token +(* ---------------------------------------------------------------------- *) val linecol_of_tok : Parser_c.token -> int * int val col_of_tok : Parser_c.token -> int val line_of_tok : Parser_c.token -> int diff --git a/parsing_c/type_annoter_c.ml b/parsing_c/type_annoter_c.ml index 7b8ef84..2535b3a 100644 --- a/parsing_c/type_annoter_c.ml +++ b/parsing_c/type_annoter_c.ml @@ -461,15 +461,6 @@ let type_of_s a = * I now add a fake parse_info for such default int so no more failwith * normally. *) -let offset ft = - let (qu, ty) = ft in - (* bugfix: because of string->name, the ii can be deeper *) - let ii = Ast_c.get_local_ii_of_tybis_inlining_ii_of_name ty in - match ii with - | ii::_ -> ii.Ast_c.pinfo - | [] -> failwith "type has no text; need to think again" - - let rec is_simple_expr expr = match Ast_c.unwrap_expr expr with @@ -1047,7 +1038,8 @@ let rec visit_toplevel ~just_add_in_env ~depth elem = (match d with | (DeclList (xs, ii)) -> xs +> List.iter (fun ({v_namei = var; v_type = t; - v_storage = sto; v_local = local}, iicomma) -> + v_storage = sto; v_local = local} as x + , iicomma) -> (* to add possible definition in type found in Decl *) Visitor_c.vk_type bigf t; @@ -1056,9 +1048,8 @@ let rec visit_toplevel ~just_add_in_env ~depth elem = let local = match local with | Ast_c.NotLocalDecl -> Ast_c.NotLocalVar - | Ast_c.LocalDecl -> Ast_c.LocalVar (offset t) + | Ast_c.LocalDecl -> Ast_c.LocalVar (Ast_c.info_of_type t) in - var +> Common.do_option (fun (name, iniopt) -> let s = Ast_c.str_of_name name in @@ -1068,6 +1059,8 @@ let rec visit_toplevel ~just_add_in_env ~depth elem = | _ -> add_binding (VarOrFunc (s, (Lib.al_type t, local))) true; + x.v_type_bis := + Some (typedef_fix (Lib.al_type t) !_scoped_env); if need_annotate_body then begin (* int x = sizeof(x) is legal so need process ini *) @@ -1140,6 +1133,7 @@ let rec visit_toplevel ~just_add_in_env ~depth elem = in let (i1, i2) = match ii with + (* what is iifunc1? it should be a type. jll *) | iifunc1::iifunc2::ibrace1::ibrace2::ifakestart::isto -> iifunc1, iifunc2 | _ -> raise Impossible @@ -1160,7 +1154,7 @@ let rec visit_toplevel ~just_add_in_env ~depth elem = match nameopt with | Some name -> let s = Ast_c.str_of_name name in - let local = Ast_c.LocalVar (offset t) in + let local = Ast_c.LocalVar (Ast_c.info_of_type t) in add_binding (VarOrFunc (s,(Lib.al_type t,local))) true | None -> pr2 "no type, certainly because Void type ?" diff --git a/parsing_c/unparse_c.ml b/parsing_c/unparse_c.ml index 9380543..6870cfd 100644 --- a/parsing_c/unparse_c.ml +++ b/parsing_c/unparse_c.ml @@ -210,7 +210,8 @@ let get_fakeInfo_and_tokens celem toks = Common.push2 (Fake1 info) toks_out | OriginTok _ | ExpandedTok _ -> (* get the associated comments/space/cppcomment tokens *) - let (before, x, after) = !toks_in +> Common.split_when (fun tok -> + let (before, x, after) = + !toks_in +> Common.split_when (fun tok -> info =*= TH.info_of_tok tok) in assert(info =*= TH.info_of_tok x); diff --git a/parsing_c/unparse_c.mli b/parsing_c/unparse_c.mli index a51534f..c33378d 100644 --- a/parsing_c/unparse_c.mli +++ b/parsing_c/unparse_c.mli @@ -1,9 +1,8 @@ -open Common - type ppmethod = PPnormal | PPviastr (* program -> output filename (often "/tmp/output.c") -> unit *) val pp_program : - (Parse_c.toplevel2 * ppmethod) list -> filename -> unit + (Parse_c.toplevel2 * ppmethod) list -> Common.filename -> unit -val pp_program_default: Parse_c.program2 -> filename -> unit +val pp_program_default: + Parse_c.program2 -> Common.filename -> unit diff --git a/parsing_c/unparse_cocci.ml b/parsing_c/unparse_cocci.ml index 9328523..2d7e950 100644 --- a/parsing_c/unparse_cocci.ml +++ b/parsing_c/unparse_cocci.ml @@ -1,3 +1,16 @@ +(* Copyright (C) 2006, 2007 Julia Lawall + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License (GPL) + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * file license.txt for more details. + * + * This file was part of Coccinelle. + *) open Common (*****************************************************************************) @@ -44,7 +57,7 @@ let print_between = Common.print_between in let outdent _ = () (* should go to leftmost col, does nothing now *) in let pretty_print_c = - Pretty_print_c.pretty_print_c pr_celem pr_cspace + Pretty_print_c.mk_pretty_printers pr_celem pr_cspace force_newline indent outdent unindent in (* --------------------------------------------------------------------- *) @@ -369,7 +382,7 @@ and logicalOp = function and constant = function Ast.String(s) -> print_string ("\""^s^"\"") - | Ast.Char(s) -> print_string s + | Ast.Char(s) -> print_string ("\'"^s^"\'") | Ast.Int(s) -> print_string s | Ast.Float(s) -> print_string s diff --git a/parsing_c/unparse_cocci.mli b/parsing_c/unparse_cocci.mli index f2544b7..2d64261 100644 --- a/parsing_c/unparse_cocci.mli +++ b/parsing_c/unparse_cocci.mli @@ -6,7 +6,7 @@ val pp_list_list_any : Ast_c.metavars_binding * (* pr cocci *) (string -> int (*line*) -> int (*lcol*) -> int (*rcol*) -> unit) * - Pretty_print_c.pr_elem_func (* pr c *) * + (Ast_c.info -> unit) (* pr c *) * (unit -> unit) (* pr C space *) * (unit -> unit) (* pr space *) * (string -> unit) (* pr arity *) * diff --git a/parsing_c/unparse_hrule.ml b/parsing_c/unparse_hrule.ml index 54cbec1..6bbfb53 100644 --- a/parsing_c/unparse_hrule.ml +++ b/parsing_c/unparse_hrule.ml @@ -1,3 +1,17 @@ +(* Copyright (C) 2006, 2007 Julia Lawall + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License (GPL) + * version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * file license.txt for more details. + * + * This file was part of Coccinelle. + *) + module Ast = Ast_cocci module V = Visitor_ast @@ -295,10 +309,12 @@ let pp_meta_decl pr env decl = match decl with Ast.MetaIdDecl(ar, name) -> no_arity ar; pr "identifier "; pp_name name; pr ";\n" - | Ast.MetaFreshIdDecl(name, None) -> + | Ast.MetaFreshIdDecl(name, Ast.NoVal) -> pr "fresh identifier "; pp_name name; pr ";\n" - | Ast.MetaFreshIdDecl(name, Some x) -> + | Ast.MetaFreshIdDecl(name, Ast.StringSeed x) -> pr "fresh identifier "; pp_name name; pr " = \""; pr x; pr "\";\n" + | Ast.MetaFreshIdDecl(name, Ast.ListSeed x) -> + failwith "unparse_hrule: not supported" | Ast.MetaTypeDecl(ar, name) -> no_arity ar; pr "type "; pp_name name; pr ";\n" | Ast.MetaInitDecl(ar, name) -> diff --git a/parsing_c/unparse_hrule.mli b/parsing_c/unparse_hrule.mli index 6bebde2..644ac8d 100644 --- a/parsing_c/unparse_hrule.mli +++ b/parsing_c/unparse_hrule.mli @@ -1,7 +1,5 @@ -open Common - (* program -> output filename (often "/tmp/output.c") -> unit *) val pp_rule : Ast_cocci.metavar list (* local metavars only *) -> - Ast_cocci.rule -> Ast_c.metavars_binding -> filename -> unit + Ast_cocci.rule -> Ast_c.metavars_binding -> Common.filename -> unit diff --git a/parsing_c/visitor_c.ml b/parsing_c/visitor_c.ml index 08ebbe8..c7a8332 100644 --- a/parsing_c/visitor_c.ml +++ b/parsing_c/visitor_c.ml @@ -505,10 +505,12 @@ and vk_onedecl = fun bigf onedecl -> match onedecl with | ({v_namei = var; v_type = t; + v_type_bis = tbis; v_storage = _sto; v_attr = attrs}) -> vk_type bigf t; + (* dont go in tbis *) attrs +> List.iter (vk_attribute bigf); var +> Common.do_option (fun (name, iniopt) -> vk_name bigf name; @@ -1285,6 +1287,7 @@ and vk_decl_s = fun bigf d -> and aux ({v_namei = var; v_type = t; + v_type_bis = tbis; v_storage = sto; v_local= local; v_attr = attrs}, iicomma) = @@ -1296,6 +1299,8 @@ and vk_decl_s = fun bigf d -> vk_ini_s bigf init ))); v_type = vk_type_s bigf t; + (* !!! dont go in semantic related stuff !!! *) + v_type_bis = tbis; v_storage = sto; v_local = local; v_attr = attrs +> List.map (vk_attribute_s bigf); diff --git a/parsing_cocci/.depend b/parsing_cocci/.depend index d2f80c2..4c7f9f0 100644 --- a/parsing_cocci/.depend +++ b/parsing_cocci/.depend @@ -8,7 +8,7 @@ check_meta.cmi: ast_cocci.cmi ast0_cocci.cmi comm_assoc.cmi: ast0_cocci.cmi compute_lines.cmi: ast0_cocci.cmi context_neg.cmi: ../commons/common.cmi ast0_cocci.cmi -data.cmi: type_cocci.cmi ast_cocci.cmi ast0_cocci.cmi +data.cmi: type_cocci.cmi ../commons/common.cmi ast_cocci.cmi ast0_cocci.cmi disjdistr.cmi: ast_cocci.cmi free_vars.cmi: ast_cocci.cmi function_prototypes.cmi: ast_cocci.cmi ast0_cocci.cmi @@ -42,16 +42,16 @@ adjust_pragmas.cmx: visitor_ast0_types.cmx visitor_ast0.cmx ast0_cocci.cmx \ adjust_pragmas.cmi arity.cmo: ast_cocci.cmi ast0_cocci.cmi arity.cmi arity.cmx: ast_cocci.cmx ast0_cocci.cmx arity.cmi -ast0_cocci.cmo: type_cocci.cmi ../globals/flag.cmo ast_cocci.cmi \ - ast0_cocci.cmi -ast0_cocci.cmx: type_cocci.cmx ../globals/flag.cmx ast_cocci.cmx \ - ast0_cocci.cmi +ast0_cocci.cmo: type_cocci.cmi ../globals/flag.cmo ../commons/common.cmi \ + ast_cocci.cmi ast0_cocci.cmi +ast0_cocci.cmx: type_cocci.cmx ../globals/flag.cmx ../commons/common.cmx \ + ast_cocci.cmx ast0_cocci.cmi ast0toast.cmo: visitor_ast0_types.cmo visitor_ast0.cmi visitor_ast.cmi \ - type_cocci.cmi ../globals/flag.cmo ast_cocci.cmi ast0_cocci.cmi \ - ast0toast.cmi + type_cocci.cmi ../globals/flag.cmo ../commons/ocamlextra/dumper.cmi \ + ast_cocci.cmi ast0_cocci.cmi ast0toast.cmi ast0toast.cmx: visitor_ast0_types.cmx visitor_ast0.cmx visitor_ast.cmx \ - type_cocci.cmx ../globals/flag.cmx ast_cocci.cmx ast0_cocci.cmx \ - ast0toast.cmi + type_cocci.cmx ../globals/flag.cmx ../commons/ocamlextra/dumper.cmx \ + ast_cocci.cmx ast0_cocci.cmx ast0toast.cmi ast_cocci.cmo: type_cocci.cmi ../commons/common.cmi ast_cocci.cmi ast_cocci.cmx: type_cocci.cmx ../commons/common.cmx ast_cocci.cmi check_meta.cmo: visitor_ast0_types.cmo visitor_ast0.cmi type_cocci.cmi \ @@ -70,8 +70,10 @@ context_neg.cmo: visitor_ast0_types.cmo visitor_ast0.cmi unparse_ast0.cmi \ context_neg.cmx: visitor_ast0_types.cmx visitor_ast0.cmx unparse_ast0.cmx \ index.cmx ../globals/flag.cmx compute_lines.cmx ../commons/common.cmx \ ast_cocci.cmx ast0_cocci.cmx context_neg.cmi -data.cmo: type_cocci.cmi ast_cocci.cmi ast0_cocci.cmi data.cmi -data.cmx: type_cocci.cmx ast_cocci.cmx ast0_cocci.cmx data.cmi +data.cmo: type_cocci.cmi ../commons/common.cmi ast_cocci.cmi ast0_cocci.cmi \ + data.cmi +data.cmx: type_cocci.cmx ../commons/common.cmx ast_cocci.cmx ast0_cocci.cmx \ + data.cmi disjdistr.cmo: visitor_ast.cmi ../globals/flag.cmo ../commons/common.cmi \ ast_cocci.cmi disjdistr.cmi disjdistr.cmx: visitor_ast.cmx ../globals/flag.cmx ../commons/common.cmx \ diff --git a/parsing_cocci/Makefile b/parsing_cocci/Makefile index 51a86b4..9522b1e 100644 --- a/parsing_cocci/Makefile +++ b/parsing_cocci/Makefile @@ -29,8 +29,8 @@ SOURCES = flag_parsing_cocci.ml type_cocci.ml ast_cocci.ml ast0_cocci.ml \ pretty_print_cocci.ml unparse_ast0.ml visitor_ast0_types.ml \ visitor_ast.ml visitor_ast0.ml compute_lines.ml comm_assoc.ml \ iso_pattern.ml iso_compile.ml single_statement.ml simple_assignments.ml \ -ast0toast.ml check_meta.ml top_level.ml type_infer.ml test_exps.ml \ -unitary_ast0.ml arity.ml index.ml context_neg.ml \ +ast0toast.ml check_meta.ml top_level.ml type_infer.ml \ +test_exps.ml unitary_ast0.ml arity.ml index.ml context_neg.ml \ adjust_pragmas.ml insert_plus.ml function_prototypes.ml \ unify_ast.ml semantic_cocci.ml data.ml free_vars.ml parse_aux.ml disjdistr.ml \ $(LEXER_SOURCES:.mll=.ml) $(PARSER_SOURCES:.mly=.ml) \ diff --git a/parsing_cocci/ast0_cocci.ml b/parsing_cocci/ast0_cocci.ml index 4256525..993e234 100644 --- a/parsing_cocci/ast0_cocci.ml +++ b/parsing_cocci/ast0_cocci.ml @@ -558,9 +558,9 @@ let rec ast0_type_to_type ty = Id(tag) -> Type_cocci.StructUnionName(structUnion su,false,unwrap_mcode tag) | MetaId(tag,_,_) -> - (Printf.printf + (Common.pr2 "warning: struct/union with a metavariable name detected.\n"; - Printf.printf + Common.pr2 "For type checking assuming the name of the metavariable is the name of the type\n"; let (rule,tag) = unwrap_mcode tag in Type_cocci.StructUnionName(structUnion su,true,rule^tag)) @@ -570,7 +570,10 @@ let rec ast0_type_to_type ty = | TypeName(name) -> Type_cocci.TypeName(unwrap_mcode name) | MetaType(name,_) -> Type_cocci.MetaType(unwrap_mcode name,Type_cocci.Unitary,false) - | DisjType(_,types,_,_) -> failwith "unexpected DisjType" + | DisjType(_,types,_,_) -> + Common.pr2_once + "disjtype not supported in smpl type inference, assuming unknown"; + Type_cocci.Unknown | OptType(ty) | UniqueType(ty) -> ast0_type_to_type ty diff --git a/parsing_cocci/ast0toast.ml b/parsing_cocci/ast0toast.ml index 0809e95..dca8b8e 100644 --- a/parsing_cocci/ast0toast.ml +++ b/parsing_cocci/ast0toast.ml @@ -120,8 +120,9 @@ let inline_mcodes = | _ -> failwith "unexpected annotation") mcl | _ -> + Printf.printf "before %s\n" (Dumper.dump bef); failwith - "context tree should not have bad code on both sides" in + "context tree should not have bad code before" in let attach_aft aft afterinfo = function (true,mcl) -> List.iter @@ -149,7 +150,7 @@ let inline_mcodes = mcl | _ -> failwith - "context tree should not have bad code on both sides" in + "context tree should not have bad code after" in (match !befaft with (Ast.BEFORE(bef),beforeinfo,_) -> attach_bef bef beforeinfo @@ -364,7 +365,8 @@ and expression e = | Ast0.MetaExprList(name,None,_) -> Ast.MetaExprList(mcode name,None,unitary,false) | Ast0.EComma(cm) -> Ast.EComma(mcode cm) - | Ast0.DisjExpr(_,exps,_,_) -> Ast.DisjExpr(List.map expression exps) + | Ast0.DisjExpr(_,exps,_,_) -> + Ast.DisjExpr(List.map expression exps) | Ast0.NestExpr(_,exp_dots,_,whencode,multi) -> let whencode = get_option expression whencode in Ast.NestExpr(dots expression exp_dots,whencode,multi) diff --git a/parsing_cocci/ast_cocci.ml b/parsing_cocci/ast_cocci.ml index 0d9bd39..efa6e0a 100644 --- a/parsing_cocci/ast_cocci.ml +++ b/parsing_cocci/ast_cocci.ml @@ -35,7 +35,7 @@ type 'a wrap = node_line : line; free_vars : meta_name list; (*free vars*) minus_free_vars : meta_name list; (*minus free vars*) - fresh_vars : (meta_name * string (*seed*) option) list; (*fresh vars*) + fresh_vars : (meta_name * seed) list; (*fresh vars*) inherited : meta_name list; (*inherited vars*) saved_witness : meta_name list; (*witness vars*) bef_aft : dots_bef_aft; @@ -75,7 +75,7 @@ and keep_binding = Type_cocci.keep_binding and multi = bool (*true if a nest is one or more, false if it is zero or more*) and end_info = - meta_name list (*free vars*) * (meta_name * string option) list (*fresh*) * + meta_name list (*free vars*) * (meta_name * seed) list (*fresh*) * meta_name list (*inherited vars*) * mcodekind (* --------------------------------------------------------------------- *) @@ -85,7 +85,7 @@ and arity = UNIQUE | OPT | MULTI | NONE and metavar = MetaIdDecl of arity * meta_name (* name *) - | MetaFreshIdDecl of meta_name (* name *) * string option (* seed *) + | MetaFreshIdDecl of meta_name (* name *) * seed (* seed *) | MetaTypeDecl of arity * meta_name (* name *) | MetaInitDecl of arity * meta_name (* name *) | MetaListlenDecl of meta_name (* name *) @@ -109,6 +109,9 @@ and metavar = | MetaDeclarerDecl of arity * meta_name (* name *) | MetaIteratorDecl of arity * meta_name (* name *) +and seed = NoVal | StringSeed of string | ListSeed of seed_elem list +and seed_elem = SeedString of string | SeedId of meta_name + (* --------------------------------------------------------------------- *) (* --------------------------------------------------------------------- *) (* Dots *) @@ -580,7 +583,8 @@ and anything = (* --------------------------------------------------------------------- *) -and exists = Exists | Forall | ReverseForall | Undetermined +and exists = Exists | Forall | Undetermined +(* | ReverseForall - idea: look back on all flow paths; not implemented *) (* --------------------------------------------------------------------- *) diff --git a/parsing_cocci/ast_cocci.mli b/parsing_cocci/ast_cocci.mli index 3771a7a..d18a2ea 100644 --- a/parsing_cocci/ast_cocci.mli +++ b/parsing_cocci/ast_cocci.mli @@ -11,7 +11,7 @@ type 'a wrap = node_line : line; free_vars : meta_name list; (*free vars*) minus_free_vars : meta_name list; (*minus free vars*) - fresh_vars : (meta_name * string (*seed*) option) list; (*fresh vars*) + fresh_vars : (meta_name * seed) list; (*fresh vars*) inherited : meta_name list; (*inherited vars*) saved_witness : meta_name list; (*witness vars*) bef_aft : dots_bef_aft; @@ -47,7 +47,7 @@ and keep_binding = Type_cocci.keep_binding and multi = bool (*true if a nest is one or more, false if it is zero or more*) and end_info = - meta_name list (*free vars*) * (meta_name * string option) list (*fresh*) * + meta_name list (*free vars*) * (meta_name * seed) list (*fresh*) * meta_name list (*inherited vars*) * mcodekind (* --------------------------------------------------------------------- *) @@ -57,7 +57,7 @@ and arity = UNIQUE | OPT | MULTI | NONE and metavar = MetaIdDecl of arity * meta_name (* name *) - | MetaFreshIdDecl of meta_name (* name *) * string option (* seed *) + | MetaFreshIdDecl of meta_name (* name *) * seed (* seed *) | MetaTypeDecl of arity * meta_name (* name *) | MetaInitDecl of arity * meta_name (* name *) | MetaListlenDecl of meta_name (* name *) @@ -81,6 +81,9 @@ and metavar = | MetaDeclarerDecl of arity * meta_name (* name *) | MetaIteratorDecl of arity * meta_name (* name *) +and seed = NoVal | StringSeed of string | ListSeed of seed_elem list +and seed_elem = SeedString of string | SeedId of meta_name + (* --------------------------------------------------------------------- *) (* --------------------------------------------------------------------- *) (* Dots *) @@ -540,7 +543,7 @@ and anything = (* --------------------------------------------------------------------- *) -and exists = Exists | Forall | ReverseForall | Undetermined +and exists = Exists | Forall | Undetermined (* --------------------------------------------------------------------- *) @@ -563,7 +566,7 @@ val get_wcfvs : ('a wrap,'b wrap) whencode list -> meta_name list val set_fvs : meta_name list -> 'a wrap -> 'a wrap val get_mfvs : 'a wrap -> meta_name list val set_mfvs : meta_name list -> 'a wrap -> 'a wrap -val get_fresh : 'a wrap -> (meta_name * string option) list +val get_fresh : 'a wrap -> (meta_name * seed) list val get_inherited : 'a wrap -> meta_name list val get_saved : 'a wrap -> meta_name list val get_dots_bef_aft : statement -> dots_bef_aft @@ -586,12 +589,12 @@ val no_info : info val make_meta_rule_elem : string -> mcodekind -> - (meta_name list * (meta_name * string option) list * meta_name list) -> + (meta_name list * (meta_name * seed) list * meta_name list) -> rule_elem val make_meta_decl : string -> mcodekind -> - (meta_name list * (meta_name * string option) list * meta_name list) -> + (meta_name list * (meta_name * seed) list * meta_name list) -> declaration val make_term : 'a -> 'a wrap diff --git a/parsing_cocci/check_meta.ml b/parsing_cocci/check_meta.ml index 90bdd19..55dc822 100644 --- a/parsing_cocci/check_meta.ml +++ b/parsing_cocci/check_meta.ml @@ -366,6 +366,7 @@ and statement old_metas table minus s = | Ast0.Define(def,id,_,body) -> ident GLOBAL old_metas table minus id; dots (statement old_metas table minus) body + | Ast0.Label(i,_) -> ident ID old_metas table minus i | Ast0.Goto(_,i,_) -> ident ID old_metas table minus i | _ -> () (* no metavariable subterms *) diff --git a/parsing_cocci/compute_lines.ml b/parsing_cocci/compute_lines.ml index 8e22419..4174236 100644 --- a/parsing_cocci/compute_lines.ml +++ b/parsing_cocci/compute_lines.ml @@ -49,6 +49,16 @@ let mkres x e left right = Ast0.strings_before = []; Ast0.strings_after = [] } in {x with Ast0.node = e; Ast0.info = info} +(* This looks like it is there to allow distribution of plus code +over disjunctions. But this doesn't work with single_statement, as the +plus code has not been distributed to the place that it expects. So the +only reasonably easy solution seems to be to disallow distribution. *) +(* inherit attachable is because single_statement doesn't work well when + +code is attached outside an or, but this has to be allowed after +isomorphisms have been introduced. So only set it to true then, or when we +know that the code involved cannot contain a statement, ie it is a +declaration. *) +let inherit_attachable = ref false let mkmultires x e left right (astart,start_mcodes) (aend,end_mcodes) = let lstart = Ast0.get_info left in let lend = Ast0.get_info right in @@ -61,8 +71,8 @@ let mkmultires x e left right (astart,start_mcodes) (aend,end_mcodes) = Ast0.offset = lstart.Ast0.pos_info.Ast0.offset; } in let info = { Ast0.pos_info = pos_info; - Ast0.attachable_start = astart; - Ast0.attachable_end = aend; + Ast0.attachable_start = if !inherit_attachable then astart else false; + Ast0.attachable_end = if !inherit_attachable then aend else false; Ast0.mcode_start = start_mcodes; Ast0.mcode_end = end_mcodes; (* only for tokens, not inherited upwards *) @@ -780,5 +790,15 @@ let top_level t = (* --------------------------------------------------------------------- *) (* Entry points *) -let compute_lines = List.map top_level +let compute_lines attachable_or x = + inherit_attachable := attachable_or; + List.map top_level x + +let compute_statement_lines attachable_or x = + inherit_attachable := attachable_or; + statement x + +let compute_statement_dots_lines attachable_or x = + inherit_attachable := attachable_or; + statement_dots x diff --git a/parsing_cocci/compute_lines.mli b/parsing_cocci/compute_lines.mli dissimilarity index 90% index 4c6f1b7..2d2cdf0 100644 --- a/parsing_cocci/compute_lines.mli +++ b/parsing_cocci/compute_lines.mli @@ -1,23 +1,8 @@ -val compute_lines : Ast0_cocci.rule -> Ast0_cocci.rule - -val expression_dots : - Ast0_cocci.expression Ast0_cocci.dots -> - Ast0_cocci.expression Ast0_cocci.dots -val parameter_dots : - Ast0_cocci.parameterTypeDef Ast0_cocci.dots -> - Ast0_cocci.parameterTypeDef Ast0_cocci.dots -val initialiser_dots : - Ast0_cocci.initialiser Ast0_cocci.dots -> - Ast0_cocci.initialiser Ast0_cocci.dots -val statement_dots : - Ast0_cocci.statement Ast0_cocci.dots -> - Ast0_cocci.statement Ast0_cocci.dots - -val ident : Ast0_cocci.ident -> Ast0_cocci.ident -val expression : Ast0_cocci.expression -> Ast0_cocci.expression -val typeC : Ast0_cocci.typeC -> Ast0_cocci.typeC -val declaration : Ast0_cocci.declaration -> Ast0_cocci.declaration -val parameterTypeDef : - Ast0_cocci.parameterTypeDef -> Ast0_cocci.parameterTypeDef -val statement : Ast0_cocci.statement -> Ast0_cocci.statement -val top_level : Ast0_cocci.top_level -> Ast0_cocci.top_level +val compute_lines : bool -> Ast0_cocci.rule -> Ast0_cocci.rule + +val compute_statement_dots_lines : bool -> + Ast0_cocci.statement Ast0_cocci.dots -> + Ast0_cocci.statement Ast0_cocci.dots + +val compute_statement_lines : + bool -> Ast0_cocci.statement -> Ast0_cocci.statement diff --git a/parsing_cocci/context_neg.ml b/parsing_cocci/context_neg.ml index f5c6dee..e601467 100644 --- a/parsing_cocci/context_neg.ml +++ b/parsing_cocci/context_neg.ml @@ -247,11 +247,18 @@ let neutral_mcode (_,_,info,mcodekind,pos,_) = (* neutral for context; used for mcode in bef aft nodes that don't represent anything if they don't contain some information *) let nc_mcode (_,_,info,mcodekind,pos,_) = - let offset = info.Ast0.pos_info.Ast0.offset in + (* distinguish from the offset of some real token *) + let offset = (-1) * info.Ast0.pos_info.Ast0.offset in match mcodekind with Ast0.MINUS(_) -> Token(AllMarked,offset,mcodekind,[]) | Ast0.PLUS -> Token(AllMarked,offset,mcodekind,[]) - | Ast0.CONTEXT(_) -> Token(Neutral,offset,mcodekind,[offset]) + | Ast0.CONTEXT(_) -> + (* Unlike the other mcode cases, we drop the offset from the context + offsets. This is because we don't know whether the term this is + associated with is - or context. In any case, the context offsets are + used for identification, and this invisible node should not be needed + for this purpose. *) + Token(Neutral,offset,mcodekind,[]) | _ -> failwith "not possible" let is_context = function Ast0.CONTEXT(_) -> true | _ -> false @@ -839,7 +846,7 @@ let concat = function | _ -> failwith "no dots allowed in pure plus code") | _ -> failwith "plus code is being discarded") in let res = - Compute_lines.statement_dots + Compute_lines.compute_statement_dots_lines false (Ast0.rewrap (List.hd l) (Ast0.DOTS (loop l))) in [Ast0.rewrap res (Ast0.CODE res)] diff --git a/parsing_cocci/data.ml b/parsing_cocci/data.ml index 98ca9fe..07834de 100644 --- a/parsing_cocci/data.ml +++ b/parsing_cocci/data.ml @@ -28,6 +28,8 @@ module Ast = Ast_cocci metavariables *) type fresh = bool +type incl_iso = Include of string | Iso of (string,string) Common.either + type clt = line_type * int * int * int * int (* starting spaces *) * (string * Ast0.position_info) list (* code before *) * @@ -52,9 +54,17 @@ let in_meta = ref false let in_iso = ref false let in_generating = ref false let in_prolog = ref false +(* state machine for lexer..., allows smpl keywords as type names *) +let saw_struct = ref false let inheritable_positions = ref ([] : string list) (* rules from which posns can be inherited *) +let call_in_meta f = + in_meta := true; saw_struct := false; + let res = f() in + in_meta := false; + res + let all_metadecls = (Hashtbl.create(100) : (string, Ast.metavar list) Hashtbl.t) diff --git a/parsing_cocci/data.mli b/parsing_cocci/data.mli index 174babc..d07c415 100644 --- a/parsing_cocci/data.mli +++ b/parsing_cocci/data.mli @@ -3,6 +3,8 @@ metavariables *) type fresh = bool +type incl_iso = Include of string | Iso of (string,string) Common.either + type clt = line_type * int * int * int * int (* starting spaces *) * (string * Ast0_cocci.position_info) list (* code before *) * @@ -25,8 +27,11 @@ val in_meta : bool ref (* true if parsing the metavariable decls *) val in_iso : bool ref (* true if parsing the isomorphisms *) val in_generating : bool ref(* true if generating a rule *) val in_prolog : bool ref (* true if parsing the beginning of an SP *) +val saw_struct : bool ref (* true if saw struct/union *) val inheritable_positions : string list ref +val call_in_meta : (unit -> 'a) -> 'a + val all_metadecls : (string, Ast_cocci.metavar list) Hashtbl.t val clear_meta: (unit -> unit) ref diff --git a/parsing_cocci/free_vars.ml b/parsing_cocci/free_vars.ml index be830b1..9396da8 100644 --- a/parsing_cocci/free_vars.ml +++ b/parsing_cocci/free_vars.ml @@ -24,6 +24,9 @@ Also augment various parts of each rule with unitary, inherited, and freshness informations *) +(* metavar decls should be better integrated into computations of free +variables in plus code *) + module Ast = Ast_cocci module V = Visitor_ast module TC = Type_cocci @@ -292,7 +295,42 @@ let cip_mcodekind r mck = | Ast.NOTHING -> []) | Ast.PLUS -> [] + +let collect_fresh_seed_env metavars l = + let fresh = + List.fold_left + (function prev -> + function + Ast.MetaFreshIdDecl(_,seed) as x -> + ((Ast.get_meta_name x),seed)::prev + | _ -> prev) + [] metavars in + let (seed_env,seeds) = + List.fold_left + (function (seed_env,seeds) as prev -> + function x -> + try + (let v = List.assoc x fresh in + match v with + Ast.ListSeed l -> + let ids = + List.fold_left + (function prev -> + function + Ast.SeedId(id) -> id::prev + | _ -> prev) + [] l in + ((x,ids)::seed_env,Common.union_set ids seeds) + | _ -> ((x,[])::seed_env,seeds)) + with Not_found -> prev) + ([],l) l in + (List.rev seed_env,List.rev seeds) + +let collect_fresh_seed metavars l = + let (_,seeds) = collect_fresh_seed_env metavars l in seeds + let collect_in_plus_term = + let bind x y = x @ y in let option_default = [] in let donothing r k e = k e in @@ -347,10 +385,11 @@ let collect_in_plus_term = donothing donothing donothing donothing donothing donothing donothing astfvrule_elem astfvstatement donothing donothing donothing -let collect_in_plus minirules = +let collect_in_plus metavars minirules = nub - (List.concat - (List.map collect_in_plus_term.V.combiner_top_level minirules)) + (collect_fresh_seed metavars + (List.concat + (List.map collect_in_plus_term.V.combiner_top_level minirules))) (* ---------------------------------------------------------------- *) @@ -366,10 +405,10 @@ let collect_all_multirefs minirules = (* classify as unitary (no binding) or nonunitary (env binding) or saved (witness binding) *) -let classify_variables metavars minirules used_after = - let metavars = List.map Ast.get_meta_name metavars in +let classify_variables metavar_decls minirules used_after = + let metavars = List.map Ast.get_meta_name metavar_decls in let (unitary,nonunitary) = collect_all_multirefs minirules in - let inplus = collect_in_plus minirules in + let inplus = collect_in_plus metavar_decls minirules in let donothing r k e = k e in let check_unitary name inherited = @@ -520,20 +559,23 @@ let astfvs metavars bound = [] metavars in let collect_fresh l = - List.rev - (List.fold_left - (function prev -> + let (matched,freshvars) = + List.fold_left + (function (matched,freshvars) -> function x -> - try let v = List.assoc x fresh in (x,v)::prev - with Not_found -> prev) - [] l) in + try let v = List.assoc x fresh in (matched,(x,v)::freshvars) + with Not_found -> (x::matched,freshvars)) + ([],[]) l in + (List.rev matched, List.rev freshvars) in (* cases for the elements of anything *) let astfvrule_elem recursor k re = let minus_free = nub (collect_all_refs.V.combiner_rule_elem re) in let minus_nc_free = nub (collect_non_constraint_refs.V.combiner_rule_elem re) in - let plus_free = collect_in_plus_term.V.combiner_rule_elem re in + let plus_free = + collect_fresh_seed metavars + (collect_in_plus_term.V.combiner_rule_elem re) in let free = Common.union_set minus_free plus_free in let nc_free = Common.union_set minus_nc_free plus_free in let unbound = @@ -542,10 +584,11 @@ let astfvs metavars bound = List.filter (function x -> List.mem x bound) nc_free in let munbound = List.filter (function x -> not(List.mem x bound)) minus_free in + let (matched,fresh) = collect_fresh unbound in {(k re) with - Ast.free_vars = unbound; + Ast.free_vars = matched; Ast.minus_free_vars = munbound; - Ast.fresh_vars = collect_fresh unbound; + Ast.fresh_vars = fresh; Ast.inherited = inherited; Ast.saved_witness = []} in @@ -553,7 +596,9 @@ let astfvs metavars bound = let minus_free = nub (collect_all_refs.V.combiner_statement s) in let minus_nc_free = nub (collect_non_constraint_refs.V.combiner_statement s) in - let plus_free = collect_in_plus_term.V.combiner_statement s in + let plus_free = + collect_fresh_seed metavars + (collect_in_plus_term.V.combiner_statement s) in let free = Common.union_set minus_free plus_free in let nc_free = Common.union_set minus_nc_free plus_free in let classify free minus_free = @@ -561,41 +606,40 @@ let astfvs metavars bound = List.partition (function x -> not(List.mem x bound)) free in let munbound = List.filter (function x -> not(List.mem x bound)) minus_free in - (unbound,munbound,collect_fresh unbound,inherited) in + let (matched,fresh) = collect_fresh unbound in + (matched,munbound,fresh,inherited) in let res = k s in let s = + let cip_plus aft = + collect_fresh_seed metavars + (cip_mcodekind collect_in_plus_term aft) in match Ast.unwrap res with Ast.IfThen(header,branch,(_,_,_,aft)) -> - let (unbound,_,fresh,inherited) = - classify (cip_mcodekind collect_in_plus_term aft) [] in + let (unbound,_,fresh,inherited) = classify (cip_plus aft) [] in Ast.IfThen(header,branch,(unbound,fresh,inherited,aft)) | Ast.IfThenElse(header,branch1,els,branch2,(_,_,_,aft)) -> - let (unbound,_,fresh,inherited) = - classify (cip_mcodekind collect_in_plus_term aft) [] in + let (unbound,_,fresh,inherited) = classify (cip_plus aft) [] in Ast.IfThenElse(header,branch1,els,branch2, (unbound,fresh,inherited,aft)) | Ast.While(header,body,(_,_,_,aft)) -> - let (unbound,_,fresh,inherited) = - classify (cip_mcodekind collect_in_plus_term aft) [] in + let (unbound,_,fresh,inherited) = classify (cip_plus aft) [] in Ast.While(header,body,(unbound,fresh,inherited,aft)) | Ast.For(header,body,(_,_,_,aft)) -> - let (unbound,_,fresh,inherited) = - classify (cip_mcodekind collect_in_plus_term aft) [] in + let (unbound,_,fresh,inherited) = classify (cip_plus aft) [] in Ast.For(header,body,(unbound,fresh,inherited,aft)) | Ast.Iterator(header,body,(_,_,_,aft)) -> - let (unbound,_,fresh,inherited) = - classify (cip_mcodekind collect_in_plus_term aft) [] in + let (unbound,_,fresh,inherited) = classify (cip_plus aft) [] in Ast.Iterator(header,body,(unbound,fresh,inherited,aft)) | s -> s in - let (unbound,munbound,fresh,_) = classify free minus_free in + let (matched,munbound,fresh,_) = classify free minus_free in let inherited = List.filter (function x -> List.mem x bound) nc_free in {res with Ast.node = s; - Ast.free_vars = unbound; + Ast.free_vars = matched; Ast.minus_free_vars = munbound; - Ast.fresh_vars = collect_fresh unbound; + Ast.fresh_vars = fresh; Ast.inherited = inherited; Ast.saved_witness = []} in @@ -603,7 +647,9 @@ let astfvs metavars bound = let minus_free = nub (collect_all_refs.V.combiner_statement_dots sd) in let minus_nc_free = nub (collect_non_constraint_refs.V.combiner_statement_dots sd) in - let plus_free = collect_in_plus_term.V.combiner_statement_dots sd in + let plus_free = + collect_fresh_seed metavars + (collect_in_plus_term.V.combiner_statement_dots sd) in let free = Common.union_set minus_free plus_free in let nc_free = Common.union_set minus_nc_free plus_free in let unbound = @@ -612,10 +658,11 @@ let astfvs metavars bound = List.filter (function x -> List.mem x bound) nc_free in let munbound = List.filter (function x -> not(List.mem x bound)) minus_free in + let (matched,fresh) = collect_fresh unbound in {(k sd) with - Ast.free_vars = unbound; + Ast.free_vars = matched; Ast.minus_free_vars = munbound; - Ast.fresh_vars = collect_fresh unbound; + Ast.fresh_vars = fresh; Ast.inherited = inherited; Ast.saved_witness = []} in @@ -732,7 +779,7 @@ let collect_top_level_used_after metavar_rule_list = | Ast.InitialScriptRule (_,_) | Ast.FinalScriptRule (_,_) -> [] | Ast.CocciRule (_,_,rule,_,_) -> Common.union_set (nub (collect_all_rule_refs rule)) - (collect_in_plus rule) in + (collect_in_plus metavar_list rule) in let inherited = List.filter (function x -> not (List.mem x locally_defined)) free_vars in @@ -748,26 +795,85 @@ let collect_top_level_used_after metavar_rule_list = let collect_local_used_after metavars minirules used_after = let locally_defined = List.map Ast.get_meta_name metavars in - let rec loop defined = function - [] -> (used_after,[],[]) + let rec loop = function + [] -> (used_after,[],[],[],[]) | minirule::rest -> - let free_vars = - Common.union_set - (nub (collect_all_minirule_refs minirule)) - (collect_in_plus_term.V.combiner_top_level minirule) in - let local_free_vars = - List.filter (function x -> List.mem x locally_defined) free_vars in - let new_defined = Common.union_set local_free_vars defined in - let (mini_used_after,fvs_lists,mini_used_after_lists) = - loop new_defined rest in - let local_used = Common.union_set local_free_vars mini_used_after in - let (new_used_after,new_list) = - List.partition (function x -> List.mem x defined) mini_used_after in - let new_used_after = Common.union_set local_used new_used_after in - (new_used_after,free_vars::fvs_lists, - new_list::mini_used_after_lists) in - let (_,fvs_lists,used_after_lists) = loop [] minirules in - (fvs_lists,used_after_lists) + (* In a rule there are three kinds of local variables: + 1. Variables referenced in the minus or context code. + These get a value by matching. This value can be used in + subsequent rules. + 2. Fresh variables referenced in the plus code. + 3. Variables referenced in the seeds of the fresh variables. + There are also non-local variables. These may either be variables + referenced in the minus, context, or plus code, or they may be + variables referenced in the seeds of the fresh variables. *) + (* Step 1: collect all references in minus/context, plus, seed + code *) + let variables_referenced_in_minus_context_code = + nub (collect_all_minirule_refs minirule) in + let variables_referenced_in_plus_code = + collect_in_plus_term.V.combiner_top_level minirule in + let (env_of_fresh_seeds,seeds_and_plus) = + collect_fresh_seed_env + metavars variables_referenced_in_plus_code in + let all_free_vars = + Common.union_set variables_referenced_in_minus_context_code + seeds_and_plus in + (* Step 2: identify locally defined ones *) + let local_fresh = List.map fst env_of_fresh_seeds in + let is_local = + List.partition (function x -> List.mem x locally_defined) in + let local_env_of_fresh_seeds = + (* these have to be restricted to only one value if the associated + fresh variable is used after *) + List.map (function (f,ss) -> (f,is_local ss)) env_of_fresh_seeds in + let (local_all_free_vars,nonlocal_all_free_vars) = + is_local all_free_vars in + (* Step 3, recurse on the rest of the rules, making available whatever + has been defined in this one *) + let (mini_used_after,fvs_lists,mini_used_after_lists, + mini_fresh_used_after_lists,mini_fresh_used_after_seeds) = + loop rest in + (* Step 4: collect the results. These are: + 1. All of the variables used non-locally in the rules starting + with this one + 2. All of the free variables to the end of the semantic patch + 3. The variables that are used afterwards and defined here by + matching (minus or context code) + 4. The variables that are used afterwards and are defined here as + fresh + 5. The variables that are used as seeds in computing the bindings + of the variables collected in part 4. *) + let (local_used_after, nonlocal_used_after) = + is_local mini_used_after in + let (fresh_local_used_after(*4*),matched_local_used_after) = + List.partition (function x -> List.mem x local_fresh) + local_used_after in + let matched_local_used_after(*3*) = + Common.union_set matched_local_used_after nonlocal_used_after in + let new_used_after = (*1*) + Common.union_set nonlocal_all_free_vars nonlocal_used_after in + let fresh_local_used_after_seeds = + List.filter + (* no point to keep variables that already are gtd to have only + one value *) + (function x -> not (List.mem x matched_local_used_after)) + (List.fold_left (function p -> function c -> Common.union_set c p) + [] + (List.map + (function fua -> + fst (List.assoc fua local_env_of_fresh_seeds)) + fresh_local_used_after)) in + (new_used_after,all_free_vars::fvs_lists(*2*), + matched_local_used_after::mini_used_after_lists, + fresh_local_used_after::mini_fresh_used_after_lists, + fresh_local_used_after_seeds::mini_fresh_used_after_seeds) in + let (_,fvs_lists,used_after_lists(*ua*), + fresh_used_after_lists(*fua*),fresh_used_after_lists_seeds(*fuas*)) = + loop minirules in + (fvs_lists,used_after_lists, + fresh_used_after_lists,fresh_used_after_lists_seeds) + let collect_used_after metavar_rule_list = @@ -778,19 +884,26 @@ let collect_used_after metavar_rule_list = match r with Ast.ScriptRule (_,_,_,_) | Ast.InitialScriptRule (_,_) | Ast.FinalScriptRule (_,_) -> - ([], [used_after]) + ([], [used_after], [], []) | Ast.CocciRule (name, rule_info, minirules, _,_) -> collect_local_used_after metavars minirules used_after ) metavar_rule_list used_after_lists +let rec split4 = function + [] -> ([],[],[],[]) + | (a,b,c,d)::l -> let (a1,b1,c1,d1) = split4 l in (a::a1,b::b1,c::c1,d::d1) + (* ---------------------------------------------------------------- *) (* entry point *) let free_vars rules = let metavars = List.map (function (mv,rule) -> mv) rules in - let (fvs_lists,used_after_lists) = List.split (collect_used_after rules) in - let neg_pos_lists = List.map2 get_neg_pos_list rules used_after_lists in + let (fvs_lists,used_after_matched_lists, + fresh_used_after_lists,fresh_used_after_lists_seeds) = + split4 (collect_used_after rules) in + let neg_pos_lists = + List.map2 get_neg_pos_list rules used_after_matched_lists in let positions_list = (* for all rules, assume all positions are used after *) List.map (function (mv, r) -> @@ -808,15 +921,20 @@ let free_vars rules = let new_rules = List.map2 (function (mv,r) -> - function ua -> + function (ua,fua) -> match r with Ast.ScriptRule _ | Ast.InitialScriptRule _ | Ast.FinalScriptRule _ -> r | Ast.CocciRule (nm, rule_info, r, is_exp,ruletype) -> Ast.CocciRule - (nm, rule_info, classify_variables mv r (List.concat ua), + (nm, rule_info, + classify_variables mv r + ((List.concat ua) @ (List.concat fua)), is_exp,ruletype)) - rules used_after_lists in + rules (List.combine used_after_matched_lists fresh_used_after_lists) in let new_rules = collect_astfvs (List.combine metavars new_rules) in (metavars,new_rules, - fvs_lists,neg_pos_lists,used_after_lists,positions_list) + fvs_lists,neg_pos_lists, + (used_after_matched_lists, + fresh_used_after_lists,fresh_used_after_lists_seeds), + positions_list) diff --git a/parsing_cocci/free_vars.mli b/parsing_cocci/free_vars.mli index fac1f11..979a59f 100644 --- a/parsing_cocci/free_vars.mli +++ b/parsing_cocci/free_vars.mli @@ -6,5 +6,7 @@ val free_vars : Ast_cocci.rule_with_metavars list -> (Ast_cocci.metavar list list) * (Ast_cocci.rule list) * (((Ast_cocci.meta_name list) list) list) (*fvs of the rule*) * (((Ast_cocci.meta_name list) list) list) (*negated position vars*) * - (((Ast_cocci.meta_name list) list) list) (*used after list*) * + ((((Ast_cocci.meta_name list) list) list) (*used after list*) * + (((Ast_cocci.meta_name list) list) list) (*fresh used after list*) * + (((Ast_cocci.meta_name list) list)list)(*fresh used after list seeds*))* (((Ast_cocci.meta_name list) list) list) (*positions list*) diff --git a/parsing_cocci/function_prototypes.ml b/parsing_cocci/function_prototypes.ml index 0814be9..70a74bc 100644 --- a/parsing_cocci/function_prototypes.ml +++ b/parsing_cocci/function_prototypes.ml @@ -335,9 +335,11 @@ let no_names dec = let merge mproto pproto = let mproto = - Compute_lines.compute_lines [Ast0.copywrap mproto (Ast0.DECL mproto)] in + Compute_lines.compute_lines true + [Ast0.copywrap mproto (Ast0.DECL mproto)] in let pproto = - Compute_lines.compute_lines [Ast0.copywrap pproto (Ast0.DECL pproto)] in + Compute_lines.compute_lines true + [Ast0.copywrap pproto (Ast0.DECL pproto)] in let (m,p) = List.split(Context_neg.context_neg mproto pproto) in Insert_plus.insert_plus m p true (* no isos for protos *); (* convert to ast so that the + code will fall down to the tokens diff --git a/parsing_cocci/iso_pattern.ml b/parsing_cocci/iso_pattern.ml index 16d484b..d61c16c 100644 --- a/parsing_cocci/iso_pattern.ml +++ b/parsing_cocci/iso_pattern.ml @@ -1837,6 +1837,7 @@ let merge_plus model_mcode e_mcode = | Ast.AFTER(a) -> (anythings@a,t) | Ast.BEFOREAFTER(b,a) -> (b@anythings@a,t) | Ast.NOTHING -> (anythings,t)) + | Ast0.MIXED(_) -> failwith "how did this become mixed?" | _ -> failwith "not possible 7") | Ast0.MIXED(_) -> failwith "not possible 8" | Ast0.PLUS -> failwith "not possible 9" @@ -2418,5 +2419,5 @@ let apply_isos isos rule rule_name = (new_extra_meta@extra_meta,t)) ([],t) isos) rule) in - (List.concat extra_meta, Compute_lines.compute_lines rule) + (List.concat extra_meta, (Compute_lines.compute_lines true) rule) end diff --git a/parsing_cocci/lexer_cocci.mll b/parsing_cocci/lexer_cocci.mll index 878edc5..95d0b32 100644 --- a/parsing_cocci/lexer_cocci.mll +++ b/parsing_cocci/lexer_cocci.mll @@ -179,7 +179,7 @@ let id_tokens lexbuf = let s = tok lexbuf in let linetype = get_current_line_type lexbuf in let in_rule_name = !Data.in_rule_name in - let in_meta = !Data.in_meta in + let in_meta = !Data.in_meta && not !Data.saw_struct in let in_iso = !Data.in_iso in let in_prolog = !Data.in_prolog in match s with @@ -222,9 +222,9 @@ let id_tokens lexbuf = | "on" when in_rule_name -> check_context_linetype s; TOn | "ever" when in_rule_name -> check_context_linetype s; TEver | "never" when in_rule_name -> check_context_linetype s; TNever + (* exists and forall for when are reparsed in parse_cocci.ml *) | "exists" when in_rule_name -> check_context_linetype s; TExists | "forall" when in_rule_name -> check_context_linetype s; TForall - | "reverse" when in_rule_name -> check_context_linetype s; TReverse | "script" when in_rule_name -> check_context_linetype s; TScript | "initialize" when in_rule_name -> check_context_linetype s; TInitialize | "finalize" when in_rule_name -> check_context_linetype s; TFinalize @@ -236,9 +236,11 @@ let id_tokens lexbuf = | "float" -> Tfloat linetype | "long" -> Tlong linetype | "void" -> Tvoid linetype - | "struct" -> Tstruct linetype - | "union" -> Tunion linetype - | "enum" -> Tenum linetype + (* in_meta is only for the first keyword; drop it now to allow any type + name *) + | "struct" -> Data.saw_struct := true; Tstruct linetype + | "union" -> Data.saw_struct := true; Tunion linetype + | "enum" -> Data.saw_struct := true; Tenum linetype | "unsigned" -> Tunsigned linetype | "signed" -> Tsigned linetype @@ -291,6 +293,7 @@ let init _ = Data.in_rule_name := false; Data.in_meta := false; Data.in_prolog := false; + Data.saw_struct := false; Data.inheritable_positions := []; Hashtbl.clear all_metavariables; Hashtbl.clear Data.all_metadecls; @@ -593,6 +596,7 @@ rule token = parse | "&" { start_line true; TAnd (get_current_line_type lexbuf) } | "^" { start_line true; TXor(get_current_line_type lexbuf) } + | "##" { start_line true; TCppConcatOp } | (( ("#" [' ' '\t']* "define" [' ' '\t']+)) as def) ( (letter (letter |digit)*) as ident) { start_line true; diff --git a/parsing_cocci/parse_aux.ml b/parsing_cocci/parse_aux.ml index 8922a0c..f8dccc6 100644 --- a/parsing_cocci/parse_aux.ml +++ b/parsing_cocci/parse_aux.ml @@ -503,3 +503,30 @@ let make_initial_script_rule_name_result lang = let make_final_script_rule_name_result lang = let l = id2name lang in Ast.FinalScriptRulename(l) + +(* Allows type alone only when it is void and only when there is only one + parameter. This avoids ambiguity problems in the parser. *) +let verify_parameter_declarations = function + [] -> () + | [x] -> + (match Ast0.unwrap x with + Ast0.Param(t, None) -> + (match Ast0.unwrap t with + Ast0.BaseType(Ast.VoidType,_) -> () + | _ -> + failwith + (Printf.sprintf + "%d: only void can be a parameter without an identifier" + (Ast0.get_line t))) + | _ -> ()) + | l -> + List.iter + (function x -> + match Ast0.unwrap x with + Ast0.Param(t, None) -> + failwith + (Printf.sprintf + "%d: only void alone can be a parameter without an identifier" + (Ast0.get_line t)) + | _ -> ()) + l diff --git a/parsing_cocci/parse_cocci.ml b/parsing_cocci/parse_cocci.ml index 209ab97..2f552e4 100644 --- a/parsing_cocci/parse_cocci.ml +++ b/parsing_cocci/parse_cocci.ml @@ -64,6 +64,7 @@ let token2c (tok,_) = | PC.TLocal -> "local" | PC.Tlist -> "list" | PC.TFresh -> "fresh" + | PC.TCppConcatOp -> "##" | PC.TPure -> "pure" | PC.TContext -> "context" | PC.TTypedef -> "typedef" @@ -81,7 +82,6 @@ let token2c (tok,_) = | PC.TNever -> "never" | PC.TExists -> "exists" | PC.TForall -> "forall" - | PC.TReverse -> "reverse" | PC.TError -> "error" | PC.TWords -> "words" | PC.TGenerated -> "generated" @@ -596,11 +596,11 @@ let split_token ((tok,_) as t) = PC.TIdentifier | PC.TConstant | PC.TExpression | PC.TIdExpression | PC.TStatement | PC.TPosition | PC.TPosAny | PC.TInitialiser | PC.TFunction | PC.TTypedef | PC.TDeclarer | PC.TIterator | PC.TName - | PC.TType | PC.TParameter | PC.TLocal | PC.Tlist | PC.TFresh | PC.TPure + | PC.TType | PC.TParameter | PC.TLocal | PC.Tlist | PC.TFresh + | PC.TCppConcatOp | PC.TPure | PC.TContext | PC.TRuleName(_) | PC.TUsing | PC.TDisable | PC.TExtends | PC.TPathIsoFile(_) | PC.TDepends | PC.TOn | PC.TEver | PC.TNever | PC.TExists | PC.TForall - | PC.TReverse | PC.TError | PC.TWords | PC.TGenerated | PC.TNothing -> ([t],[t]) | PC.Tchar(clt) | PC.Tshort(clt) | PC.Tint(clt) | PC.Tdouble(clt) @@ -936,6 +936,42 @@ let rec translate_when_true_false = function (PC.TWhenFalse(clt),q)::x::(translate_when_true_false xs) | x::xs -> x :: (translate_when_true_false xs) +(* ----------------------------------------------------------------------- *) + +let check_parentheses tokens = + let clt2line (_,line,_,_,_,_,_,_) = line in + let rec loop seen_open = function + [] -> tokens + | (PC.TOPar(clt),q) :: rest + | (PC.TDefineParam(clt,_,_,_),q) :: rest -> + loop (Common.Left (clt2line clt) :: seen_open) rest + | (PC.TOPar0(clt),q) :: rest -> + loop (Common.Right (clt2line clt) :: seen_open) rest + | (PC.TCPar(clt),q) :: rest -> + (match seen_open with + [] -> + failwith + (Printf.sprintf + "unexpected close parenthesis in line %d\n" (clt2line clt)) + | Common.Left _ :: seen_open -> loop seen_open rest + | Common.Right open_line :: _ -> + failwith + (Printf.sprintf + "disjunction parenthesis in line %d column 0 matched to normal parenthesis on line %d\n" open_line (clt2line clt))) + | (PC.TCPar0(clt),q) :: rest -> + (match seen_open with + [] -> + failwith + (Printf.sprintf + "unexpected close parenthesis in line %d\n" (clt2line clt)) + | Common.Right _ :: seen_open -> loop seen_open rest + | Common.Left open_line :: _ -> + failwith + (Printf.sprintf + "normal parenthesis in line %d matched to disjunction parenthesis on line %d column 0\n" open_line (clt2line clt))) + | x::rest -> loop seen_open rest in + loop [] tokens + (* ----------------------------------------------------------------------- *) (* top level initializers: a sequence of braces followed by a dot *) @@ -1191,7 +1227,8 @@ let prepare_tokens tokens = find_top_init (translate_when_true_false (* after insert_line_end *) (insert_line_end - (detect_types false (find_function_names (detect_attr tokens))))) + (detect_types false + (find_function_names (detect_attr (check_parentheses tokens)))))) let prepare_mv_tokens tokens = detect_types false (detect_attr tokens) @@ -1240,7 +1277,9 @@ let partition_either l = let get_metavars parse_fn table file lexbuf = let rec meta_loop acc (* read one decl at a time *) = let (_,tokens) = - tokens_all table file true lexbuf [PC.TArobArob;PC.TMPtVirg] in + Data.call_in_meta + (function _ -> + tokens_all table file true lexbuf [PC.TArobArob;PC.TMPtVirg]) in let tokens = prepare_mv_tokens tokens in match tokens with [(PC.TArobArob,_)] -> List.rev acc @@ -1312,12 +1351,10 @@ let parse_iso file = | _ -> failwith "Script rules cannot appear in isomorphism rules" in Ast0.rule_name := rule_name; - Data.in_meta := true; let iso_metavars = match get_metavars PC.iso_meta_main table file lexbuf with (iso_metavars,[]) -> iso_metavars - | _ -> failwith "unexpected inheritance in iso" in - Data.in_meta := false; + | _ -> failwith "unexpected inheritance in iso" in (* get the rule *) let (more,tokens) = get_tokens @@ -1370,7 +1407,7 @@ let parse_iso_files existing_isos iso_files extra_path = Data.in_iso := false; existing_isos@(List.concat (List.rev res)) -let parse file = +let rec parse file = let table = Common.full_charpos_to_pos file in Common.with_open_infile file (fun channel -> let lexbuf = Lexing.from_channel channel in @@ -1383,8 +1420,19 @@ let parse file = (true,data) -> (match List.rev data with ((PC.TArobArob as x),_)::_ | ((PC.TArob as x),_)::_ -> - let iso_files = - parse_one "iso file names" PC.include_main file data in + let include_and_iso_files = + parse_one "include and iso file names" PC.include_main file data in + + let (include_files,iso_files) = + List.fold_left + (function (include_files,iso_files) -> + function + Data.Include s -> (s::include_files,iso_files) + | Data.Iso s -> (include_files,s::iso_files)) + ([],[]) include_and_iso_files in + + let (extra_iso_files, extra_rules) = + List.split (List.map parse include_files) in let parse_cocci_rule ruletype old_metas (rule_name, dependencies, iso, dropiso, exists, is_expression) = @@ -1393,10 +1441,8 @@ let parse file = rule_name :: !Data.inheritable_positions; (* get metavariable declarations *) - Data.in_meta := true; let (metavars, inherited_metavars) = - get_metavars PC.meta_main table file lexbuf in - Data.in_meta := false; + get_metavars PC.meta_main table file lexbuf in Hashtbl.add Data.all_metadecls rule_name metavars; Hashtbl.add Lexer_cocci.rule_names rule_name (); Hashtbl.add Lexer_cocci.all_metavariables rule_name @@ -1464,10 +1510,10 @@ let parse file = let get_tokens = tokens_script_all table file false lexbuf in (* meta-variables *) - Data.in_meta := true; let metavars = - get_script_metavars PC.script_meta_main table file lexbuf in - Data.in_meta := false; + Data.call_in_meta + (function _ -> + get_script_metavars PC.script_meta_main table file lexbuf) in let exists_in old_metas (py,(r,m)) = let test (rr,mr) x = @@ -1551,11 +1597,14 @@ let parse file = if more then rule:: (loop (metavars @ old_metas) (gen_starts_with_name more tokens)) - else [rule]; - - in - - (iso_files, loop [] (x = PC.TArob)) + else [rule] in + + (List.fold_left + (function prev -> function cur -> Common.union_set cur prev) + iso_files extra_iso_files, + List.fold_left + (function prev -> function cur -> cur @ prev) + (loop [] (x = PC.TArob)) extra_rules) | _ -> failwith "unexpected code before the first rule\n") | (false,[(PC.TArobArob,_)]) | (false,[(PC.TArob,_)]) -> ([],([] : Ast0.parsed_rule list)) @@ -1622,8 +1671,8 @@ let process file isofile verbose = failwith "bad list of reserved names - all must be at start" in let minus = Test_exps.process minus in - let minus = Compute_lines.compute_lines minus in - let plus = Compute_lines.compute_lines plus in + let minus = Compute_lines.compute_lines false minus in + let plus = Compute_lines.compute_lines false plus in let is_exp = (* only relevant to Flag.make_hrule *) (* doesn't handle multiple minirules properly, but since @@ -1666,8 +1715,7 @@ let process file isofile verbose = exists minus is_exp ruletype in match function_prototypes with None -> [(extra_meta @ metavars, minus_ast)] - | Some mv_fp -> - [(extra_meta @ metavars, minus_ast); mv_fp]) + | Some mv_fp -> [(extra_meta @ metavars, minus_ast); mv_fp]) (* Ast0.CocciRule ((minus, metavarsm, (iso, dropiso, dependencies, rule_name, exists)), (plus, metavars))*) rules in let parsed = List.concat parsed in diff --git a/parsing_cocci/parse_cocci.mli b/parsing_cocci/parse_cocci.mli index c7e2164..ef5e003 100644 --- a/parsing_cocci/parse_cocci.mli +++ b/parsing_cocci/parse_cocci.mli @@ -2,9 +2,13 @@ val process : string (* filename *) -> string option (* iso filename *) -> bool (* verbose? *) -> (Ast_cocci.metavar list list) * (Ast_cocci.rule list) * - (((Ast_cocci.meta_name list) list) list) (*fvs of the rule*) * - (((Ast_cocci.meta_name list) list) list) (*negated pos vars*) * - (((Ast_cocci.meta_name list) list) list) (*used after list*) * - (((Ast_cocci.meta_name list) list) list) (*positions list*) * + Ast_cocci.meta_name list list list (*fvs of the rule*) * + Ast_cocci.meta_name list list list (*negated pos vars*) * + (Ast_cocci.meta_name list list list (*used after list*) * + (*fresh used after list*) + Ast_cocci.meta_name list list list * + (*fresh used after list seeds*) + Ast_cocci.meta_name list list list) * + Ast_cocci.meta_name list list list (*positions list*) * string list list (* non metavars in - code, for grep *) * string option (* non metavars in - code, for glimpse *) diff --git a/parsing_cocci/parser_cocci_menhir.ml b/parsing_cocci/parser_cocci_menhir.ml index a5bb657..8caf447 100644 --- a/parsing_cocci/parser_cocci_menhir.ml +++ b/parsing_cocci/parser_cocci_menhir.ml @@ -1,439 +1,421 @@ - -# 23 "parser_cocci_menhir.mly" - - -(* Not clear how to allow function declarations to specify a return type -and how to allow both to be specified as static, because they are in -different rules. The rules seem to have to be combined, which would allow -functions to be declared as local variables *) - -(* Not clear how to let a function have a parameter of type void. At the -moment, void is allowed to be the type of a variable, which is wrong, and a -parameter needs both a type and an identifier *) -module Ast0 = Ast0_cocci -module Ast = Ast_cocci -module P = Parse_aux - -# 18 "parser_cocci_menhir.ml" exception Error type token = | Tvolatile of ( # 54 "parser_cocci_menhir.mly" (Data.clt) -# 25 "parser_cocci_menhir.ml" +# 8 "parser_cocci_menhir.ml" ) | Tvoid of ( # 50 "parser_cocci_menhir.mly" (Data.clt) -# 30 "parser_cocci_menhir.ml" +# 13 "parser_cocci_menhir.ml" ) | Tunsigned of ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 35 "parser_cocci_menhir.ml" +# 18 "parser_cocci_menhir.ml" ) | Tunion of ( # 50 "parser_cocci_menhir.mly" (Data.clt) -# 40 "parser_cocci_menhir.ml" +# 23 "parser_cocci_menhir.ml" ) | Ttypedef of ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 45 "parser_cocci_menhir.ml" +# 28 "parser_cocci_menhir.ml" ) | Tstruct of ( # 50 "parser_cocci_menhir.mly" (Data.clt) -# 50 "parser_cocci_menhir.ml" +# 33 "parser_cocci_menhir.ml" ) | Tstatic of ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 55 "parser_cocci_menhir.ml" +# 38 "parser_cocci_menhir.ml" ) | Tsigned of ( # 51 "parser_cocci_menhir.mly" (Data.clt) -# 60 "parser_cocci_menhir.ml" +# 43 "parser_cocci_menhir.ml" ) | Tshort of ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 65 "parser_cocci_menhir.ml" +# 48 "parser_cocci_menhir.ml" ) | Tregister of ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 70 "parser_cocci_menhir.ml" +# 53 "parser_cocci_menhir.ml" ) | Tlong of ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 75 "parser_cocci_menhir.ml" +# 58 "parser_cocci_menhir.ml" ) | Tlist | Tint of ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 81 "parser_cocci_menhir.ml" +# 64 "parser_cocci_menhir.ml" ) | Tinline of ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 86 "parser_cocci_menhir.ml" +# 69 "parser_cocci_menhir.ml" ) | Tfloat of ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 91 "parser_cocci_menhir.ml" +# 74 "parser_cocci_menhir.ml" ) | Textern of ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 96 "parser_cocci_menhir.ml" +# 79 "parser_cocci_menhir.ml" ) | Tenum of ( # 50 "parser_cocci_menhir.mly" (Data.clt) -# 101 "parser_cocci_menhir.ml" +# 84 "parser_cocci_menhir.ml" ) | Tdouble of ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 106 "parser_cocci_menhir.ml" +# 89 "parser_cocci_menhir.ml" ) | Tconst of ( # 54 "parser_cocci_menhir.mly" (Data.clt) -# 111 "parser_cocci_menhir.ml" +# 94 "parser_cocci_menhir.ml" ) | Tchar of ( # 49 "parser_cocci_menhir.mly" (Data.clt) -# 116 "parser_cocci_menhir.ml" +# 99 "parser_cocci_menhir.ml" ) | Tauto of ( # 53 "parser_cocci_menhir.mly" (Data.clt) -# 121 "parser_cocci_menhir.ml" +# 104 "parser_cocci_menhir.ml" ) | Tattr of ( # 55 "parser_cocci_menhir.mly" (string * Data.clt) -# 126 "parser_cocci_menhir.ml" +# 109 "parser_cocci_menhir.ml" ) | TXor of ( # 92 "parser_cocci_menhir.mly" (Data.clt) -# 131 "parser_cocci_menhir.ml" +# 114 "parser_cocci_menhir.ml" ) | TWords | TWhy0 | TWhy of ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 138 "parser_cocci_menhir.ml" +# 121 "parser_cocci_menhir.ml" ) | TWhile of ( # 57 "parser_cocci_menhir.mly" (Data.clt) -# 143 "parser_cocci_menhir.ml" +# 126 "parser_cocci_menhir.ml" ) | TWhenTrue of ( # 74 "parser_cocci_menhir.mly" (Data.clt) -# 148 "parser_cocci_menhir.ml" +# 131 "parser_cocci_menhir.ml" ) | TWhenFalse of ( # 74 "parser_cocci_menhir.mly" (Data.clt) -# 153 "parser_cocci_menhir.ml" +# 136 "parser_cocci_menhir.ml" ) | TWhen of ( # 74 "parser_cocci_menhir.mly" (Data.clt) -# 158 "parser_cocci_menhir.ml" +# 141 "parser_cocci_menhir.ml" ) | TUsing | TTypedef | TTypeId of ( # 59 "parser_cocci_menhir.mly" (string * Data.clt) -# 165 "parser_cocci_menhir.ml" +# 148 "parser_cocci_menhir.ml" ) | TType | TTilde of ( # 99 "parser_cocci_menhir.mly" (Data.clt) -# 171 "parser_cocci_menhir.ml" +# 154 "parser_cocci_menhir.ml" ) | TSwitch of ( # 57 "parser_cocci_menhir.mly" (Data.clt) -# 176 "parser_cocci_menhir.ml" +# 159 "parser_cocci_menhir.ml" ) | TString of ( # 87 "parser_cocci_menhir.mly" (string * Data.clt) -# 181 "parser_cocci_menhir.ml" +# 164 "parser_cocci_menhir.ml" ) | TStrict of ( # 74 "parser_cocci_menhir.mly" (Data.clt) -# 186 "parser_cocci_menhir.ml" +# 169 "parser_cocci_menhir.ml" ) | TStatement | TSizeof of ( # 58 "parser_cocci_menhir.mly" (Data.clt) -# 192 "parser_cocci_menhir.ml" +# 175 "parser_cocci_menhir.ml" ) | TShOp of ( # 96 "parser_cocci_menhir.mly" (Ast_cocci.arithOp * Data.clt) -# 197 "parser_cocci_menhir.ml" +# 180 "parser_cocci_menhir.ml" ) | TScriptData of ( # 71 "parser_cocci_menhir.mly" (string) -# 202 "parser_cocci_menhir.ml" +# 185 "parser_cocci_menhir.ml" ) | TScript | TRuleName of ( # 47 "parser_cocci_menhir.mly" (string) -# 208 "parser_cocci_menhir.ml" +# 191 "parser_cocci_menhir.ml" ) | TRightIso - | TReverse | TReturn of ( # 57 "parser_cocci_menhir.mly" (Data.clt) -# 215 "parser_cocci_menhir.ml" +# 197 "parser_cocci_menhir.ml" ) | TPure | TPtrOp of ( # 104 "parser_cocci_menhir.mly" (Data.clt) -# 221 "parser_cocci_menhir.ml" +# 203 "parser_cocci_menhir.ml" ) | TPtVirg of ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 226 "parser_cocci_menhir.ml" +# 208 "parser_cocci_menhir.ml" ) | TPragma of ( # 59 "parser_cocci_menhir.mly" (string * Data.clt) -# 231 "parser_cocci_menhir.ml" +# 213 "parser_cocci_menhir.ml" ) | TPosition | TPosAny | TPlusFile of ( # 83 "parser_cocci_menhir.mly" (string * Data.clt) -# 238 "parser_cocci_menhir.ml" +# 220 "parser_cocci_menhir.ml" ) | TPlus0 | TPlus of ( # 98 "parser_cocci_menhir.mly" (Data.clt) -# 244 "parser_cocci_menhir.ml" +# 226 "parser_cocci_menhir.ml" ) | TPathIsoFile of ( # 79 "parser_cocci_menhir.mly" (string) -# 249 "parser_cocci_menhir.ml" +# 231 "parser_cocci_menhir.ml" ) | TParameter | TPOEllipsis of ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 255 "parser_cocci_menhir.ml" +# 237 "parser_cocci_menhir.ml" ) | TPCEllipsis of ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 260 "parser_cocci_menhir.ml" +# 242 "parser_cocci_menhir.ml" ) | TPArob | TOrLog of ( # 89 "parser_cocci_menhir.mly" (Data.clt) -# 266 "parser_cocci_menhir.ml" +# 248 "parser_cocci_menhir.ml" ) | TOr of ( # 91 "parser_cocci_menhir.mly" (Data.clt) -# 271 "parser_cocci_menhir.ml" +# 253 "parser_cocci_menhir.ml" ) | TOn | TOPar0 of ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 277 "parser_cocci_menhir.ml" +# 259 "parser_cocci_menhir.ml" ) | TOPar of ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 282 "parser_cocci_menhir.ml" +# 264 "parser_cocci_menhir.ml" ) | TOInit of ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 287 "parser_cocci_menhir.ml" +# 269 "parser_cocci_menhir.ml" ) | TOEllipsis of ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 292 "parser_cocci_menhir.ml" +# 274 "parser_cocci_menhir.ml" ) | TOCro of ( # 102 "parser_cocci_menhir.mly" (Data.clt) -# 297 "parser_cocci_menhir.ml" +# 279 "parser_cocci_menhir.ml" ) | TOBrace of ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 302 "parser_cocci_menhir.ml" +# 284 "parser_cocci_menhir.ml" ) | TNothing | TNotEq of ( # 94 "parser_cocci_menhir.mly" (Data.clt) -# 308 "parser_cocci_menhir.ml" +# 290 "parser_cocci_menhir.ml" ) | TNever | TName | TMul of ( # 99 "parser_cocci_menhir.mly" (Data.clt) -# 315 "parser_cocci_menhir.ml" +# 297 "parser_cocci_menhir.ml" ) | TMinusFile of ( # 83 "parser_cocci_menhir.mly" (string * Data.clt) -# 320 "parser_cocci_menhir.ml" +# 302 "parser_cocci_menhir.ml" ) | TMinus of ( # 98 "parser_cocci_menhir.mly" (Data.clt) -# 325 "parser_cocci_menhir.ml" +# 307 "parser_cocci_menhir.ml" ) | TMid0 of ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 330 "parser_cocci_menhir.ml" +# 312 "parser_cocci_menhir.ml" ) | TMetaType of ( # 64 "parser_cocci_menhir.mly" (Parse_aux.info) -# 335 "parser_cocci_menhir.ml" +# 317 "parser_cocci_menhir.ml" ) | TMetaStmList of ( # 64 "parser_cocci_menhir.mly" (Parse_aux.info) -# 340 "parser_cocci_menhir.ml" +# 322 "parser_cocci_menhir.ml" ) | TMetaStm of ( # 64 "parser_cocci_menhir.mly" (Parse_aux.info) -# 345 "parser_cocci_menhir.ml" +# 327 "parser_cocci_menhir.ml" ) | TMetaPos of ( # 68 "parser_cocci_menhir.mly" (Parse_aux.pos_info) -# 350 "parser_cocci_menhir.ml" +# 332 "parser_cocci_menhir.ml" ) | TMetaParamList of ( # 66 "parser_cocci_menhir.mly" (Parse_aux.list_info) -# 355 "parser_cocci_menhir.ml" +# 337 "parser_cocci_menhir.ml" ) | TMetaParam of ( # 64 "parser_cocci_menhir.mly" (Parse_aux.info) -# 360 "parser_cocci_menhir.ml" +# 342 "parser_cocci_menhir.ml" ) | TMetaLocalIdExp of ( # 67 "parser_cocci_menhir.mly" (Parse_aux.typed_info) -# 365 "parser_cocci_menhir.ml" +# 347 "parser_cocci_menhir.ml" ) | TMetaLocalFunc of ( # 61 "parser_cocci_menhir.mly" (Parse_aux.idinfo) -# 370 "parser_cocci_menhir.ml" +# 352 "parser_cocci_menhir.ml" ) | TMetaIterator of ( # 62 "parser_cocci_menhir.mly" (Parse_aux.idinfo) -# 375 "parser_cocci_menhir.ml" +# 357 "parser_cocci_menhir.ml" ) | TMetaInit of ( # 65 "parser_cocci_menhir.mly" (Parse_aux.info) -# 380 "parser_cocci_menhir.ml" +# 362 "parser_cocci_menhir.ml" ) | TMetaIdExp of ( # 67 "parser_cocci_menhir.mly" (Parse_aux.typed_info) -# 385 "parser_cocci_menhir.ml" +# 367 "parser_cocci_menhir.ml" ) | TMetaId of ( # 61 "parser_cocci_menhir.mly" (Parse_aux.idinfo) -# 390 "parser_cocci_menhir.ml" +# 372 "parser_cocci_menhir.ml" ) | TMetaFunc of ( # 61 "parser_cocci_menhir.mly" (Parse_aux.idinfo) -# 395 "parser_cocci_menhir.ml" +# 377 "parser_cocci_menhir.ml" ) | TMetaExpList of ( # 66 "parser_cocci_menhir.mly" (Parse_aux.list_info) -# 400 "parser_cocci_menhir.ml" +# 382 "parser_cocci_menhir.ml" ) | TMetaExp of ( # 67 "parser_cocci_menhir.mly" (Parse_aux.typed_info) -# 405 "parser_cocci_menhir.ml" +# 387 "parser_cocci_menhir.ml" ) | TMetaErr of ( # 63 "parser_cocci_menhir.mly" (Parse_aux.expinfo) -# 410 "parser_cocci_menhir.ml" +# 392 "parser_cocci_menhir.ml" ) | TMetaDeclarer of ( # 62 "parser_cocci_menhir.mly" (Parse_aux.idinfo) -# 415 "parser_cocci_menhir.ml" +# 397 "parser_cocci_menhir.ml" ) | TMetaConst of ( # 67 "parser_cocci_menhir.mly" (Parse_aux.typed_info) -# 420 "parser_cocci_menhir.ml" +# 402 "parser_cocci_menhir.ml" ) | TMPtVirg | TLogOp of ( # 95 "parser_cocci_menhir.mly" (Ast_cocci.logicalOp * Data.clt) -# 426 "parser_cocci_menhir.ml" +# 408 "parser_cocci_menhir.ml" ) | TLocal | TLineEnd of ( # 74 "parser_cocci_menhir.mly" (Data.clt) -# 432 "parser_cocci_menhir.ml" +# 414 "parser_cocci_menhir.ml" ) | TIteratorId of ( # 59 "parser_cocci_menhir.mly" (string * Data.clt) -# 437 "parser_cocci_menhir.ml" +# 419 "parser_cocci_menhir.ml" ) | TIterator | TIsoType @@ -448,60 +430,60 @@ type token = | TInt of ( # 87 "parser_cocci_menhir.mly" (string * Data.clt) -# 452 "parser_cocci_menhir.ml" +# 434 "parser_cocci_menhir.ml" ) | TInitialize | TInitialiser | TIncludeNL of ( # 80 "parser_cocci_menhir.mly" (string * Data.clt) -# 459 "parser_cocci_menhir.ml" +# 441 "parser_cocci_menhir.ml" ) | TIncludeL of ( # 80 "parser_cocci_menhir.mly" (string * Data.clt) -# 464 "parser_cocci_menhir.ml" +# 446 "parser_cocci_menhir.ml" ) | TInc of ( # 85 "parser_cocci_menhir.mly" (Data.clt) -# 469 "parser_cocci_menhir.ml" +# 451 "parser_cocci_menhir.ml" ) | TIf of ( # 57 "parser_cocci_menhir.mly" (Data.clt) -# 474 "parser_cocci_menhir.ml" +# 456 "parser_cocci_menhir.ml" ) | TIdentifier | TIdent of ( # 59 "parser_cocci_menhir.mly" (string * Data.clt) -# 480 "parser_cocci_menhir.ml" +# 462 "parser_cocci_menhir.ml" ) | TIdExpression | TGoto of ( # 58 "parser_cocci_menhir.mly" (Data.clt) -# 486 "parser_cocci_menhir.ml" +# 468 "parser_cocci_menhir.ml" ) | TGenerated | TFunction | TFunDecl of ( # 58 "parser_cocci_menhir.mly" (Data.clt) -# 493 "parser_cocci_menhir.ml" +# 475 "parser_cocci_menhir.ml" ) | TFresh | TForall | TFor of ( # 57 "parser_cocci_menhir.mly" (Data.clt) -# 500 "parser_cocci_menhir.ml" +# 482 "parser_cocci_menhir.ml" ) | TFloat of ( # 87 "parser_cocci_menhir.mly" (string * Data.clt) -# 505 "parser_cocci_menhir.ml" +# 487 "parser_cocci_menhir.ml" ) | TFinalize | TExtends @@ -512,155 +494,173 @@ type token = | TEqEq of ( # 94 "parser_cocci_menhir.mly" (Data.clt) -# 516 "parser_cocci_menhir.ml" +# 498 "parser_cocci_menhir.ml" ) | TEq of ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 521 "parser_cocci_menhir.ml" +# 503 "parser_cocci_menhir.ml" ) | TElse of ( # 57 "parser_cocci_menhir.mly" (Data.clt) -# 526 "parser_cocci_menhir.ml" +# 508 "parser_cocci_menhir.ml" ) | TEllipsis of ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 531 "parser_cocci_menhir.ml" +# 513 "parser_cocci_menhir.ml" ) | TDotDot of ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 536 "parser_cocci_menhir.ml" +# 518 "parser_cocci_menhir.ml" ) | TDot of ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 541 "parser_cocci_menhir.ml" +# 523 "parser_cocci_menhir.ml" ) | TDo of ( # 57 "parser_cocci_menhir.mly" (Data.clt) -# 546 "parser_cocci_menhir.ml" +# 528 "parser_cocci_menhir.ml" ) | TDmOp of ( # 97 "parser_cocci_menhir.mly" (Ast_cocci.arithOp * Data.clt) -# 551 "parser_cocci_menhir.ml" +# 533 "parser_cocci_menhir.ml" ) | TDisable | TDepends | TDefineParam of ( # 82 "parser_cocci_menhir.mly" (Data.clt * token * int * int) -# 558 "parser_cocci_menhir.ml" +# 540 "parser_cocci_menhir.ml" ) | TDefine of ( # 81 "parser_cocci_menhir.mly" (Data.clt * token) -# 563 "parser_cocci_menhir.ml" +# 545 "parser_cocci_menhir.ml" ) | TDefault of ( # 57 "parser_cocci_menhir.mly" (Data.clt) -# 568 "parser_cocci_menhir.ml" +# 550 "parser_cocci_menhir.ml" ) | TDeclarerId of ( # 59 "parser_cocci_menhir.mly" (string * Data.clt) -# 573 "parser_cocci_menhir.ml" +# 555 "parser_cocci_menhir.ml" ) | TDeclarer | TDec of ( # 85 "parser_cocci_menhir.mly" (Data.clt) -# 579 "parser_cocci_menhir.ml" +# 561 "parser_cocci_menhir.ml" ) + | TCppConcatOp | TContinue of ( # 58 "parser_cocci_menhir.mly" (Data.clt) -# 584 "parser_cocci_menhir.ml" +# 567 "parser_cocci_menhir.ml" ) | TContext | TConstant | TComma of ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 591 "parser_cocci_menhir.ml" +# 574 "parser_cocci_menhir.ml" ) | TChar of ( # 87 "parser_cocci_menhir.mly" (string * Data.clt) -# 596 "parser_cocci_menhir.ml" +# 579 "parser_cocci_menhir.ml" ) | TCase of ( # 57 "parser_cocci_menhir.mly" (Data.clt) -# 601 "parser_cocci_menhir.ml" +# 584 "parser_cocci_menhir.ml" ) | TCPar0 of ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 606 "parser_cocci_menhir.ml" +# 589 "parser_cocci_menhir.ml" ) | TCPar of ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 611 "parser_cocci_menhir.ml" +# 594 "parser_cocci_menhir.ml" ) | TCEllipsis of ( # 73 "parser_cocci_menhir.mly" (Data.clt) -# 616 "parser_cocci_menhir.ml" +# 599 "parser_cocci_menhir.ml" ) | TCCro of ( # 102 "parser_cocci_menhir.mly" (Data.clt) -# 621 "parser_cocci_menhir.ml" +# 604 "parser_cocci_menhir.ml" ) | TCBrace of ( # 101 "parser_cocci_menhir.mly" (Data.clt) -# 626 "parser_cocci_menhir.ml" +# 609 "parser_cocci_menhir.ml" ) | TBreak of ( # 58 "parser_cocci_menhir.mly" (Data.clt) -# 631 "parser_cocci_menhir.ml" +# 614 "parser_cocci_menhir.ml" ) | TBang0 | TBang of ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 637 "parser_cocci_menhir.ml" +# 620 "parser_cocci_menhir.ml" ) | TAssign of ( # 108 "parser_cocci_menhir.mly" (Ast_cocci.assignOp * Data.clt) -# 642 "parser_cocci_menhir.ml" +# 625 "parser_cocci_menhir.ml" ) | TArobArob | TArob | TAny of ( # 74 "parser_cocci_menhir.mly" (Data.clt) -# 649 "parser_cocci_menhir.ml" +# 632 "parser_cocci_menhir.ml" ) | TAndLog of ( # 90 "parser_cocci_menhir.mly" (Data.clt) -# 654 "parser_cocci_menhir.ml" +# 637 "parser_cocci_menhir.ml" ) | TAnd of ( # 93 "parser_cocci_menhir.mly" (Data.clt) -# 659 "parser_cocci_menhir.ml" +# 642 "parser_cocci_menhir.ml" ) | EOF and _menhir_jeton = token + +# 23 "parser_cocci_menhir.mly" + + +(* Not clear how to allow function declarations to specify a return type +and how to allow both to be specified as static, because they are in +different rules. The rules seem to have to be combined, which would allow +functions to be declared as local variables *) + +(* Not clear how to let a function have a parameter of type void. At the +moment, void is allowed to be the type of a variable, which is wrong, and a +parameter needs both a type and an identifier *) +module Ast0 = Ast0_cocci +module Ast = Ast_cocci +module P = Parse_aux + +# 664 "parser_cocci_menhir.ml" let _eRR = Error @@ -715,217 +715,217 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct 153 | TContinue _ -> 152 - | TDec _ -> + | TCppConcatOp -> 151 - | TDeclarer -> + | TDec _ -> 150 - | TDeclarerId _ -> + | TDeclarer -> 149 - | TDefault _ -> + | TDeclarerId _ -> 148 - | TDefine _ -> + | TDefault _ -> 147 - | TDefineParam _ -> + | TDefine _ -> 146 - | TDepends -> + | TDefineParam _ -> 145 - | TDisable -> + | TDepends -> 144 - | TDmOp _ -> + | TDisable -> 143 - | TDo _ -> + | TDmOp _ -> 142 - | TDot _ -> + | TDo _ -> 141 - | TDotDot _ -> + | TDot _ -> 140 - | TEllipsis _ -> + | TDotDot _ -> 139 - | TElse _ -> + | TEllipsis _ -> 138 - | TEq _ -> + | TElse _ -> 137 - | TEqEq _ -> + | TEq _ -> 136 - | TError -> + | TEqEq _ -> 135 - | TEver -> + | TError -> 134 - | TExists -> + | TEver -> 133 - | TExpression -> + | TExists -> 132 - | TExtends -> + | TExpression -> 131 - | TFinalize -> + | TExtends -> 130 - | TFloat _ -> + | TFinalize -> 129 - | TFor _ -> + | TFloat _ -> 128 - | TForall -> + | TFor _ -> 127 - | TFresh -> + | TForall -> 126 - | TFunDecl _ -> + | TFresh -> 125 - | TFunction -> + | TFunDecl _ -> 124 - | TGenerated -> + | TFunction -> 123 - | TGoto _ -> + | TGenerated -> 122 - | TIdExpression -> + | TGoto _ -> 121 - | TIdent _ -> + | TIdExpression -> 120 - | TIdentifier -> + | TIdent _ -> 119 - | TIf _ -> + | TIdentifier -> 118 - | TInc _ -> + | TIf _ -> 117 - | TIncludeL _ -> + | TInc _ -> 116 - | TIncludeNL _ -> + | TIncludeL _ -> 115 - | TInitialiser -> + | TIncludeNL _ -> 114 - | TInitialize -> + | TInitialiser -> 113 - | TInt _ -> + | TInitialize -> 112 - | TInvalid -> + | TInt _ -> 111 - | TIso -> + | TInvalid -> 110 - | TIsoArgExpression -> + | TIso -> 109 - | TIsoDeclaration -> + | TIsoArgExpression -> 108 - | TIsoExpression -> + | TIsoDeclaration -> 107 - | TIsoStatement -> + | TIsoExpression -> 106 - | TIsoTestExpression -> + | TIsoStatement -> 105 - | TIsoTopLevel -> + | TIsoTestExpression -> 104 - | TIsoType -> + | TIsoTopLevel -> 103 - | TIterator -> + | TIsoType -> 102 - | TIteratorId _ -> + | TIterator -> 101 - | TLineEnd _ -> + | TIteratorId _ -> 100 - | TLocal -> + | TLineEnd _ -> 99 - | TLogOp _ -> + | TLocal -> 98 - | TMPtVirg -> + | TLogOp _ -> 97 - | TMetaConst _ -> + | TMPtVirg -> 96 - | TMetaDeclarer _ -> + | TMetaConst _ -> 95 - | TMetaErr _ -> + | TMetaDeclarer _ -> 94 - | TMetaExp _ -> + | TMetaErr _ -> 93 - | TMetaExpList _ -> + | TMetaExp _ -> 92 - | TMetaFunc _ -> + | TMetaExpList _ -> 91 - | TMetaId _ -> + | TMetaFunc _ -> 90 - | TMetaIdExp _ -> + | TMetaId _ -> 89 - | TMetaInit _ -> + | TMetaIdExp _ -> 88 - | TMetaIterator _ -> + | TMetaInit _ -> 87 - | TMetaLocalFunc _ -> + | TMetaIterator _ -> 86 - | TMetaLocalIdExp _ -> + | TMetaLocalFunc _ -> 85 - | TMetaParam _ -> + | TMetaLocalIdExp _ -> 84 - | TMetaParamList _ -> + | TMetaParam _ -> 83 - | TMetaPos _ -> + | TMetaParamList _ -> 82 - | TMetaStm _ -> + | TMetaPos _ -> 81 - | TMetaStmList _ -> + | TMetaStm _ -> 80 - | TMetaType _ -> + | TMetaStmList _ -> 79 - | TMid0 _ -> + | TMetaType _ -> 78 - | TMinus _ -> + | TMid0 _ -> 77 - | TMinusFile _ -> + | TMinus _ -> 76 - | TMul _ -> + | TMinusFile _ -> 75 - | TName -> + | TMul _ -> 74 - | TNever -> + | TName -> 73 - | TNotEq _ -> + | TNever -> 72 - | TNothing -> + | TNotEq _ -> 71 - | TOBrace _ -> + | TNothing -> 70 - | TOCro _ -> + | TOBrace _ -> 69 - | TOEllipsis _ -> + | TOCro _ -> 68 - | TOInit _ -> + | TOEllipsis _ -> 67 - | TOPar _ -> + | TOInit _ -> 66 - | TOPar0 _ -> + | TOPar _ -> 65 - | TOn -> + | TOPar0 _ -> 64 - | TOr _ -> + | TOn -> 63 - | TOrLog _ -> + | TOr _ -> 62 - | TPArob -> + | TOrLog _ -> 61 - | TPCEllipsis _ -> + | TPArob -> 60 - | TPOEllipsis _ -> + | TPCEllipsis _ -> 59 - | TParameter -> + | TPOEllipsis _ -> 58 - | TPathIsoFile _ -> + | TParameter -> 57 - | TPlus _ -> + | TPathIsoFile _ -> 56 - | TPlus0 -> + | TPlus _ -> 55 - | TPlusFile _ -> + | TPlus0 -> 54 - | TPosAny -> + | TPlusFile _ -> 53 - | TPosition -> + | TPosAny -> 52 - | TPragma _ -> + | TPosition -> 51 - | TPtVirg _ -> + | TPragma _ -> 50 - | TPtrOp _ -> + | TPtVirg _ -> 49 - | TPure -> + | TPtrOp _ -> 48 - | TReturn _ -> + | TPure -> 47 - | TReverse -> + | TReturn _ -> 46 | TRightIso -> 45 @@ -1066,6 +1066,8 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct Obj.repr () | TContinue _v -> Obj.repr _v + | TCppConcatOp -> + Obj.repr () | TDec _v -> Obj.repr _v | TDeclarer -> @@ -1276,8 +1278,6 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct Obj.repr () | TReturn _v -> Obj.repr _v - | TReverse -> - Obj.repr () | TRightIso -> Obj.repr () | TRuleName _v -> @@ -1370,19 +1370,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct Obj.repr _v let default_reduction = - (16, "\000\000\000\000\0015\0016\000\000\0018\0017\000\001\000\000\001q\000\000\000\000\000\137\000\000\000\000\001\237\000\143\000\000\001\025\000\000\001$\001\028\001\022\001.\002\226\002\225\000\000\001\026\000\000\001%\001\029\001\023\001/\001\027\000\000\001&\001\030\001 \000\000\0012\002\134\0011\001'\001\031\000\136\001\024\001-\000\000\000\000\001,\000\000\000\000\000\000\000\000\000\000\001c\000\241\002\216\000\000\000\000\000\000\000\000\000\000\002\221\000\000\001)\000\000\002\223\000\000\000\000\000\000\003\029\002P\000\000\003\027\000\000\002j\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\026\003\028\002V\001\013\002U\001\011\001\012\002T\002S\002R\002N\000\000\000\000\002O\000\214\000\000\002Q\000\000\003\025\000\000\000c\001\n\0021\000\000\000\000\0024\000\000\000\015\000\000\000\000\000\000\000\000\000\215\002M\002Y\000[\000\021\000]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\000\000\000\023\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\131\002\018\000R\000\224\000^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\\000T\000\000\000S\001\021\000\000\000\000\000\141\000\225\000\000\0027\000\226\000\014\000\016\000\000\000\000\000\144\000\000\000\142\000\000\000\000\000\229\000\000\000\000\0022\0025\000\000\0023\0026\003\000\003\001\002\255\000\000\002W\002\254\000\000\002q\000\000\000\000\002p\002o\002n\002m\002l\002h\000\000\000\000\002i\000\000\002k\000\000\000\000\000g\002?\000\000\000\000\002B\000\000\000\000\002E\000\000\000\000\002@\002C\000\000\002A\002D\002s\002g\003\014\003\015\003\013\003\012\000h\000\000\000\000\000W\000\000\000V\000\236\000\000\001\229\000\000\000\000\000\000\000\000\000\000\000\219\001\235\000\000\000\000\001\137\000U\0001\000\212\000_\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\000\000\0003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002X\000\000\000\145\000\000\000\000\001\213\000\000\001\127\001\194\000\000\000\000\001\212\000\000\001}\001\193\000\000\000\000\000d\000\000\002r\000\000\000\000\003\017\003\016\000\000\001\230\000\000\000\000\003\003\003\002\000\000\000Q\000\151\000\000\001e\000\000\002\219\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\249\000\155\000\000\000\000\000n\000o\001\248\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\166\001\218\000\000\000\152\000\161\000\000\001\220\000\000\000\000\000\000\000\000\000\153\000\167\000\000\001k\000\000\000\000\002\218\000\000\000\000\000\139\000\000\000\000\002\217\000\000\000\000\000\000\002\220\002\224\000\000\000\000\000\000\001*\000\000\000\223\000\000\001+\000\000\000\000\001N\000\000\001M\000\000\001[\000\000\001s\000\000\000\000\000\000\000\000\000\000\000\000\001\017\000\000\000\000\000\148\000\000\000\000\000\000\000\000\000\150\000\000\000\146\000\000\002\252\000\000\000\195\002\251\000\000\000\000\000\149\000\000\000\147\002\212\002\214\002\215\002\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002w\000\000\000\000\000\000\000\000\002~\000\000\000\000\002}\002|\002{\002z\002y\001J\002u\000\000\000\000\002v\000\000\002x\000\000\000\000\000i\002F\000\000\000\000\002I\000\000\000\000\002L\000\000\000\000\002G\002J\000\000\002H\002K\002\128\002t\003\021\003\022\003\020\003\019\000j\000\000\000\000\000Z\000\000\000Y\000\000\002\127\000\000\001\195\000X\000?\000\235\000`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\135\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\024\003\023\000\000\002\203\000\000\002\202\000\000\000\000\000\000\000\000\003$\000\000\000\000\000\000\003%\000\000\000\018\000\000\000\000\000\000\003 \000\000\001\139\000\000\000\000\000\000\000\168\002\193\001a\000\000\000\157\001`\001:\0019\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\207\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\216\000\217\000\201\000\000\001o\000\000\000\000\000\200\000\196\000\000\000\203\000\197\000\202\000\000\002\205\000\000\002\204\002\190\000\000\000\000\000\000\000\000\000\000\002\199\000\000\000\000\000\000\000\000\000\000\002\200\002\192\000\000\002\206\000\000\002\194\000\000\000\172\000\000\002\209\000\156\000\000\001<\000\000\000\000\000\000\000\000\000\000\000\000\001\018\000\000\000w\000\000\000\000\000\000\002]\000\000\000\000\000\000\002e\000\000\000\000\002d\000\000\003\n\002c\002b\002a\002`\002_\002[\000\000\000\000\002\\\000\000\002^\000\000\000\000\000\000\000\000\000\000\000e\0028\000\000\000\000\002;\000\000\000\000\002>\000\000\000\000\0029\002<\000\000\002:\002=\002f\002Z\000f\003\007\003\008\003\006\003\005\003\t\000\000\000\000\000\000\000\000\000\211\000\210\000\000\000\000\000\000\000\000\001@\000\000\000\221\001=\000\000\000\209\001C\000\000\000\000\001D\000\000\000\000\001E\000\000\001m\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\000\000\000%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001F\000\000\001B\000\000\000\000\001H\000\000\000\000\000\000\000\000\000\000\000\000\000t\000q\000r\001I\001?\000\000\001>\000\000\000\188\000\000\002\169\000\000\000\000\000\184\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\191\000\000\000\000\000\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\016\000\000\000\000\000\000\000\181\000\000\000\178\000\000\000\000\000\000\000\000\000\000\000\189\000\000\000\185\000\000\000\000\002\230\000\000\002\237\000\174\000\000\000\000\000\000\000\000\000\186\000\000\000\182\000\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\190\000\000\000\000\000\193\000\000\002\231\000\173\000\000\002\232\000\000\002\239\000\000\000\000\000\000\000\000\000\192\000\000\000\176\000\000\000\000\000\000\000\000\001\015\000\000\000\000\000\000\000\180\000\000\000\177\000\000\000\000\000\000\000\000\000\000\000\187\000\000\000\183\000\170\000\169\000\000\002\240\002\241\000\000\002\242\000\000\002\243\000\000\001;\002\197\000\000\000\000\001\217\000\000\001\135\001\199\000\000\002\191\000\000\000\000\000\000\002\196\000\000\000\000\000\000\001\003\000\000\000\253\000\000\000\254\000\000\001\008\000\252\001\007\000\000\002\208\001\t\000\000\000\175\000\000\000\000\000\000\000\000\001\005\001\000\001\214\000\000\001\001\000\000\001\002\000\000\001\129\001\196\000\000\000\000\000\000\001\225\000\000\001\223\000\000\000\000\001\227\001\221\000\000\001\228\001\222\000\000\002\210\001\231\000\000\000\171\000\000\000\000\001\215\000\000\001\131\001\197\000\000\003!\000\000\003\030\000\000\003\031\000\019\000\020\000\000\000\000\002\151\000\000\002\150\000\000\000\000\002\153\000\000\002\152\000\000\000\000\000\000\002\002\000\000\000\000\002\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\t\000\000\000\000\002\012\000\000\000\000\001\252\000\000\000\000\001\255\000\000\000\000\000\000\002\003\000\000\000\000\002\007\000\000\000\000\001\216\000\000\000\000\002\000\000\000\000\000\002\004\002\148\001\253\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\008\000\000\000\000\002\011\000\000\002\149\000\000\000\000\000\000\000\000\002\n\000\000\001\250\000\000\001\251\000\000\000\000\001\254\000\000\000\000\000\000\002\001\000\000\000\000\002\005\000\000\001\133\001\198\000\000\002\154\000\000\000\000\000\000\003\"\000\017\000u\000\000\003#\000\000\000\000\002\165\000\000\000\000\002\211\000a\000\000\000\000\000\000\000b\000\000\002\201\000\000\001g\002\198\000\000\000\000\001T\000\000\001S\000\000\001\\\000\000\001y\000\000\000\000\000\000\001R\000\000\001Q\000\000\001Y\000\000\001w\000\000\000\000\000\000\001V\000\000\001U\000\000\001Z\000\000\001{\000\000\000\000\000\000\001W\000\000\000\000\000\000\000\000\001P\000\000\001O\000\000\001]\000\000\001u\000\000\000\000\000\000\001X\000\002\000\000\000N\000O\000\000\000\000\002\137\002\139\000\000\000\000\001\162\002\140\002\138\000\129\000\000\000\000\002\189\000\000\000\000\002\146\002\135\002\136\000\000\001\174\000M\001^\000\003\000\000\000\000\002\131\000\000\002\016\000\000\000\128\000\000\000\000\002\187\000\000\000\000\000\000\000z\000\000\000\000\002\175\000\000\001\245\001\244\001\157\002\144\000\000\001\190\000\000\002\132\000\000\000\000\000|\000\000\000\000\002\179\000\000\001\171\000\000\000\000\001\167\000\000\000\000\000\000\001\170\000\000\001\169\000\000\000\000\000\000\000\000\000\000\000\000\001\191\000\000\001\165\000\000\001\164\000\000\000v\000\000\000\000\002\167\000\000\000\000\001\161\000\000\000\000\000~\000\000\000\000\002\183\000\000\000\000\000\000\000{\000\000\000\000\002\177\000\000\001\241\001\240\001\153\002\142\000\000\001\177\000\000\000\000\000\000\001\173\000\000\001\179\000\000\000\000\001\168\000\000\000\000\001\175\000\000\000\000\001\176\000\000\000\000\000\000\000\000\000\000\000\000\001\192\000\000\001\166\000}\000\000\000\000\002\181\000\000\000\000\000\000\0014\000y\0013\000\000\000\000\002\173\000\000\001\239\001\238\001\151\002\141\000\000\000\127\000\000\000\000\002\185\000\000\000\000\000\000\000\000\001\243\001\242\001\155\002\143\000\000\001\184\000\000\001\188\000\000\000\000\001\180\000\000\000\000\000\000\001\172\000\000\001\178\000\000\000\000\000\000\000\000\000\000\000\000\001\187\001\160\000\000\001\186\000\000\000\000\000\000\000\000\001\183\000\000\000\000\001\182\000\000\001\181\000\000\000\000\000\000\000\000\001\185\000\000\001\189\000\000\000\000\001_\000\004\000\000\001\163\000\005\000\000\000\000\000\239\000\006\000\000\001\203\001\204\001\202\000\000\000\000\000\000\000\000\000\000\000\000\000x\000\000\000\000\002\171\000\000\000\230\001\201\001\145\002\227\001\147\000\000\000\007\000\000\001\206\001\207\001\205\000\000\000\000\000\000\000\000\000\000\000\000\000\240\000\243\000\000\000\000\000\000\000\000\000\248\000\250\000\249\000\244\000\246\000\245\000\000\000\000\000\000\000\000\000\000\002\233\002\246\000\000\002\234\000\000\002\235\000\000\000\000\002\228\000\000\000\000\000\000\000\000\002\245\000\000\000\000\002\244\001\211\001\210\000\000\000\000\001\149\000\000\001\200\001\208\000\000\000\000\000\000\000\000\001\247\000\000\000\000\000l\000m\000\000\000\000\000\000\001\246\000\000\000\164\000\000\001i\000\000\000\000\000\163\000\159\000\000\000\000\000\000\000\000\001\014\000\000\000\000\002\249\000\000\002\250\000\000\000\000\001\234\001\232\000\000\001\233\000\008\000\000\000\t\000\000\002!\002\"\002 \000\000\000\000\002\031\000\000\000\n\000\000\002$\002%\002#\000\000\002'\000\000\000\000\000\000\002\025\000\000\000\000\002\027\000\000\002\021\000\000\002\023\000\000\002\028\000\000\002\029\002\022\002\020\002(\001\159\000\000\002\030\000\000\002*\000\000\002)\000\000\002+\000\000\002\147\000\011\000\000\000\000\000\000\000\000\000\000\000\000\002,\000\000\000\000\002/\000\000\002.\000\000\002-\000\204\000\000\000\000\000\000\000\000\000\205\0020\000\000\000\000\002\158\000\000\000\000\000\000\002\159\000\000\000\000\000\238\000\000\000\000\000\000\000\000\000\000\002\163\000k\000\000\000\000\000\213\000\000\000\000\000\233\000\232\000\231\000\000\001L\000\000\002\157\001\143\001\141\000\000\000\000\000\000\002\160\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\156\000\000\000\000\000\000\000\000\000\000\000\000\002\155\000\000\000\013\000\000\000\000\000\000\000\000\000\000\002\161") + (16, "\000\000\000\000\001F\001G\001E\000\000\001I\001H\000\001\000\000\001\130\000\000\000\000\000\136\000\000\000\000\001t\000\161\000\000\000\000\000\148\000\000\000\000\000\153\000\152\000\000\000\149\000\000\000\147\000\000\000\000\000\000\000\151\000\000\000\150\003\005\003\004\000\000\000\000\000\141\000\000\000\000\000\146\000\145\000\000\000\142\000\000\000\140\000\000\000\000\000\000\000\144\000\000\000\143\000\000\000\155\000\000\000\000\000\160\000\159\000\000\000\156\000\000\000\163\000\000\001B\002\148\001A\000\000\000\164\000\000\000\162\000\135\000\000\000\154\000\000\000\169\000\000\000\000\000\000\000\158\000\000\000\000\000\000\002\251\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\166\000\000\003\002\000\000\000\000\000\000\003}\002^\000\000\003{\000\000\002x\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003z\003|\002d\001=\002c\001;\001<\002b\002a\002`\002\\\000\000\000\000\002]\001\n\000\000\002_\000\000\003y\000\000\000c\001:\002?\000\000\000\000\002B\000\000\000\015\000\000\000\000\000\000\000\000\001\011\002[\002g\000[\000\021\000]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\000\000\000\023\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\130\002 \000R\001\020\000^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\\000T\000\000\000S\001\021\000\000\002E\001\022\000\014\000\016\000\000\000\000\000\191\000\000\000\000\000\178\000\000\000\000\000\183\000\182\000\000\000\179\000\000\000\177\000\000\000\000\000\000\000\181\000\000\000\180\000\000\000\000\000\171\000\000\000\000\000\176\000\175\000\000\000\172\000\000\000\170\000\000\000\000\000\000\000\174\000\000\000\173\000\000\000\185\000\000\000\000\000\190\000\189\000\000\000\186\000\000\000\193\000\000\000\000\000\194\000\000\000\192\000\000\000\184\000\000\000\199\000\000\000\000\000\000\000\188\000\000\000\000\000\000\000\000\000\198\000\000\000\000\000\138\000\000\000\000\000\000\000\000\000\000\000\000\002\007\000\207\000\000\000\000\000n\000o\002\006\001\233\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\218\000\213\000\000\001\234\000\000\000\000\000\000\000\000\000\206\000\204\000\219\000\000\001|\000\000\000\000\002\253\000\000\002\252\000\000\000\000\000\000\000\000\000\000\000\196\000\000\000\000\000\000\000\000\000\197\000\195\000\000\000\000\002\255\003\003\000\187\000\000\000\000\001\025\000\000\000\000\002@\002C\000\000\002A\002D\003`\003a\003_\000\000\002e\003^\000\000\002\127\000\000\000\000\002~\002}\002|\002{\002z\002v\000\000\000\000\002w\000\000\002y\000\000\000\000\000g\002M\000\000\000\000\002P\000\000\000\000\002S\000\000\000\000\002N\002Q\000\000\002O\002R\002\129\002u\003n\003o\003m\003l\000h\000\000\000\000\000W\000\000\000V\001\030\000\000\001\243\000\000\000\000\000\000\000\000\000\000\001\015\001\249\000\000\000\000\001\154\000U\0001\001\008\000_\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\000\000\0003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002f\000\000\000\202\000\000\000\000\001\228\000\000\001\144\001\209\000\000\000\000\001\227\000\000\001\142\001\208\000\000\000\000\000d\000\000\002\128\000\000\000\000\003q\003p\000\000\001\244\000\000\000\000\003c\003b\000\000\000Q\000\203\000\000\001v\000\000\002\254\000\000\000\000\000\000\000\000\000\167\000\165\000\000\001\019\000\000\000\000\000\168\000\157\000\000\000\000\001_\000\000\001^\000\000\001l\000\000\001\132\000\000\000\000\000\000\0033\000\000\000\000\003&\000\000\000\000\003+\003*\000\000\003'\000\000\003%\000\000\000\000\000\000\003)\000\000\003(\000\000\000\000\003\031\000\000\000\000\003$\003#\000\000\003 \000\000\003\030\000\000\000\000\000\000\003\"\000\000\003!\000\000\003-\000\000\000\000\0032\0031\000\000\003.\000\000\0035\000\000\000\000\0036\000\000\0034\000\000\003,\000\000\003;\000\000\000\000\000\000\0030\000\000\000\000\003Z\000\000\000\000\000\000\000\000\003:\003/\000\000\003\\\000\000\000\247\003[\000\000\000\000\000\000\000\000\0038\000\000\000\000\000\000\000\000\0039\0037\000\000\000\000\003Q\000\000\000\000\003D\000\000\000\000\003I\003H\000\000\003E\000\000\003C\000\000\000\000\000\000\003G\000\000\003F\000\000\000\000\003=\000\000\000\000\003B\003A\000\000\003>\000\000\003<\000\000\000\000\000\000\003@\000\000\003?\000\000\003K\000\000\000\000\003P\003O\000\000\003L\000\000\003S\000\000\000\000\003T\000\000\003R\000\000\003J\000\000\003Y\000\000\000\000\000\000\003N\000\000\000\000\000\000\000\000\003X\003M\000\000\000\000\000\000\000\000\003V\000\000\000\000\000\000\000\000\003W\003U\002\247\002\249\002\250\002\248\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\133\000\000\000\000\000\000\000\000\002\140\000\000\000\000\002\139\002\138\002\137\002\136\002\135\001[\002\131\000\000\000\000\002\132\000\000\002\134\000\000\000\000\000i\002T\000\000\000\000\002W\000\000\000\000\002Z\000\000\000\000\002U\002X\000\000\002V\002Y\002\142\002\130\003u\003v\003t\003s\000j\000\000\000\000\000Z\000\000\000Y\000\000\002\141\000\000\001\210\000X\000?\001\029\000`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003x\003w\000\000\002\238\000\000\002\237\000\000\000\000\000\000\000\000\003\132\000\000\000\000\000\000\003\133\000\000\000\018\000\000\000\000\000\000\003\128\000\000\001\156\000\000\000\000\000\000\000\220\002\228\001r\000\000\000\209\001q\001K\001J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\012\001\013\000\253\000\000\001\128\000\000\000\000\000\252\000\248\000\000\000\255\000\249\000\254\000\000\002\240\000\000\002\239\002\225\000\000\000\000\000\000\000\000\000\000\002\234\000\000\000\000\000\000\000\000\000\000\002\235\002\227\000\000\002\241\000\000\002\229\000\000\000\224\000\000\002\244\000\208\000\000\001M\000\000\000\000\000w\000\000\000\000\000\000\002k\000\000\000\000\000\000\002s\000\000\000\000\002r\000\000\003j\002q\002p\002o\002n\002m\002i\000\000\000\000\002j\000\000\002l\000\000\000\000\000\000\000\000\000\000\000e\002F\000\000\000\000\002I\000\000\000\000\002L\000\000\000\000\002G\002J\000\000\002H\002K\002t\002h\000f\003g\003h\003f\003e\003i\000\000\000\000\000\000\000\000\001\007\001\006\000\000\000\000\000\000\000\000\001Q\000\000\001\017\001N\000\000\001\005\001T\000\000\000\000\001U\000\000\000\000\001V\000\000\001~\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\000\000\000%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001W\000\000\001S\000\000\000\000\001Y\000\000\000\000\000\000\000\000\000\000\000\000\000t\000q\000r\001Z\001P\000\000\001O\000\000\000\240\000\000\002\204\000\000\000\000\000\236\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\243\000\000\000\000\000\246\000\000\000\000\000\000\000\000\000\000\000\000\001@\000\000\000\000\000\000\000\233\000\000\000\230\000\000\000\000\000\000\000\000\000\000\000\241\000\000\000\237\000\000\000\000\003\t\000\000\003\016\000\226\000\000\000\000\000\000\000\000\000\238\000\000\000\234\000\231\000\000\003\n\000\225\000\000\003\011\000\000\003\018\000\000\000\000\000\000\000\000\000\244\000\000\000\228\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\242\000\000\000\000\000\245\000\000\000\000\000\000\000\000\001?\000\000\000\000\000\000\000\232\000\000\000\229\000\000\000\000\000\000\000\000\000\000\000\239\000\000\000\235\000\222\000\221\000\000\003\019\003\020\000\000\003\021\000\000\003\022\000\000\001L\002\232\000\000\000\000\001\232\000\000\001\152\001\214\000\000\002\226\000\000\000\000\000\000\002\231\000\000\000\000\000\000\0013\000\000\001-\000\000\001.\000\000\0018\001,\0017\000\000\002\243\0019\000\000\000\227\000\000\000\000\000\000\000\000\0015\0010\001\229\000\000\0011\000\000\0012\000\000\001\146\001\211\000\000\000\000\000\000\001\239\000\000\001\237\000\000\000\000\001\241\001\235\000\000\001\242\001\236\000\000\002\245\001\245\000\000\000\223\000\000\000\000\001\230\000\000\001\148\001\212\000\000\003\129\000\000\003~\000\000\003\127\000\019\000\020\000\000\000\000\002\183\000\000\002\182\000\000\000\000\002\185\000\000\002\184\000\000\000\000\000\000\002\016\000\000\000\000\002\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\023\000\000\000\000\002\026\000\000\002\n\000\000\000\000\002\013\000\000\000\000\000\000\002\017\000\000\000\000\002\021\000\000\000\000\001\231\000\000\000\000\002\014\000\000\000\000\002\018\002\180\002\011\000\000\002\181\000\000\000\000\000\000\000\000\002\024\000\000\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\022\000\000\000\000\002\025\000\000\002\t\000\000\000\000\002\012\000\000\000\000\000\000\002\015\000\000\000\000\002\019\000\000\001\150\001\213\000\000\002\186\000\000\000\000\000\000\003\130\000\017\000u\000\000\003\131\000\000\000\000\002\200\000\000\000\000\002\246\000a\000\000\000\000\000\000\000b\000\000\002\236\000\000\001x\002\233\000\000\000\000\001e\000\000\001d\000\000\001m\000\000\001\138\000\000\000\000\000\000\001c\000\000\001b\000\000\001j\000\000\001\136\000\000\000\000\000\000\001g\000\000\001f\000\000\001k\000\000\001\140\000\000\000\000\000\000\001h\000\000\000\000\000\000\000\000\001a\000\000\001`\000\000\001n\000\000\001\134\000\000\000\000\000\000\001i\000\002\000\000\000N\000O\000\000\000\000\002\160\002\164\002\168\002\156\002\153\000\000\000\000\001\177\002\165\002\172\002\157\002\171\002\155\002\170\002\159\002\151\002\158\002\167\002\154\002\161\002\152\002\163\002\169\002\166\002\162\000\128\000\000\000\000\002\222\000\000\000\000\002\194\000\000\000\000\002\196\002\195\002\178\000\000\000\000\002\224\002\149\002\150\000\000\001\189\000M\001o\000\003\000\000\000\000\002\145\000\000\002\030\000\000\000\127\000\000\000\000\002\220\000\000\000\000\000\000\000y\000\000\000\000\002\208\000\000\002\003\002\002\001\172\002\176\000\000\001\205\000\000\002\146\000\000\000\000\000{\000\000\000\000\002\212\000\000\001\186\000\000\000\000\001\182\000\000\000\000\000\000\001\185\000\000\001\184\000\000\000\000\000\000\000\000\000\000\000\000\001\206\000\000\001\180\000\000\001\179\000\000\000v\000\000\000\000\002\202\000\000\000\000\001\176\000\000\000\000\000}\000\000\000\000\002\216\000\000\000\000\000\000\000z\000\000\000\000\002\210\000\000\001\255\001\254\001\168\002\174\000\000\001\192\000\000\000\000\000\000\001\188\000\000\001\194\000\000\000\000\001\183\000\000\000\000\001\190\000\000\000\000\001\191\000\000\000\000\000\000\000\000\000\000\000\000\001\207\000\000\001\181\000\000\001\251\000|\000\000\000\000\002\214\000\000\000\000\000\000\001D\000x\001C\000\000\000\000\002\206\000\000\001\253\001\252\001\166\002\173\000\000\000~\000\000\000\000\002\218\000\000\000\000\000\000\000\000\002\001\002\000\001\170\002\175\000\000\001\199\000\000\001\203\000\000\000\000\001\195\000\000\000\000\000\000\001\187\000\000\001\193\000\000\000\000\000\000\000\000\001\175\000\000\000\000\001\202\000\000\001\201\000\000\000\000\000\000\000\000\001\198\000\000\000\000\001\197\000\000\001\196\000\000\000\000\000\000\000\000\001\200\000\000\001\204\000\000\000\000\001p\000\004\000\000\001\178\000\005\000\000\000\000\001!\000\006\000\000\001\218\001\219\001\217\000\000\001\216\003\006\001\162\000\000\000\007\000\000\001\221\001\222\001\220\000\000\000\000\000\000\000\000\001#\000\000\000\000\000\000\000\000\001(\001*\001)\001$\001&\001%\000\000\000\000\000\000\000\000\000\000\003\012\003\025\000\000\003\013\000\000\003\014\000\000\000\000\003\007\000\000\000\000\000\000\000\000\003\024\000\000\000\000\003\023\001\226\001\225\000\000\000\000\001\164\001\215\001\223\000\000\000\000\000\000\000\000\002\005\000\000\000\000\000l\000m\002\004\000\000\000\000\000\000\000\216\000\000\001z\000\000\000\000\000\215\000\211\000\000\000\000\000\000\000\000\001>\000\000\003\028\000\000\003\029\000\000\000\000\001\248\001\246\000\000\001\247\000\008\000\000\000\t\000\000\002/\0020\002.\000\000\002-\000\000\000\n\000\000\0022\0023\0021\000\000\0025\000\000\000\000\000\000\002'\000\000\000\000\002)\000\000\002#\000\000\002%\000\000\002*\000\000\002+\000\000\002$\002\"\0026\001\174\002,\000\000\0028\000\000\0027\000\000\0029\000\000\002\179\000\011\000\000\000\000\000\000\000\000\000\000\000\000\002:\000\000\000\000\002=\000\000\002<\000\000\002;\001\000\000\000\000\000\000\000\000\000\001\001\002>\000\000\000\000\002\190\000\000\000\000\000\000\002\191\000\000\000\000\001 \000\000\000\000\000\000\000\000\000\000\002\198\000k\000\000\000\000\001\t\000\000\001\027\001\026\000\000\001]\000\000\002\189\001\160\001\158\000\000\000\000\000\000\002\192\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\188\000\000\000\000\000\000\000\000\000\000\000\000\002\187\000\000\000\013\000\000\000\000\000\000\000\000\000\000\002\193") let error = - (173, "\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\000\000\000\000 \000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\000\000\000\000\000\000\000\000\245\170\240\000\128\016\000\000\128\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\1280\128\000\016\204\008\192 \008\002\000\004\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\244p\001\000a\000\001!\152\017\128@\016\004 \008\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002u\012\000@\024@\000Hf\004`\016\004\001\008\002\000\000&C\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000_\163\128\008\003\008\000\t\012\192\140\002\000\128!\000@\000\004\200b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\019\168`\002\000\194\000\002C0#\000\128 \008@\016\000\0012\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000N\161\128\008\003\008\000\t\012\192\140\002\000\128!\000@\000\004\200b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\000\016\002\000\000\016\000@\000\000\000\000\000\000\000\000\000\000\000\002U\012\000@\024@\000Lf\004`\016\004\001\008\002\000\000&C\023\173W\128\004\000\128\000\004\016\016\000\000\000\000\008\000\001\000\000\000\000\000\000\000\000\000\000\000\000\016\008\000\000\000\000\000\000\000\000\000\000\000\000\004\138\024\000\000\000\128\000\128H\008\192 \000\002\016\004\000\000L\006 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\000\144\002\000\000\016@@\000\000\000\000 \000\000\000\000\008\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\007\173W\128\004\000\128\000\004\016\016\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\016\000\000\000@\000\000\000\000\000\001\235U\224\001\000 \000\001\004\004\000\000\000\000\002\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\000\016\002\000\000\016@@\000\000\000\000 \000\004\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\016\000\002\000\000\000\000\000\000\000\000 \000\008\128\000\000\000\000\000R\000\002A\160P\025\218\000\002\018\001\000@\004!\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\004\131@\1603\180\000\004$\002\000\128\008@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128\000\002\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000H4\n\003;@\000B@ \000\000\132\002\008\000\000\000\000R\000\002A\160P\025\218\000\002\018\001\000@\004 \016@\000\000\000\002\144\000\018\013\002\128\206\208\000\016\144\008\002\000!\000\130z\213x\000T\136\000\144h\021\006v\128\000\132\128@\016\001\008\004\019\214\171\192\002\164@\004\131@\1683\180\000\004$\002\000\128\008@ \128\000\000\000\005 \000$\026\005\001\157\160\000! \016\000\000B\001\004\245\170\240\000\169\016\001 \208*\012\237\000\001\t\000\128 \002\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000\018\013\002\128\206\208\000\016\144\008\002\000!\000\130\000\000\000\000\020\128\000\144h\020\006v\128\000\132\128@\016\001\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128 \002\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000H4\n\003;@\000B@ \008\000\132\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000\018\013\002\128\206\208\000\016\144\008\002\000!\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002@\000\136\1936Y,\000\000P\004\008\000\003\186\002'\135p\000\000\000\000\000\000\000\000\000\000\002\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235U\224\001R \002A\160T\025\250\000\002\018\001\000@\004$\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000@ \131\000\150\000\000(\000\000\000\001\217\000\019C\184\000\000\000\000\164\000\004\131@\1603\180\000\004$\002\000\128\008@ \128\000\000H\000\017\008&\194%\128\000\n\000\128\000\000v@\004\240\238\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128 \002\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\000\017\008&\194%\128\000\n\000\128\000\000f@\004\240n\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128 \002\016\008 \000\000\018\000\004B\t\176\137`\000\002\128 \000\000\025\144\001<\027\128\000\000\000\n@\000H4\n\003;@\000B@ \008\000\132\002\008\000\000\004\128\001\016\130l\"X\000\000\160\008\000\000\006d\000O\006\224\000\000\000\002\144\000\018\013\002\128\206\208\000\016\144\008\002\000!\000\130\000\000\001 \000D \155\008\150\000\000(\002\000\000\001\153\000\019\193\184\000\000\000\000\164\000\004\131@\1603\180\000\004$\002\000\128\008@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128 \002\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000H4\n\003;@\000B@ \008\000\132\002\008\000\000\004\128\001\016\130l\"X\000\000\160\008\000\000\006d\000O\006\224\000\000\000\002\144\000\018\013\002\128\206\208\000\016\144\008\002\000!\000\130\000\000\001 \000D \155\008\150\000\000(\002\000\000\001\153\000\019\193\184\000\000\000\000\164\000\004\131@\1603\180\000\004$\002\000\128\008@ \128\000\000H\000\017\008&\194%\128\000\n\000\128\000\000f@\004\240n\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128 \002\016\008 \000\000\018\000\004B\t\176\137`\000\002\128 \000\000\025\144\001<\027\128\000\000\000\n@\000H4\n\003;@\000B@ \008\000\132\002\008\000\000\004\128\001\016\130l\"X\000\000\160\008\000\000\006d\000O\006\224\000\000\000\002\144\000\018\013\002\128\206\208\000\016\144\008\003\000!\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\164\000\004\131@\1603\180\000\004$\002\000\128\008@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000\018\013\002\128\206\208\000\016\144\008\002\000!\000\130\000\000\001 \000D \155\008\150\000\000(\002\000\000\001\153\000\019\193\184\000\000\000\000\164\000\004\131@\1603\180\000\004$\002\000\128\008@ \128\000\000H\000\017\008&\194%\128\000\n\000\128\000\000f@\004\240n\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128 \002\016\008 \000\000\018\000\004B\t\176\137`\000\002\128 \000\000\025\144\001<\027\128\000\000\000\n@\000H4\n\003;@\000B@ \008\000\132\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128\000\144h\020\006v\128\000\132\128@\016\001\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000@\024\000\000\008d\000\000\000\004\001\000\002\000\000&@\016\018\168`\002\000\194\000\002C0#\000\128 \008@\016\000\0012\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\173V\128\004\000\128\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\004\001\132\000\000\134@F\001\000@\016\000 \000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\136\000\030\181^\000\021\"\000$\026\005A\159\160\000! \016\004\000B\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\t\006\129@gh\000\008H\004\001\000\016\128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\001H\000\t\006\129@gh\000\008H\004\000\000\016\128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128\000\002\016\008 \000\000\000\001H\000\t\006\129@gh\000\008H\004\001\000\016\128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\002A\160P\025\218\000\002\018\001\000\000\004 \016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128\000\144h\020\006v\128\000\132\128@\000\001\008\004\016\000\000\000\000\164\000\004\131@\1603\180\000\004$\002\000\000\008@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\000\004D\008\178I@\000\002\000 @\000\013P\017\012#\128\000\000\000\000\000\000\000\000\000\000\016\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015Z\175\000\n\145\000\018\013\002\160\207\208\000\016\144\008\002\000! \130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000$\026\005\001\157\160\000! \016\004\000B\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000D\000\139\000\148\000\000 \002\000\000\000\209\000\016\1948\000\000\000\000\164\000\004\131@\1603\180\000\004$\002\000\128\008@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128 \002\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\016\000\000\128\000\000\000\000\016\164\000\004\131@\1603\180\000\004$\002\000\000\008@ \128\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128 \002\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000\018\013\002\128\206\208\000\016\144\008\000\000!\000\130\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\016\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128\001\016\002,\002P\000\000\128\008\000\000\002D\000C\000\224\000\000\000\002\144\000\018\013\002\128\206\208\000\016\144\008\000\000!\000\130\000\000\001 \000D\000\139\000\148\000\000 \002\000\000\000\145\000\016\1928\000\000\000\000\164\000\004\131@\1603\180\000\004$\002\000\000\008@ \128\000\000H\000\017\000\"\192%\000\000\008\000\128\000\000$@\0040\014\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128\000\002\016\008 \000\000\018\000\004@\008\176\t@\000\002\000 \000\000\t\016\001\012\003\128\000\000\000\n@\000H4\n\003;@\000B@ \000\000\132\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000\018\013\002\128\206\208\000\016\144\008\000\000!\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\004\131@\1603\180\000\004$\002\000\000\008@ \128\000\000H\000\017\000\"\192%\000\000\008\000\128\000\000$@\0040\014\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128\000\002\016\008 \000\000\018\000\004@\008\176\t@\000\002\000 \000\000\t\016\001\012\003\128\000\000\000\n@\000H4\n\003;@\000B@ \000\000\132\002\008\000\000\004\128\001\016\002,\002P\000\000\128\008\000\000\002D\000C\000\224\000\000\000\002\144\000\018\013\002\128\206\208\000\016\144\008\000\000!\000\130\000\000\001 \000D\000\139\000\148\000\000 \002\000\000\000\145\000\016\1928\000\000\000\000\164\000\004\131@\1603\180\000\004$\002\000\000\008@ \128\000\000H\000\017\000\"\192%\000\000\008\000\128\000\000$@\0040\014\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\1280\002\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\n@\000H4\n\003;@\000B@ \000\000\132\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000\018\013\002\128\206\208\000\016\144\008\000\000!\000\130\000\000\001 \000D\000\139\000\148\000\000 \002\000\000\000\145\000\016\1928\000\000\000\000\164\000\004\131@\1603\180\000\004$\002\000\000\008@ \128\000\000H\000\017\000\"\192%\000\000\008\000\128\000\000$@\0040\014\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128\000\002\016\008 \000\000\018\000\004@\008\176\t@\000\002\000 \000\000\t\016\001\012\003\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\005 \000$\026\005\001\157\160\000! \016\004\000B\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000@\000z\213x\000@\008\000\000@\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000R\000\002A\160P\025\218\000\002\018\001\000@\004 \016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\000\021\"\000$\026\005A\157\160\000! \016\004\000B\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000T\136\000\144h\021\006v\128\000\132\128@\016\001\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\128\000\000\000\000\000\000\000\008\000\002 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002E\012\000\000\000@\000@$\004`\016\000\001\008\002\000\000&\003\016\018(`\000\000\002\000\002\000 #\000\128\000\008@\016\000\0010\024\128\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\000\016\002\000\000\016\000F\000\000\000\000\000\000\004\000\000@\000\000\000\000\000\000\000\000\000@ \000\000\000\000\000\000\000\000\000\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000D\000\015Z\175\000\008\001\000\000\008\000#\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000@\000\000\000\000\128\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\015Z\175\000\008\001\000\000\008\000#\000\000\000\000\000\000\002\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\000\003\214\171\192\002\000@\000\002\000\008\192\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\008\000\000\000\001\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\245\170\240\000\128\016\000\000\128\0020\000\000\000\000\000\000 \000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\173W\128\004\000\128\000\004\016\016\000\000\000\000\008\000\000\000\000\002\000=j\188\000 \004\000\000 \128\128\000\000\000\000@\000\008\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\181Z\000\016\002\000\000\000\000@\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000%P\192\004\001\132\000\004\198`F\001\000@\016\128 \000\002d1z\213x\000@\008\000\000A\001\000\000\000\000\000\128\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000@\000\000\000\000\000\000\001z\213x\000@\008\000\000@\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\000\016\002\000\000\016\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\016\\\137\000\128c\021\199w\132\001\158\160\192\0025\136\020\016\t\0200\000\000\000\000\001\000\128\017\128\000\000\004 \000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\245\170\240\000\128\016\000\000\128\0020\000\000\000\000\000\000 \000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015Z\175\000\008\001\000\000\008\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\002\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\168\016\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\007\173W\128\004\000\128\000\004\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\235U\160\001\000 \000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\136\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128\000\144h\020\006v\128\000\132\128@\016\001\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\004\007 @ \024\133\017\221\161\000g\1680\000\140b\005\004\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\t\006\129@gh\000\008H\004\001\000\016\128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\003\255\175\224\130\228H\004\131P\174;\188 \012\245\006\000\145\236a\160\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\001\000\192(\012\237\000\003\t\000\128\000\002\016\008 \000\000\000\001H\000\008\006\001@gh\000\024H\004\000\000\016\128A=j\188\000*D\000H4\n\131;@\000B@ \008\000\132\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\164\000\004\003\000\1603\180\000\012$\002\000\000\008@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\004\003\000\1603\180\000\012$\002\000\000\008@ \128\000\000\000\005 \000$\026\005\001\157\160\000! \016\004\000B\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\008\006\001@gh\000\024H\004\000\000\016\128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\002\001\128P\025\218\000\006\018\001\000\000\004 \016@\000\000\000\002\144\000\016\012\002\128\206\208\0000\144\008\000\000!\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\000\017\024&\203%\128\000\n\000\129\000\000u@@\160\238\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000=j\188\000*D\000H4\n\131?@\000B@ \008\000\132\130\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128\000\144h\020\006v\128\000\132\128@\016\001\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128\001\016\130l\"X\000\000\160\008\000\000\007D\000\n\014\224\000\000\000\002\144\000\018\013\002\128\206\208\000\016\144\008\002\000!\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\004\131@\1603\180\000\004$\002\000\128\008@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002@\000\136A6\017,\000\000P\004\000\000\003\"\000\005\003p\000\000\000\001H\000\008\006\001@gh\000\024H\004\000\000\016\128A\000\000\000\144\000\"\016M\132K\000\000\020\001\000\000\000\200\128\001@\220\000\000\000\000R\000\002\001\128P\025\218\000\006\018\001\000\000\004 \016@\000\000$\000\008\132\019a\018\192\000\005\000@\000\0002 \000P7\000\000\000\000\020\128\000\128`\020\006v\128\001\132\128@\000\001\008\004\016\000\000\t\000\002!\004\216D\176\000\001@\016\000\000\012\136\000\020\013\192\000\000\000\005 \000 \024\005\001\157\160\000a \016\000\000B\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\008\006\001@gh\000\024H\004\000\000\016\128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\002\001\128P\025\218\000\006\018\001\000\000\004 \016@\000\000$\000\008\132\019a\018\192\000\005\000@\000\0002 \000P7\000\000\000\000\020\128\000\128`\020\006v\128\001\132\128@\000\001\008\004\016\000\000\t\000\002!\004\216D\176\000\001@\016\000\000\012\136\000\020\013\192\000\000\000\005 \000 \024\005\001\157\160\000a \016\000\000B\001\004\000\000\002@\000\136A6\017,\000\000P\004\000\000\003\"\000\005\003p\000\000\000\001H\000\008\006\001@gh\000\024H\004\000\000\016\128A\000\000\000\144\000\"\016M\132K\000\000\020\001\000\000\000\200\128\001@\220\000\000\000\000R\000\002\001\128P\025\218\000\006\018\001\000\000\004 \016@\000\000$\000\008\132\019a\018\192\000\005\000@\000\0002 \000P7\000\000\000\000\020\128\000\144h\020\006v\128\000\132\128@\024\001\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\005 \000 \024\005\001\157\160\000a \016\000\000B\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\008\006\001@gh\000\024H\004\000\000\016\128A\000\000\000\144\000\"\016M\132K\000\000\020\001\000\000\000\200\128\001@\220\000\000\000\000R\000\002\001\128P\025\218\000\006\018\001\000\000\004 \016@\000\000$\000\008\132\019a\018\192\000\005\000@\000\0002 \000P7\000\000\000\000\020\128\000\128`\020\006v\128\001\132\128@\000\001\008\004\016\000\000\t\000\002!\004\216D\176\000\001@\016\000\000\012\136\000\020\013\222\181^\000\021\"\000$\026\005A\157\160\000! \016\004\000B\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\130A\160P\025\218\000\002\018\001\000@\004 \016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\127\007\151\"@ \024\197q\221\225\000g\1680\000\141b\005\004\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\t\006\129@gh\000\008H\004\001\000\016\128A\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128\000\144h\020\006v\128\000\132\128@\016\001\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\001\000\000\000\000\000\000\002\008\128\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\250\254\008.D\128@1\n\227\187\194\000\207P`\001\026\196\n\t\255\215\240Ar$\002A\168_\029\222\016\006z\131\000H\214(PO\254\191\131\203\145 \016\012b\184\238\240\1283\212\024\000F\177\002\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\255\191\240\242\228H\004\003\024\190;\188`\012\245&\008\017\236q\172\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\235\248 \185\018\001\000\198+\142\239\008\003=A\128\004k\016('\255_\193\005\200\144\t\006\161|wx@\025\234\012\001#X\161A?\250\254\008.D\128H5\n\227\187\194\000\207P`\t\026\196\026\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\002#\004\217d\176\000\001@\016 \000\014\232\008\148\029\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000\018\013\002\128\206\208\000\016\144\008\002\000!\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\128\228\008\004\003\016\162;\180 \012\245\006\000\017\140@\160\128\000\000\004\007 @ \024\133\017\221\161\000g\1680\000\140b\005\004\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\004\018\013\002\128\206\208\000\016\144\008\002\000!\000\130\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\001\004\131@\1603\180\000\004$\002\000\128\008@ \128\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128 \002\018\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\008\014@\128@1\n#\187B\000\207P`\001\024\196\n\008\000\000\000@r\004\002\001\136Q\029\218\016\006z\131\000\008\198 P@\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\002\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\004\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\128\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\002A\160P\025\218\000\002\018\001\000@\004 \016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\000\016\024 \201%\128\000\008\000\001\000\0003@D\128\140\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\007\173W\128\005H\128\t\006\129Pg\232\000\008H\004\001\000\016\144A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000@r\004\002\001\136Q\029\218\016\006z\131\000\008\198 P@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\250\254\008.D\128H5\n\227\187\194\000\207P`\t\026\196\n\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\254\255\195\203\145 \016\012b\248\238\241\1283\212\152 G\177\198\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\173W\128\004\000\128\000\004\000\016\000\000\000\000\008\000\000\000\000\000\000\000\145C\000\000\000\000\000\016\008\001\024\000\000\000B\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\015Z\175\000\008\001\000\000\008\000#\000\000\000\000\000\000\002\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000 \000\008\000\000\000\000\000\000R\000\002A\168P\027\218\000\002\018\001\000@\004 \016@\000\000\000\002\144\000\016\012\194\128\206\208\0000\144\008\n\128!\004\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\004\003\000\1603\180\000\012$\002\000\000\008@ \128\000\000\000\005 \000$\026\005\001\157\160\000! \016\004\000B\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000=j\188\000*D\000H4\n\131;@\000B@ \008\000\132\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128\000\128`\020\006v\128\001\132\128@\000\001\008\004\016\000\000\000\000\164\000\004\131@\1603\180\000\004$\002\000\128\008@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\001\000\192(\012\237\000\003\t\000\128\000\002\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000@0\n\003;@\000\194@ \000\000\132\002\008\000\000\000\000R\000\002\001\128P\025\218\000\006\018\001\000\000\004 \016OZ\175\000\n\145\000\018\013\002\160\206\208\000\016\144\008\002\000!\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\164\000\004\003\000\1603\180\000\012$\002\000\000\008@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\004\004\0082I@\000\002\000\000@\000\008P\017\000\003\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015Z\175\000\n\145\000\018\013\002\160\207\208\000\016\144\008\002\000! \130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000$\026\005\001\157\160\000! \016\004\000B\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\004\131@\1603\180\000\004$\002\000\128\008@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\016\000\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128 \002\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000\016\012\194\128\206\208\0000\144\008\n\128!\004\130\000\000\000\002\020\128\000\128f\020\006v\128\001\132\128@T\001\008$\016\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000$\026\133\001\189\160\000! \016\004\000B\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000)\000\001\000\204(\012\237\000\003\t\000\128\136\002\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000R\000\002\001\152P\025\218\000\006\018\001\001\016\004 \016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000D\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\128\001\006\001(\000\000@\000\000\000\001\002\000 \000`\000\000\000\001H\000\008\006\001@gh\000\024H\004\000\000\016\128A\000\000\000\128\000 \000A\128J\000\000\016\000\000\000\000@\128\008\000\024\000\000\000\000R\000\002\001\128P\025\218\000\006\018\001\000\000\004 \016@\000\000 \000\008\000\016`\018\128\000\004\000\000\000\000\016 \002\000\006\000\000\000\000\020\128\000\128`\020\006v\128\001\132\128@\000\001\008\004\016\000\000\008\000\002\000\004\024\004\160\000\001\000\000\000\000\004\008\000\128\001\128\000\000\000\005 \000 \024\005\001\157\160\000a \016\000\000B\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\008\006\001@gh\000\024H\004\000\000\016\128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\002\001\128P\025\218\000\006\018\001\000\000\004 \016@\000\000 \000\008\000\016`\018\128\000\004\000\000\000\000\016 \002\000\006\000\000\000\000\020\128\000\128`\020\006v\128\001\132\128@\000\001\008\004\016\000\000\008\000\002\000\004\024\004\160\000\001\000\000\000\000\004\008\000\128\001\128\000\000\000\005 \000 \024\005\001\157\160\000a \016\000\000B\001\004\000\000\002\000\000\128\001\006\001(\000\000@\000\000\000\001\002\000 \000`\000\000\000\001H\000\008\006\001@gh\000\024H\004\000\000\016\128A\000\000\000\128\000 \000A\128J\000\000\016\000\000\000\000@\128\008\000\024\000\000\000\000R\000\002\001\128P\025\218\000\006\018\001\000\000\004 \016@\000\000 \000\008\000\016`\018\128\000\004\000\000\000\000\016 \002\000\006\000\000\000\000\020\128\000\128`\020\006v\128\001\132\128@\000\001\008\004\016\000\000\008\000\002\000\004\024\004\160\000\001\000\000\000\000\004\008\000\128\001\128\000\000\000\005 \000 \024\005\001\157\160\000a \016\000\000B\001\004\000\000\002\000\000\128\001\006\001(\000\000@\000\000\000\001\002\000 \000`\000\000\000\001H\000\008\006\001@gh\000\024H\004\000\000\016\128A\000\000\000\128\000 \000A\128J\000\000\016\000\000\000\000@\128\008\000\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\005 \000 \025\133\001\157\160\000a \016\021\000B\t\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\008\006a@gh\000\024H\004\005@\016\130A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000R\000\002\001\152P\025\218\000\006\018\001\001P\004 \144@\000\000\000\002\144\000\016\012\194\128\206\208\0000\144\008\008\128!\004\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\164\000\004\0030\1603\180\000\012$\002\002\160\008A \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000=j\188\000 \004\000\000 \000\140\000\000\000\000\000\000\008\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\004\131P\1607\180\000\004$\002\000\128\008@ \128\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\016\000\018\000\000\000\000\000\000\000\000 \000\008\000\000\000\000\000\000\000\000\128\000\144\000\000\000\000\000\000\000\001\000\000@\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000@\008\000\000@\001\024\000\000\000\000\000\000\016\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\004\000\001\000\000\000\000\000\000\n@\000H5\n\003{@\000B@ \008\000\132\002\008\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\181Z\000\016\002\000\000\000\000@\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\004\000\001\000\000\000\000\000\000\n@\000H5\n\003{@\000B@ \008\000\132\002\008\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\127\004\023\"@ \024\197q\221\227\000g\1680\000\141b\005\004\000\000\000\000\000\000\000 \016\000\000\000\016\000\000\000\002 \000\000\003\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\250\254\008.D\128@1\138\227\187\198\000\207P`\129\026\196\n\204\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000D`\155,\150\000 (\002\004\128\001\221\001\002\131\184\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\002\000\000\128\000\000\000\000\000\005 \000$\026\133\001\189\160\000! \016\004\000B\001\004\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000=j\188\000 \004\000\000 \000\140\000\000\000\000\000\000\008\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\004\131P\1607\180\000\004$\002\000\128\008@ \128\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\001\000\128\000\000\000\128\000\000\000\017\000\000\000\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\254\191\130\011\145 \018\013B\184\238\241\1283\212\024\"F\177\002\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\255\175\224\130\228H\004\003\024\174;\188`\012\245\006\008\017\172@\172\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\007\173W\128\005H\128\t\006\129Pg\232\000\008H\004\001\000\016\144A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\0020\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\245\170\240\000\128\016\000\000\128\0020\000\000\000\000\000\000 \000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\008\000\002\000\000\000\000\000\000\020\128\000\144j\020\006\246\128\000\132\128@\016\001\008\004\016\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\029j\180\000 \004\000\000\000\000\128\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\008\000\002\000\000\000\000\000\000\020\128\000\144j\020\006\246\128\000\132\128@\016\001\008\004\016\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\254\191\130\011\145 \018\013B\184\238\241\1283\212\024\"F\177\002\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\004\002\000\000\000\002\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255_\193\005\200\144\t\006\161\\wx\192\025\234\012\001#X\129A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\008\192 \000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\016\000\000\000\000\004\007 @ \024\133\017\221\161\000g\1680\000\140b\005\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\016\000\000\000\000\000\000\000\000\000\016\000\031\253\255\132\023#@&\026\133\241\221\227\000\231\1690L\143c\173f\000\000\000 9\002\001\000\196(\142\237\008\003=A\128\004c\016( \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\250\254\008.D\128@1\139\227\187\194\000\207P`\001\030\199\026\008\000\000\000\000\000\000\000@ \000\000\000\000\000\000\000\000@\000\000\000\015\254\191\130\011\145 \016\012b\248\238\240\1283\212\024\000G\177\198\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\128@\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\235\248 \185\018\001 \212/\142\239\008\003=A\128${\028h \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\250\254\008.D\128H5\011\227\187\194\000\207P`\t\030\199\026\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\008\000\015\254\191\130\011\145 \016\012b\248\238\240\1283\212\024\000F\177B\130\000\000\000\000\000\000\000\016\008\002\000\000\000\000\000\000\000\016\000\002\000\003\255\175\224\130\228H\004\003\024\190;\188 \012\245\006\000\017\172P\160\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\008\004\001\000\000\000\000\000\000\000\008\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\254\191\130\011\145 \018\013B\248\238\240\1283\212\024\002F\177B\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000 #\000\000\000\008\000\000\000\000 \000\000\000\000\000\000\002\000\012\004\000\000\000\000\001\000\000\000\008\000\000@\005\255\215\240Ar$\002\001\140W\029\222\016\006z\131\000\008\214 P@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004 \024\008\000\000\000\000\002\000\000\000\016\000\000\128\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\127\004\023#@&\026\133q\221\225\000\231\1680\004\141b%\006\255\235\248 \185\018\001\000\198+\142\239\008\003=A\128\004k\016( \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\215\240Ar4\002a\168W\029\222\016\014z\131\000H\214\"P`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\008\000\015\254\191\130\011\145 \018\013B\248\238\240\1283\212\024\002F\177B\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128@ \000\000\000 \000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\016\\\137\000\144j\021\199w\140\001\158\160\192\0185\136\020\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\191_\192\005H\144\008\006\001Pgx\000\024H\004\000\000X\129A\000\000\000\000\n@\016H4\n\003;@\000B@ \008\000\132\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\223\175\224\002\164H\004\003\000\1683\188\000\012$\002\000\000,@\160\128\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235U\224\001\000 \000\001\000\004\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000$\026\133\001\189\160\000! \016\004\000B\001\004\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\000\016\002\000\000\016\000F\000\000\000\000\000\000\004\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\002A\168P\027\218\000\002\018\001\000@\004 \016@\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\128\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\t\006\161@oh\000\008H\004\001\000\016\128A\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007Z\173\000\008\001\000\000\000\000 \000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\001 \212(\013\237\000\001\t\000\128 \002\016\008 \000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\008\000\015~\191\128\n\145 \016\012\002\160\206\240\0000\144\008\000\000\177\002\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\002\003\004\025$\176\001\001\000\000$\000\006(\008\016\017\128\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\t\006\161@oh\000\008H\004\001\000\016\128A\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\001\235U\224\001\000 \000\001\000\004`\000\000\000\000\000\000@\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000$\026\133\001\189\160\000! \016\004\000B\001\004\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000T\136\000\144h\021\006~\128\000\132\128@\016\001\t\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000#\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128\000\144j\020\006\246\128\000\132\128@\016\001\008\004\016\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000u\170\208\000\128\016\000\000\000\002\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000\018\013B\128\222\208\000\016\144\008\002\000!\000\130\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000@\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000 \000\000\002\0020\000\000\000\128\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\002\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\001\004\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\127\004\023\"@ \024\197q\221\225\000g\1680\000\141b\005\004\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\002A\160P\025\218\000\002\018\001\000@\004 \016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\127\245\252\016\\\137\000\144j\021\199w\132\001\158\160\192\018=\1404\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128B\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000@\000\000\000\000\000\000\001\127\245\252\016\\\137\000\128c\021\199w\132\001\158\160\192\0025\136\020\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\127\004\023\"@ \024\197q\221\225\000g\1680\000\141b\005\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128\000\144h\020\006v\128\000\132\128@\000\001\008\004\016\000\000\000\000\000 \000\000\000\000\000\000\000\016\000\000\000\000\000\000\000@\000\000\000\005 \000$\026\005\001\157\160\000! \016\000\000B\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\t\006\129@gh\000\008H\004\000\000\016\128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\007 @ \024\133\017\221\161\000g\1680\000\140b\005\004\000\000\000\000\000\008\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\016\000\000\001\001\200\016\008\006!Dwh@\025\234\012\000#\024\129A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@r\004\002\001\136Q\029\218\016\006z\131\000\008\198 P@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\t\006\129@gh\000\008H\004\000\000\016\128A\000\000\000\000\000\002\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\000@\008\000\000@\001\000\001\000\000\000\128\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\002\255\235\248\000\128\016\000\000\128\002\000\002\000\000\001\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\250\254\000 \004\000\000 \000\128\000\128\000\000@\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\016\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\001 \208(\012\237\000\001\t\000\128\000\002\016\008 \000\000\000\000\000@\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x@\225\008\137 B\001\000\000\018\000!J\t\000\002`\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\128\000\002\000\128\000\000\002\000\000\000\000\000\008\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\008\000\000\000 \000\000\128 \000\000\000\128\000\000\000\000\002\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000@\000\016\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\0008B\"\008\016\128@\000\004\128\008R\002@\000\152\000\000\245\170\240\001\194\016\000@\132\002\000\000$\000B\144\018\000\004\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\016\004\002\000\000\016\000\000\000\000\000@\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\004\001\000\000\000\004\000\000\000\000\000\016\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\128\000\000\002\000\000\008\002\000\000\000\008\000\000\000\000\000 \000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\004\000\000\000\000\000\000\001\000\000\000\000\000\000\000\004\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016 \000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\0008B \008\016\128@\000\004\128\008R\002@\000\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\173W\128\014\016\128\002\004 \016\000\001 \002\020\128\144\000\"\000\000\000\004\000\000\016\004\000\000\000\016\000\000\000\000\000@\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\002\000\000\000\008\000\000 \008\000\000\000 \000\000\000\000\000\128\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\002\000\128\000\000\002\000\000\000\000\000\008\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\004\001\000\000\000\004\000\000\000\000\000\016\000 \000\000\000\000\000\008\000\000 \008\000\000\000 \000\000@\000\000\128\001\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\016\004\000\000\000\016\000\000\000\000\000@\000\128\000\000\000\000\000 \000\000\128 \000\000\016\128\000\001\000\000\002\000\004\000\000@\000\000\001\000\000\004\001\000\000\000\004\000\000\000\000\000\016\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000@\000\001\000@\000\000\001\000\000\000\000\000\004\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000@\008\000\000@\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\008\000\245\170\240\000\128\016\000\000\128\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000 \000\000\128 \000\000\016\192\000\000\000\000\002\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\000\000\000\000\000\000\000@\000\001\000@\000\000\001\000\000\000\000\000\004\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000 \000\000\000\128\000\002\000\128\000\000\002\000\000\000\000\000\008\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\001\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000C\000\000\004\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\002\000\128\000\000\002\000\000\000\000\000\008\000\016\000\000\000\000\000\004\000\000\016\004\000\000\000P\000\000 \000\000@\000\128\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\008\002\000\000\000\008\000\000\000\000\000 \000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\016\004\000\000\000\016\000\000\000\000\000@\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000 \008\000\000\000 \000\000\000\000\000\128\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000@\016\000\000\000`\000\000\000\000\001\000\002\000\000\000\000\000\000\128\000\002\000\128\000\000J\000\000\004\000\000\008\000\016\000\001\000\000\000\004\000\000\016\004\000\000\000\016\000\000\000\000\000@\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\001\000\000\004\001\000\000\000\004\000\000\000\000\000\016\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\008\000\000\000 \000\000\128 \000\000\000\128\000\000\000\000\002\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000@\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\004\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\128 \000\000\000\128\000\000\000\000\002\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\016\000\000\000@\000\001\000@\000\000\001\000\000\000\000\000\004\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\128\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\004\001\000\000\000\004\000\000\000\000\000\016\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\008\002\000\000\000\008\000\000\000\000\000 \000@\000\000\000\000\000\016\000\000@\016\000\000\001@\000\000\128\000\001\000\002\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\221x\000`\008\000\000B!\000\000\000\000\000\128\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\016\000\000@\016\000\000\001`\000\000\128\000\001\000\002\000\000 \000\000\000\128\000\002\000\128\000\000\002\000\000\000\000\000\008\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\245\186\240\000\192\016\000\000\132b\000\000\000\000\001\000\002\000\000\000\000\000\000\128\000\002\000\128\000\000\002\000\000\000\000\000\008\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\004\001\000\000\000\004\000\000\000\000\000\016\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\002\000\128\000\000B\000\000\000\000\000\008\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000 \000\000\128 \000\000\000\128\000\000\000\000\002\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015Z\175\008\028!\017$\008@ \000\002@\004)A \000L\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000$\026\007\001\157\160\000! \016\004\000B\001\004\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000$\026\005\001\157\160\000! \016\004\000B\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\003\016\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000\018\013\002\128\206\208\000\016\144\008\000\000!\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\130\000\000\000\000\000\005 \000$\026\005\001\157\160\000! \016\000\000B\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\255\132\023\"@$\030\135q\221\225\000g\1690D\141b\005f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\247\254\016\\\137\000\144z\021\199w\132\001\158\164\193\0185\136\021\153\223\191p\002\000@\000\000\000\008\000\000\000\000\000 \000\000\000\000\000\000H\161\128\000\000\000\000\000\004\000\000\000\000\000\001\000\000\000\000\000\000w\239\220\000\128\016\000\000\000\002\000\000\000\000\000\008\000\000\000\000\000\003\191~\224\004\000\128\000\000\000\016\000\000\000\000\000@\000\000\000\000\000\000\145C\000\000\000\000\000\000\008\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\t\0200\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000H\161\128\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\002E\012\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\127\007\151\"@ \024\197q\221\225\000g\1680\000\141b\005\004\255\235\248 \185\018\001\000\198+\142\239\008\003=A\128\004k\016( \000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000?\250\254\008.D\128@1\138\227\187\194\000\207P`\129\026\196\n\204\000\000\000\000\000\000\000@ \000\000\000\000\000\000\000\004@\000\000\006 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\128@\000\000\000\000\000\000\000\008\128\000\000\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\235\248 \185\018\001 \212+\142\239\008\003=A\130$k\016+0\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000@3\n\003;@\000\194@ *\000\132\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\245\252\030\\\137\000\128c\021\199w\132\001\158\160\192\0025\136\020\019\255\175\224\130\228H\004\003\024\174;\188 \012\245\006\000\017\172@\160\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\255\235\248 \185\018\001\000\198+\142\239\008\003=A\130\004k\016+0\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\250\254\015.D\128@1\138\227\187\194\000\207P`\001\026\196\n\t\255\215\240Ar$\002\001\140W\029\222\016\006z\131\000\008\214 P@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\253\255\128\016\002\000\000\016\000@\000\000\000\000!\000\000\000\000\000\000\002E\012\000\000\000\000\000@\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\128\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\245\170\240\000\128\016\000\000\128\0020\000\000\000\000\000\000 \000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\128\001\235U\224\001\000 \000\001\000\004`\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\136\000\030\181^\000\016\002\000\000\016\000F\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\015\254\191\130\011\145 \018\013B\184\238\240\1283\212\024\002F\177\006\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\161\128\000\000\000\000\008\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000@ \016\000\000\000\000\000\000\000\002 \000\000\003\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\250\254\008.D\128H5\n\227\187\194\000\207P`\137\026\196\n\204\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000F\000\000\000\016\000 \000\000\0001\000\000\000\000\000 \016\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\002A\160p\025\218\000\002\018\001\000@\004 \016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\t\006\129@gh\000\008H\004\001\000\016\128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\254\255\194\011\145 \018\015C\184\238\240\1283\212\152\"F\177\002\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\251\255\008.D\128H=\n\227\187\194\000\207R`\137\026\196\n\204\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\254\255\194\011\145 \016\012b\184\238\240\1283\212\152 F\177\002\179\000\000\000\000\000\000\000\016\008\000\000\000\000\000\000\000\001\016\000\000\001\139\255\191\240\130\228H\004\003\024\174;\188 \012\245&\008\017\172@\172\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\239\252 \185\018\001 \212+\142\239\008\003=I\130$k\016+7\255\127\225\005\200\144\008\0061\\wx@\025\234L\016#X\129Y\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128@ \000\000\000\000\000\000\000\004@\000\000\006 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\247\254\016\\\137\000\144j\021\199w\132\001\158\164\193\0185\136\021\152\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\255\132\023\"@$\026\133q\221\225\000g\1690D\141b\005f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\127\225\005\200\144\t\006\161\\wx@\025\234L\017#X\129Y\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255\127\225\005\200\144\t\006\161\\wx@\025\234L\017#X\129Y\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128@ \000\000\000\000\000\000\000\004@\000\000\006 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\247\254\016\\\137\000\144j\021\199w\132\001\158\164\193\0185\136\021\152\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\140\000\000\000 \000@\000\000\000b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\t\000\000\000\000\000\000\000\000 H\158\000`\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\128\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\008\016\000\000\000\000\000\000\000\128\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\002\004\000\000\000\000\000\000\000 \000\000\000@\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\016\002\000\000\000\000\000\004\000\000\016 \000\000\000\000\000\000\001\000\000\000\002\000\000\000\000\004\000\008\000\008\000\000\000\000\000\000\000\0040\002\000\004\002\128\000\000\000\000\001\000\000\004\008\000\000\000\000\000\000\000@\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\128\000\128\000\000\000\000\000\000\000C\000 \000\000(\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\016\000\000\000\000\000\000\000\000\000\008\224\006\000\000\004\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000 \000\000\000\000\000\000\000\000\000\016\192\012\000\000\008\000\000\000\000\128\001\000\000\000\000\000\000\000\000\000\000\134\000@\000\000@\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000!\128\016\002\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\002\024\001\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\0040\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\008\000\000\000\000\000\000\000\000\000\004p\003\000\000\002\000\000\000\000 \000@\000\000\000\000\000\000\000\000\000!\128\024\000\000\016\000\000\000\001\000\002\000\000\000\000\000\000\000\000\000\001\012\000\128\000\000\128\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\008`\004\000\000\004\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000C\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\008\000\000\000\000\000\000\000\000\000\0040\003\000\000\002\000\000\000\000 \000@\000\000\000\000\000\000\000\000\000!\128\016\000\000\016\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\001\012\000\128\000\000\128\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\008`\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000") + (173, "\000\000\000\001\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\001\128\000\000\000\000 \000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\240\000\000\000\000\000\000\000\007\173W\128\004\000\128\000\008\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 %P\208\020!\170\008\t\012\192\140\006\128\136w\130@\000\142d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000]\163\128\000\003\016\000\016\001\129\024\004\001\000B\000\000\000\004\200b\002E\012\000\000\008\128\000\128H\008\192 \008\002\016\000\000\000&C\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\153C\000\000\002 \000 \018\0020\008\002\000\132\000\000\000\t\144\196\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\0200\000\000\"\000\002\001 #\000\128 \008@\000\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002E\012\000\000\008\128\000\128H\008\192 \008\002\016\000\000\000&C\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000$P\192\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\0200\000\000\"\000\002\001 #\000\128 \008@\000\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\187G\000\000\006 \000 \003\0020\008\002\000\132\000\000\000\t\144\196\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0012\134\000\000\004@\000@$\004`\016\004\001\008\000\000\000\019!\136\t\0200\000\000\"\000\002\001 #\000\128 \008@\000\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018(`\000\000D\000\004\002@F\001\000@\016\128\000\000\0012\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000H\161\128\000\001\016\000\016\t\001\024\004\001\000B\000\000\000\004\200b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018(`\000\000D\000\004\002@F\001\000@\016\128\000\000\0012\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0012\134\000\000\004@\000@$\004`\016\004\001\008\000\000\000\019!\136\t\0200\000\000\"\000\002\001 #\000\128 \008@\000\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018(`\000\000D\000\004\002@F\001\000@\016\128\000\000\0012\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018(`\000\000D\000\004\002@F\001\000@\016\128\000\000\0012\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\0200\000\000\"\000\002\001 #\000\128 \008@\000\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002E\012\000\000\008\128\000\128H\008\192 \008\002\016\000\000\000&C\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000$P\192\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\214\171\192\002\000@\000\004\000\016\000\000\000\000\000\000\000\000\000\000\000\000H\161\128\000\001\016\000\017\t\001\024\004\001\000B\000\000\000\004\200b\245\170\240\000\128\016\000\001\004\004\000\000\000\000\002\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000=j\188\001 \004\000\000A\001\000\000\000\000\000\128\000\000\000\000\016\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\015Z\175\000\008\001\000\000\016@@\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000@\000\000\001\000\000\000\000\000\000\003\214\171\192\002\000@\000\004\016\016\000\000\000\000\008\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\018(`\000\000D\000\004\002@F\001\000@\016\128\000\000\0012\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235U\224\001\000 \000\002\008\008\000\000\000\000\004\000\000\128\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000@\000\000\000\000\000\000\000\004\000\000\136\000\000\000\000\000\005 \000H4\n\003;@\000B@ \008\000\130\017\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000\144h\020\006v\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\t\006\129@gh\000\008H\004\000\000\016@ \128\000\000\000\005 \000H4\n\003;@\000B@ \008\000\130\001\004\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008'\173W\128\005H\128\018\013\002\160\206\208\000\016\144\008\002\000 \128A=j\188\000*D\000\144h\021\006v\128\000\132\128@\016\001\004\002\008\000\000\000\000R\000\004\131@\1603\180\000\004$\002\000\000\008 \016OZ\175\000\n\145\000$\026\005A\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\000\001H\000\018\013\002\128\206\208\000\016\144\008\002\000 \128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\t\006\129@gh\000\008H\004\001\000\016@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\000\008\152&\203%\128\000\n\000\129\000\0007@Bxw\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\000\021\"\000H4\n\131?@\000B@ \008\000\130A\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\000\004\004\016`\018\192\000\005\000\000\000\000\027 \0014;\128\000\000\000\n@\000\144h\020\006v\128\000\132\128@\016\001\004\002\008\000\000\004\128\001\017\004\216D\176\000\001@\016\000\000\006\200\000O\014\224\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128\001\017\004\216D\176\000\001@\016\000\000\004\200\000O\006\224\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\001 \000DA6\017,\000\000P\004\000\000\0012\000\019\193\184\000\000\000\000\164\000\t\006\129@gh\000\008H\004\001\000\016@ \128\000\000H\000\017\016M\132K\000\000\020\001\000\000\000L\128\004\240n\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\018\000\004D\019a\018\192\000\005\000@\000\000\019 \001<\027\128\000\000\000\n@\000\144h\020\006v\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\t\006\129@gh\000\008H\004\001\000\016@ \128\000\000H\000\017\016M\132K\000\000\020\001\000\000\000L\128\004\240n\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\018\000\004D\019a\018\192\000\005\000@\000\000\019 \001<\027\128\000\000\000\n@\000\144h\020\006v\128\000\132\128@\016\001\004\002\008\000\000\004\128\001\017\004\216D\176\000\001@\016\000\000\004\200\000O\006\224\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\001 \000DA6\017,\000\000P\004\000\000\0012\000\019\193\184\000\000\000\000\164\000\t\006\129@gh\000\008H\004\001\000\016@ \128\000\000H\000\017\016M\132K\000\000\020\001\000\000\000L\128\004\240n\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000`\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\n@\000\144h\020\006v\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\018\000\004D\019a\018\192\000\005\000@\000\000\019 \001<\027\128\000\000\000\n@\000\144h\020\006v\128\000\132\128@\016\001\004\002\008\000\000\004\128\001\017\004\216D\176\000\001@\016\000\000\004\200\000O\006\224\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\001 \000DA6\017,\000\000P\004\000\000\0012\000\019\193\184\000\000\000\000\164\000\t\006\129@gh\000\008H\004\001\000\016@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\018\013\002\128\206\208\000\016\144\008\002\000 \128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\173V\128\004\000\128\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\145C\000\000\002 \000 \018\0020\008\002\000\132\000\000\000\t\144\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\129\000\000\001\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\004@\000@$\004`\016\004\001\008\000\000\000\019!\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000L\161\128\000\001\016\000\016\t\001\024\004\001\000B\000\000\000\004\200b\002E\012\000\000\008\128\000\128H\008\192 \008\002\016\000\000\000&C\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\004@\000@$\004`\016\004\001\008\000\000\000\019!\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\018(`\000\000D\000\004\002@F\001\000@\016\128\000\000\0012\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000T\008\000\000\008\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\t\0200\000\000\"\000\002\001 #\000\128 \008@\000\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002e\012\000\000\008\128\000\128H\008\192 \008\002\016\000\000\000&C\016\018(`\000\000D\000\004\002@F\001\000@\016\128\000\000\0012\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$P\192\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\0200\000\000\"\000\002\001 #\000\128 \008@\000\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\145C\000\000\002 \000 \018\0020\008\002\000\132\000\000\000\t\144\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$P\192\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\0200\000\000\"\000\002\001 #\000\128 \008@\000\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002e\012\000\000\008\128\000\128H\008\192 \008\002\016\000\000\000&C\016\018(`\000\000D\000\004\002@F\001\000@\016\128\000\000\0012\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$P\192\000\000\136\000\008\004\128\140\002\000\128!\000\000\000\002d1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\0200\000\000\"\000\002\001 #\000\128 \008@\000\000\000\153\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\002\000\000\000\000\000\000\000\018(`\000\000D\000\004\002@F\001\000@\016\128\000\000\0012\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\004@\000@$\004`\016\004\001\008\000\000\000\019!\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\161\128\000\001\016\000\016\t\001\024\004\001\000B\000\000\000\004\200b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\004\138\024\000\000\017\000\001\000\144\017\128@\016\004 \000\000\000L\134 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\004@\000D$\004`\016\004\001\008\000\000\000\019!\139\214\171\192\002\000@\000\004\016\016\000\000\000\000\008\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\002E\012\000\000\008\128\000\128H\008\192 \008\002\016\000\000\000&C\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000=j\188\000 \004\000\000A\001\000\000\000\000\000\128\000\000\000\000\016\001\235U\224\001\000 \000\002\008\008\000\000\000\000\004\000\000\128\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000=j\188\000 \004\000\000@\001\024\000\000\000\000\000\000\016\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\000\003\214\171\192\002\000@\000\004\000\017\128\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\001\000\000\000\004\000\000\000\000D\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\001\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\000\016\002\000\000 \000\140\000\000\000\000\000\000\008\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\"\000\007\173W\128\004\000\128\000\008\000#\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\245\170\240\000\128\016\000\001\000\004`\000\000\000\000\000\000@\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007Z\173\000\008\001\000\000\000\000@\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000@\000\000\001\000\000\000\000\000\000\003\214\171\192\002\000@\000\004\016\016\000\000\000\000\008\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\002E\012\000\000\008\128\000\128H\008\192 \008\002\016\000\000\000&C\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\145C\000\000\002 \000\"\018\0020\008\002\000\132\000\000\000\t\144\197\235U\224\001\000 \000\002\008\008\000\000\000\000\004\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\001\"\134\000\000\004@\000@$\004`\016\004\001\008\000\000\000\019!\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\000\003\214\171\192\002\164@\t\006\129Pg\232\000\008H\004\001\000\016@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000\000\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000H4\n\003;@\000B@ \000\000\130\001\004\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000\144h\020\006v\128\000\132\128@\000\001\004\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\000\000\020\128\001 \208(\012\237\000\001\t\000\128\000\002\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002@\000\137\002,\146P\000\000\128\008\016\000\003T\004\001\004p\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235U\224\001R \004\131@\1683\244\000\004$\002\000\128\008$\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\t\006\129@gh\000\008H\004\001\000\016@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\000\008\128\"\192%\000\000\008\000\128\000\0004@\000\016G\000\000\000\000\020\128\001 \208(\012\237\000\001\t\000\128 \002\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000H4\n\003;@\000B@ \008\000\130\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\004\000\000\016\000\000\000\000\002\020\128\001 \208(\012\237\000\001\t\000\128\000\002\008\004\016\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000H4\n\003;@\000B@ \008\000\130\001\004\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\004\131@\1603\180\000\004$\002\000\000\008 \016@\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\004\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\000\"\000\139\000\148\000\000 \002\000\000\000\145\000\000@\028\000\000\000\000R\000\004\131@\1603\180\000\004$\002\000\000\008 \016@\000\000$\000\008\128\"\192%\000\000\008\000\128\000\000$@\000\016\007\000\000\000\000\020\128\001 \208(\012\237\000\001\t\000\128\000\002\008\004\016\000\000\t\000\002 \008\176\t@\000\002\000 \000\000\t\016\000\004\001\192\000\000\000\005 \000H4\n\003;@\000B@ \000\000\130\001\004\000\000\002@\000\136\002,\002P\000\000\128\008\000\000\002D\000\001\000p\000\000\000\001H\000\018\013\002\128\206\208\000\016\144\008\000\000 \128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\004\131@\1603\180\000\004$\002\000\000\008 \016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128\001 \208(\012\237\000\001\t\000\128\000\002\008\004\016\000\000\t\000\002 \008\176\t@\000\002\000 \000\000\t\016\000\004\001\192\000\000\000\005 \000H4\n\003;@\000B@ \000\000\130\001\004\000\000\002@\000\136\002,\002P\000\000\128\008\000\000\002D\000\001\000p\000\000\000\001H\000\018\013\002\128\206\208\000\016\144\008\000\000 \128A\000\000\000\144\000\"\000\139\000\148\000\000 \002\000\000\000\145\000\000@\028\000\000\000\000R\000\004\131@\1603\180\000\004$\002\000\000\008 \016@\000\000$\000\008\128\"\192%\000\000\008\000\128\000\000$@\000\016\007\000\000\000\000\020\128\001 \208(\012\237\000\001\t\000\128\000\002\008\004\016\000\000\t\000\002 \008\176\t@\000\002\000 \000\000\t\016\000\004\001\192\000\000\000\005 \000H4\n\003;@\000B@ \012\000\130\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\001H\000\018\013\002\128\206\208\000\016\144\008\000\000 \128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\004\131@\1603\180\000\004$\002\000\000\008 \016@\000\000$\000\008\128\"\192%\000\000\008\000\128\000\000$@\000\016\007\000\000\000\000\020\128\001 \208(\012\237\000\001\t\000\128\000\002\008\004\016\000\000\t\000\002 \008\176\t@\000\002\000 \000\000\t\016\000\004\001\192\000\000\000\005 \000H4\n\003;@\000B@ \000\000\130\001\004\000\000\002@\000\136\002,\002P\000\000\128\008\000\000\002D\000\001\000p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\164\000\t\006\129@gh\000\008H\004\001\000\016@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\008\000\015Z\175\000\008\001\000\000\016\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\n@\000\144h\020\006v\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\214\171\192\002\164@\t\006\129Pgh\000\008H\004\001\000\016@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015Z\175\000\n\145\000$\026\005A\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000 \000\000\000\000\000\000\000\002\000\000D\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\161\128\000\001\016\000\017\t\001\024\004\001\000B\000\000\000\004\200b\245\170\240\000\128\016\000\001\004\004\000\000\000\000\002\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\145C\000\000\002 \000 \018\0020\008\002\000\132\000\000\000\t\144\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\002E\012\000\000\008\128\000\128H\008\192 \008\002\016\000\000\000&C\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000/Z\175\000\008\001\000\000\016\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\214\171\192\002\000@\000\004\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\254\191\130\011\145@ \024\197q\221\225\000g\1680\000\141Q\002\130z\213x\000@\008\000\000\128\002\000\000\000\000\000\000\000\000\000\000\000\000\000@\004\005\008H\130\000C\016\000\001 \002\029\160\144\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\168\016\000\000\016\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\128\008\n\016\145\004\000\134 \000\002@\004;A \000F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000`\002\002\132$A\000!\136\000\000\144\001\014\208H\000\017\128\000\000\001\000\016\020!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000 (BD\016\002\024\128\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\008\n\016\145\004\000\134 \000\002@\004;A \000F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\008\000\128\161\t\016@\008b\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000 (BD\016\002\024\128\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005@\128\000\000\128\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\004\000@P\132\136 \0041\000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\016\020!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\008\000\128\161\t\016@\008b\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\001B\018 \128\016\196\000\000H\000\135h$\000\008\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000@P\132\136 \0041\000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000@\004\005\008H\130\000C\016\000\001 \002\029\160\144\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\001B\018 \128\016\196\000\000H\000\135h$\000\008\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000@P\132\136 \0041\000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\016\020!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\008\000\128\161\t\016@\008b\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\001B\018 \128\016\196\000\000H\000\135h$\000\008\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000@P\132\136 \0041\000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\008\000\128\161\t\016@\008b\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000 (BD\016\002\024\128\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\008\n\016\145\004\000\134 \000\002@\004;A \000F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \002\002\132$A\000!\136\000\000\144\001\014\208H\000\017\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\002\000 (BD\016\002\024\128\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\173W\128\004\000\128\000\008\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\020!\"\008\001\140@\000\004\128\008v\130@\000\140\000\000z\213x\000@\008\000\000\130\002\000\000\000\000\001\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\002\000 (BD\016\002\024\128\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\016\000\000\000@\000\000\000\000\000\000\245\170\240\000\128\016\000\001\004\004\000\000\000\000\002\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\004\000@P\132\136 \0041\000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\020!\"\008\001\140@\000\004\128\008v\130@\000\140\000\000z\213x\000@\008\000\000\130\002\000\000\000\000\001\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\002\000 (BD\016\002\024\128\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\029j\180\000 \004\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000 \002\002\132$A\000!\136\000\000\144\001\014\208H\000\017\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000T\008\000\000\008\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000@\004\005\008H\130\000C\016\000\001 \002\029\160\144\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\001\001B\018 \128\016\196\000\000H\000\135h$\000\008\192\000\000\000\128\008\n\016\145\004\000\134 \000\002@\004;A \000F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\020!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\004\005\008H\130\000C\016\000\001 \002\029\160\144\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\004\000@P\132\136 \0041\000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\020!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\160@\000\000@\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\002\000 (BD\016\002\024\128\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\008\n\016\145\004\000\134 \000\002@\004;A \000F\000\000\000\004\000@P\132\136 \0041\000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128\161\t\016@\008b\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000 (BD\016\002\024\128\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000 \002\002\132$A\000!\136\000\000\144\001\014\208H\000\017\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128\161\t\016@\008b\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000 (BD\016\002\024\128\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\008\n\016\145\004\000\134 \000\002@\004;A \000F\000\000\000\004\000@P\132\136 \0041\000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128\161\t\016@\008b\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000 (BD\016\002\024\128\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\000\000\000\000\004\000@P\132\136 \0041\000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\020!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\004\005\008H\130\000C\016\000\001 \002\029\160\144\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\001B\018 \128\016\196\000\000H\000\135h$\000\008\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\001\000\016\020!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\004\005\008H\130\000c\016\000\001 \002\029\160\144\000#\000\000\030\181^\000\016\002\000\000 \128\128\000\000\000\000@\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\128\008\n\016\145\004\000\134 \000\002@\004;A \000F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\008\000\000\000 \000\000\000\000\000\000z\213x\000@\008\000\000\130\002\000\000\000\000\001\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\002\000 (BD\016\002\024\128\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\008\n\016\145\004\000\198 \000\002@\004;A \000F\000\000=j\188\000 \004\000\000A\001\000\000\000\000\000\128\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\001\000\016\020!\"\008\001\012@\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\128\228\016\008\006!Dwh@\025\234\012\000#\020@\160\128\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\016\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\127\245\252\016\\\138\001 \212+\142\239\008\003=A\128$z\1404\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000@0\n\003;@\000\194@ \000\000\130\001\004\000\000\000\000)\000\002\001\128P\025\218\000\006\018\001\000\000\004\016\008'\173W\128\005H\128\018\013\002\160\206\208\000\016\144\008\002\000 \128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\020\128\001\000\192(\012\237\000\003\t\000\128\000\002\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128\001\000\192(\012\237\000\003\t\000\128\000\002\008\004\016\000\000\000\000\164\000\t\006\129@gh\000\008H\004\001\000\016@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002\001\128P\025\218\000\006\018\001\000\000\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000\128`\020\006v\128\001\132\128@\000\001\004\002\008\000\000\000\000R\000\004\003\000\1603\180\000\012$\002\000\000\008 \016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\002&\t\178\201`\000\002\128 @\000\013P\016\020\029\192\000\000\000\000\000\000\000\000\000\000\016\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\173W\128\005H\128\018\013\002\160\207\208\000\016\144\008\002\000 \144A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\000\" \155\008\150\000\000(\002\000\000\000\209\000\001A\220\000\000\000\000R\000\004\131@\1603\180\000\004$\002\000\128\008 \016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128\001 \208(\012\237\000\001\t\000\128 \002\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\000\017\016M\132K\000\000\020\001\000\000\000H\128\000\160n\000\000\000\000)\000\002\001\128P\025\218\000\006\018\001\000\000\004\016\008 \000\000\018\000\004D\019a\018\192\000\005\000@\000\000\018 \000(\027\128\000\000\000\n@\000\128`\020\006v\128\001\132\128@\000\001\004\002\008\000\000\004\128\001\017\004\216D\176\000\001@\016\000\000\004\136\000\n\006\224\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001 \000DA6\017,\000\000P\004\000\000\001\"\000\002\129\184\000\000\000\000\164\000\008\006\001@gh\000\024H\004\000\000\016@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002\001\128P\025\218\000\006\018\001\000\000\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000\128`\020\006v\128\001\132\128@\000\001\004\002\008\000\000\004\128\001\017\004\216D\176\000\001@\016\000\000\004\136\000\n\006\224\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001 \000DA6\017,\000\000P\004\000\000\001\"\000\002\129\184\000\000\000\000\164\000\008\006\001@gh\000\024H\004\000\000\016@ \128\000\000H\000\017\016M\132K\000\000\020\001\000\000\000H\128\000\160n\000\000\000\000)\000\002\001\128P\025\218\000\006\018\001\000\000\004\016\008 \000\000\018\000\004D\019a\018\192\000\005\000@\000\000\018 \000(\027\128\000\000\000\n@\000\128`\020\006v\128\001\132\128@\000\001\004\002\008\000\000\004\128\001\017\004\216D\176\000\001@\016\000\000\004\136\000\n\006\224\000\000\000\002\144\000$\026\005\001\157\160\000! \016\006\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\164\000\008\006\001@gh\000\024H\004\000\000\016@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002\001\128P\025\218\000\006\018\001\000\000\004\016\008 \000\000\018\000\004D\019a\018\192\000\005\000@\000\000\018 \000(\027\128\000\000\000\n@\000\128`\020\006v\128\001\132\128@\000\001\004\002\008\000\000\004\128\001\017\004\216D\176\000\001@\016\000\000\004\136\000\n\006\224\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001 \000DA6\017,\000\000P\004\000\000\001\"\000\002\129\187\214\171\192\002\164@\t\006\129Pgh\000\008H\004\001\000\016@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@ \144h\020\006v\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\255\175\224\242\228P\008\0061\\wx@\025\234\012\000#T@\160\128\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000$\026\005\001\157\160\000! \016\004\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000@\000\000\000\000\000\000\130 \000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255_\193\005\200\160\016\012B\184\238\240\1283\212\024\000F\168\129A?\250\254\008.E\000\144j\023\199w\132\001\158\160\192\0185E\n\t\255\215\240yr(\004\003\024\174;\188 \012\245\006\000\017\170 P@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\247\254\030\\\138\001\000\198/\142\239\024\003=I\128\004z\1425\152\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\127\004\023\"\128@1\138\227\187\194\000\207P`\001\026\162\005\004\255\235\248 \185\020\002A\168_\029\222\016\006z\131\000H\213\020('\255_\193\005\200\160\018\013B\184\238\240\1283\212\024\002F\168\131A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000D\1936Y,\000\000P\004\008\000\001\186\002\018\131\184\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\004\131@\1603\180\000\004$\002\000\128\008 \016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\016\028\130\001\000\196(\142\237\008\003=A\128\004b\136\020\016\000\000\000\128\228\016\008\006!Dwh@\025\234\012\000#\020@\160\128\000\000\000\000\000\000\000\000\000\000\016\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\001\004\131@\1603\180\000\004$\002\000\128\008 \016@\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128A \208(\012\237\000\001\t\000\128 \002\008\004\016\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000H4\n\003;@\000B@ \008\000\130A\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\001\001\200 \016\012B\136\238\208\1283\212\024\000F(\129A\000\000\000\008\014A\000\128b\020Gv\132\001\158\160\192\0021D\n\008\000\000\000\000\000\000\000\000\000\000\001\000\000\000\004\000\000\128\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000D\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000\144h\020\006v\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\002\006\0082I`\000\002\000\000@\000\012\208\016\144\017\128\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\245\170\240\000\169\016\002A\160T\025\250\000\002\018\001\000@\004\018\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\008\014A\000\128b\020Gv\132\001\158\160\192\0021D\n\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255_\193\005\200\160\018\013B\184\238\240\1283\212\024\002F\168\129A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\223\248yr(\004\003\024\190;\188`\012\245&\000\017\2348\214`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\245\170\240\000\128\016\000\001\000\004\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\002\000\000@\000\000\000\000\000\002\144\000$\026\133\001\189\160\000! \016\004\000A\000\130\000\000\000\000\020\128\001\000\204(\012\237\000\003\t\000\128\168\002\008$\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000@0\n\003;@\000\194@ \000\000\130\001\004\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\235U\224\001R \004\131@\1683\180\000\004$\002\000\128\008 \016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\008\006\001@gh\000\024H\004\000\000\016@ \128\000\000\000\005 \000H4\n\003;@\000B@ \008\000\130\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\016\012\002\128\206\208\0000\144\008\000\000 \128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\004\003\000\1603\180\000\012$\002\000\000\008 \016@\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130z\213x\000T\136\001 \208*\012\237\000\001\t\000\128 \002\008\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\005 \000@0\n\003;@\000\194@ \000\000\130\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000 @\131$\148\000\000 \000\004\000\000\133\001\008\000\024\000\000\000\000\000\000\000\000\000\000\001\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000T\136\001 \208*\012\253\000\001\t\000\128 \002\t\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000H4\n\003;@\000B@ \008\000\130\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\128\000\000\000\000\001H\000\018\013\002\128\206\208\000\016\144\008\002\000 \128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128\001\000\204(\012\237\000\003\t\000\128\168\002\008$\016\000\000\000\016\164\000\008\006a@gh\000\024H\004\005@\016A \128\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\168P\027\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\001H\000\016\012\194\128\206\208\0000\144\008\008\128 \128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\002\144\000 \025\133\001\157\160\000a \016\017\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\004@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\004\000\016`\018\128\000\004\000\000\000\000\016 \001\000\003\000\000\000\000\n@\000\128`\020\006v\128\001\132\128@\000\001\004\002\008\000\000\004\000\001\000\004\024\004\160\000\001\000\000\000\000\004\008\000@\000\192\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001\000\000@\001\006\001(\000\000@\000\000\000\001\002\000\016\0000\000\000\000\000\164\000\008\006\001@gh\000\024H\004\000\000\016@ \128\000\000@\000\016\000A\128J\000\000\016\000\000\000\000@\128\004\000\012\000\000\000\000)\000\002\001\128P\025\218\000\006\018\001\000\000\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000\128`\020\006v\128\001\132\128@\000\001\004\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001\000\000@\001\006\001(\000\000@\000\000\000\001\002\000\016\0000\000\000\000\000\164\000\008\006\001@gh\000\024H\004\000\000\016@ \128\000\000@\000\016\000A\128J\000\000\016\000\000\000\000@\128\004\000\012\000\000\000\000)\000\002\001\128P\025\218\000\006\018\001\000\000\004\016\008 \000\000\016\000\004\000\016`\018\128\000\004\000\000\000\000\016 \001\000\003\000\000\000\000\n@\000\128`\020\006v\128\001\132\128@\000\001\004\002\008\000\000\004\000\001\000\004\024\004\160\000\001\000\000\000\000\004\008\000@\000\192\000\000\000\002\144\000 \024\005\001\157\160\000a \016\000\000A\000\130\000\000\001\000\000@\001\006\001(\000\000@\000\000\000\001\002\000\016\0000\000\000\000\000\164\000\008\006\001@gh\000\024H\004\000\000\016@ \128\000\000@\000\016\000A\128J\000\000\016\000\000\000\000@\128\004\000\012\000\000\000\000)\000\002\001\128P\025\218\000\006\018\001\000\000\004\016\008 \000\000\016\000\004\000\016`\018\128\000\004\000\000\000\000\016 \001\000\003\000\000\000\000\n@\000\128`\020\006v\128\001\132\128@\000\001\004\002\008\000\000\004\000\001\000\004\024\004\160\000\001\000\000\000\000\004\008\000@\000\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000)\000\002\001\152P\025\218\000\006\018\001\001P\004\016H \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000\128f\020\006v\128\001\132\128@T\001\004\018\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\002\144\000 \025\133\001\157\160\000a \016\021\000A\004\130\000\000\000\000\020\128\001\000\204(\012\237\000\003\t\000\128\136\002\008$\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\005 \000@3\n\003;@\000\194@ *\000\130\t\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000#\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\001\235U\224\001\000 \000\002\000\008\192\000\000\000\000\000\000\128\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000H5\n\003{@\000B@ \008\000\130\001\004\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000$\000\000\000\000\000\000\000\000@\000\008\000\000\000\000\000\000\000\001\000\001 \000\000\000\000\000\000\000\002\000\000@\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000@\008\000\000\128\0020\000\000\000\000\000\000 \000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\008\000\001\000\000\000\000\000\000\n@\000\144j\020\006\246\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\181Z\000\016\002\000\000\000\000\128\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\008\000\001\000\000\000\000\000\000\n@\000\144j\020\006\246\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\127\004\023\"\128@1\138\227\187\198\000\207P`\001\026\162\005\004\000\000\000\000\000\000\000@ \000\000\000 \000\000\000\000@\000\000\003\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\250\254\008.E\000\128c\021\199w\140\001\158\160\192\0025D\n\204\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000D\1936Y,\000@P\004\t\000\001\186\002\002\131\184\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\004\000\000\128\000\000\000\000\000\005 \000H5\n\003{@\000B@ \008\000\130\001\004\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@ \016\000\000\000\016\000\000\000\000 \000\000\001\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\235\248 \185\020\002A\168W\029\2220\006z\131\000H\213\016+0\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\250\254\008.E\000\128c\021\199w\140\001\158\160\192\0025D\n\204\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x\000T\136\001 \208*\012\253\000\001\t\000\128 \002\t\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\004\000\000F\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\000\016\002\000\000 \000\140\000\000\000\000\000\000\008\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\000\004\131P\1607\180\000\004$\002\000\128\008 \016@\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\000\016\002\000\000 \000\140\000\000\000\000\000\000\008\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\002\000\000@\000\000\000\000\000\002\144\000$\026\133\001\189\160\000! \016\004\000A\000\130\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\173V\128\004\000\128\000\000\000 \000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\002\000\000@\000\000\000\000\000\002\144\000$\026\133\001\189\160\000! \016\004\000A\000\130\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\215\240Ar(\004\131P\174;\188`\012\245\006\000\145\170 V`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\001\000\128\000\000\000\128\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\235\248 \185\020\002A\168W\029\2220\006z\131\000H\213\016( \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000 \000\0020\008\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\128\228\016\008\006!Dwh@\025\234\012\000#\020@\160\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\004\000\000\000\000\000\000\000\000\000\002\000\003\255\191\240\130\228p\t\134\161|wx\1929\234L\003#\212u\172\192\000\000\004\007 \128@1\n#\187B\000\207P`\001\024\162\005\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255_\193\005\200\160\016\012b\248\238\240\1283\212\024\000G\168\227A\000\000\000\000\000\000\000\016\008\000\000\000\000\000\000\000\000\016\000\000\000\001\255\215\240Ar(\004\003\024\190;\188 \012\245\006\000\017\2348\208@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@ \016\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\127\004\023\"\128H5\011\227\187\194\000\207P`\t\030\163\141\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255_\193\005\200\160\018\013B\248\238\240\1283\212\024\002G\168\227A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\001\000\001\255\215\240Ar(\004\003\024\190;\188 \012\245\006\000\017\170(P@\000\000\000\000\000\000\004\002\000\128\000\000\000\000\000\000\004\000\000@\000\127\245\252\016\\\138\001\000\198/\142\239\008\003=A\128\004j\138\020\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\002\001\000@\000\000\000\000\000\000\002\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\215\240Ar(\004\131P\190;\188 \012\245\006\000\145\170(P@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\128\008\008\192\000\000\002\000\000\000\000\004\000\000\000\000\000\000\000@\003\001\000\000\000\000\000@\000\000\002\000\000\008\000\191\250\254\008.E\000\128c\021\199w\132\001\158\160\192\0025D\n\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\136\006\002\000\000\000\000\000\128\000\000\004\000\000\016\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\255\175\224\130\228p\t\134\161\\wx@9\234\012\001#TD\160\223\253\127\004\023\"\128@1\138\227\187\194\000\207P`\001\026\162\005\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\250\254\008.G\000\152j\021\199w\132\003\158\160\192\0185DJ\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\001\000\001\255\215\240Ar(\004\131P\190;\188 \012\245\006\000\145\170(P@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \016\008\000\000\000\008\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\254\191\130\011\145@$\026\133q\221\227\000g\1680\004\141Q\002\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\247\235\248\000\169\020\002\001\128T\025\222\000\006\018\001\000\000\021\016( \000\000\000\001H\004\018\013\002\128\206\208\000\016\144\008\002\000 \128A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000{\245\252\000T\138\001\000\192*\012\239\000\003\t\000\128\000\n\136\020\016\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000=j\188\000 \004\000\000@\001\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\t\006\161@oh\000\008H\004\001\000\016@ \128\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000F\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\003\214\171\192\002\000@\000\004\000\017\128\000\000\000\000\000\001\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000\144j\020\006\246\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000H5\n\003{@\000B@ \008\000\130\001\004\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\029j\180\000 \004\000\000\000\001\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\t\006\161@oh\000\008H\004\001\000\016@ \128\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000 \000=\250\254\000*E\000\128`\021\006w\128\001\132\128@\000\005D\n\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\000\008\024 \201%\128\008\008\000\001 \0001@@@F\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005 \000H5\n\003{@\000B@ \008\000\130\001\004\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\030\181^\000\021\"\000H4\n\131?@\000B@ \008\000\130A\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001\000\000\017\128\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\007\173W\128\004\000\128\000\008\000#\000\000\000\000\000\000\002\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128\001 \212(\013\237\000\001\t\000\128 \002\008\004\016\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000\144j\020\006\246\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000:\213h\000@\008\000\000\000\002\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001H\000\018\013B\128\222\208\000\016\144\008\002\000 \128A\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000@\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000 \000 \002\0020\000\000\000\128\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\001\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\001\004\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\254\191\130\011\145@ \024\197q\221\225\000g\1680\000\141Q\002\130\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000?\250\254\008.E\000\144j\021\199w\132\001\158\160\192\018=F\026\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\191\250\254\008.E\000\128c\021\199w\132\001\158\160\192\0025D\n\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\254\191\130\011\145@ \024\197q\221\225\000g\1680\000\141Q\002\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000\144h\020\006v\128\000\132\128@\000\001\004\002\008\000\000\000\000\000\016\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\002\144\000$\026\005\001\157\160\000! \016\000\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\t\006\129@gh\000\008H\004\000\000\016@ \128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\003\144@ \024\133\017\221\161\000g\1680\000\140Q\002\130\000\000\000\000\000\004\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\008\000\000\000\128\228\016\008\006!Dwh@\025\234\012\000#\020@\160\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 9\004\002\001\136Q\029\218\016\006z\131\000\008\197\016( \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\128\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\000\t\006\129@gh\000\008H\004\000\000\016@ \128\000\000\000\000\001\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\250\254\000 \004\000\000@\001\000\001\000\000\000\128\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\128\000\000\000\000\000\000\001\127\245\252\000@\008\000\000\128\002\000\002\000\000\001\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\127\000\016\002\000\000 \000\128\000\128\000\000@\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\128\001 \208(\012\237\000\001\t\000\128\000\002\008\004\016\000\000\000\000\000 \000\000\000\000\000\000\000 \000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000=j\188 p\132\137 B\001\000\000\018\000!J\t\000\0020\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000@\004\005\008H\130\000\002\000\000\001 \002\029\160\144\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\001\000\000\000\004\000@P\132\136 \000 \000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\016\000\002\000\000\000\000\000\000\004\008\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\"\000\000\000\000\000\000\004\008\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\214\171\192\007\008H\130\004 \016\000\001 \002\020\128\144\000#\000\000\030\181^\0008B\000\016!\000\128\000\t\000\016\164\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\008\n\016\145\132\000\004\000\000\002@\004;A \000F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \002\002\132$A\000\001\000\000\000\144\001\014\208H\000\017\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\016\000\000\000@\004\005\008H\130\000\002\000\000\001 \002\029\160\144\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\001\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\128\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\004\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\214\171\192\007\008H\002\004 \016\000\001 \002\020\128\144\000!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\245\170\240\001\194\016\000\129\008\004\000\000H\000\133 $\000\008@\000\000\000\128\008\n\016\145\004\000\004\000\000\002@\004;A \000F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000@\000\000\001\000\016\020!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\001B\018 \128\000\128\000\000H\000\135h$\000\008\192\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \002\002\132$A\000\001\000\000\000\144\001\014\208H\000\017\128\000\000\001\000\016\020!\"\008\000\008\000\000\020\128\008v\130@\000\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\008\n\016\145\004\000\004\000\000\002@\004;A \000F\000\000\000\004\000@P\132\136 \004 \000\000R\000!\218\t\000\0028\000\000\000 \002\002\132$A\000\001\000\000\000\144\001\014\208H\000\017\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\008\000\128\161\t\016@\000@\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015Z\175\000\008\001\000\000\016\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\000\030\181^\000\016\002\000\000 \000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\004\000@P\132\136 \0040\000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\000\000\000\000\000\000\000\008\000\128\161\t\016@\000@\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\004\000\000\000\016\001\001B\018 \128\000\128\000\000H\000\135h$\000\008\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000@\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\192\000\000\129\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\001B\018 \128\000\128\000\000H\000\135h$\000\008\192\000\000\000\128\008\n\016\145\004\000\020\000\000\n@\004;A \000G\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\004\005\008H\130\000\002\000\000\001 \002\029\160\144\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\008\n\016\145\004\000\004\000\000\002@\004;A \000F\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\020!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000 (BD\016\000\024\000\000\t\000\016\237\004\128\001\024\000\000\000\016\001\001B\018 \128\018\128\000\001H\000\135h$\000\008\224\000\000\000\128\008\n\016\145\004\000\004\000\000\002@\004;A \000F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000 \002\002\132$A\000\001\000\000\000\144\001\014\208H\000\017\128\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\001B\018 \128\000\192\000\000H\000\135h$\000\008\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000@\000\000\001\000\016\020!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\004\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\020!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\128\000\000\002\000 (BD\016\000\016\000\000\t\000\016\237\004\128\001\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\008\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128\161\t\016@\000@\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\001B\018 \128\000\128\000\000H\000\135h$\000\008\192\000\000\000\128\008\n\016\145\004\000\020\000\000\n@\004;A \000G\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\214\235\196\007\008H\130\004\"\016\000\001 \002\029\160\144\000#\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\128\008\n\016\145\004\000\022\000\000\n@\004;A \000G\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \002\002\132$A\000\001\000\000\000\144\001\014\208H\000\017\128\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\007\173\215\136\014\016\145\004\008F \000\002@\004;A \000F\000\000\000\004\000@P\132\136 \000 \000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\128\161\t\016@\000@\000\000$\000C\180\018\000\004`\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000@P\132\136 \004 \000\000\018\000!\218\t\000\0020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\001\000\016\020!\"\008\000\008\000\000\004\128\008v\130@\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\213x@\225\t\018@\132\002\000\000$\000B\148\018\000\004`\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\160p\025\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\254\255\194\011\145@$\030\135q\221\225\000g\1690\004\141Q\002\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\251\255\008.E\000\144z\021\199w\132\001\158\164\192\0185D\n\205\239\223\248\001\000 \000\002\000\008\000\000\000\000\000 \000\000\000\000\000\015~\255\192\008\001\000\000\016\000@\000\000\000\000\001\000\000\000\000\000\000{\247\254\000@\008\000\000\128\002\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\161\128\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\002E\012\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\018(`\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\145C\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255_\193\229\200\160\016\012b\184\238\240\1283\212\024\000F\168\129A?\250\254\008.E\000\128c\021\199w\132\001\158\160\192\0025D\n\008\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\015\254\191\130\011\145@ \024\197q\221\225\000g\1680\000\141Q\002\179\000\000\000\000\000\000\000 \016\000\000\000\000\000\000\000\000 \000\000\001\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128@ \000\000\000\000\000\000\000\000@\000\000\003\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\250\254\008.E\000\144j\021\199w\132\001\158\160\192\0185D\n\204\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\000 \025\133\001\157\160\000a \016\021\000A\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\127\007\151\"\128@1\138\227\187\194\000\207P`\001\026\162\005\004\255\235\248 \185\020\002\001\140W\029\222\016\006z\131\000\008\213\016( \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000?\250\254\008.E\000\128c\021\199w\132\001\158\160\192\0025D\n\204\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\254\191\131\203\145@ \024\197q\221\225\000g\1680\000\141Q\002\130\127\245\252\016\\\138\001\000\198+\142\239\008\003=A\128\004j\136\020\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\191\127\224\004\000\128\000\008\000 \000\000\000\000\016\128\000\000\000\000\000\000\145C\000\000\000\000\000 \000\0020\000\000\000\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\024\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\007\173W\128\004\000\128\000\008\000#\000\000\000\000\000\000\002\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000D\000\015Z\175\000\008\001\000\000\016\000F\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\128\000\000\002\000\000\000\000\"\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\136\000\030\181^\000\016\002\000\000 \000\140\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\015\254\191\130\011\145@$\026\133q\221\225\000g\1680\004\141Q\006\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\008\004\000\000\000\000\000\000\000\000\008\000\000\000b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\255_\193\005\200\160\018\013B\184\238\240\1283\212\024\002F\168\129Y\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\138\024\000\000\001\000\001\000\000\017\128\000\000\004 \000\000\000\000\006 \000\000\000\000\004\004\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n@\000\144h\028\006v\128\000\132\128@\016\001\004\002\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000)\000\002A\160P\025\218\000\002\018\001\000@\004\016\008 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\251\255\008.E\000\144z\029\199w\132\001\158\164\192\0185D\n\204\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\239\252 \185\020\002A\232W\029\222\016\006z\147\000H\213\016+0\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\251\255\008.E\000\128c\021\199w\132\001\158\164\192\0025D\n\204\000\000\000\000\000\000\000\128@\000\000\000\000\000\000\000\000\128\000\000\006/\254\255\194\011\145@ \024\197q\221\225\000g\1690\000\141Q\002\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\255\191\240\130\228P\t\006\161\\wx@\025\234L\001#T@\172\223\253\255\132\023\"\128@1\138\227\187\194\000\207R`\001\026\162\005f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\002\001\000\000\000\000\000\000\000\000\002\000\000\000\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\223\248Ar(\004\131P\174;\188 \012\245&\000\145\170 V`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\247\254\016\\\138\001 \212+\142\239\008\003=I\128$j\136\021\152\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\255\132\023\"\128H5\n\227\187\194\000\207R`\t\026\162\005f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018(`\000\000\004\000\004\000\000F\000\000\000\016\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\253\255\132\023\"\128H5\n\227\187\194\000\207R`\t\026\162\005f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\002\001\000\000\000\000\000\000\000\000\002\000\000\000\024\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\223\248Ar(\004\131P\174;\188 \012\245&\000\145\170 V`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\134\000\000\000@\000@\000\004`\000\000\001\008\000\000\000\000\001\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000 \000\000\000\000\000\000\000\001\002D\240\003\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\002\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000@\128\000\000\000\000\000\000\004\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\016 \000\000\000\000\000\000\001\000\000\000\001\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000@\008\000\000\000\000\000\016\000\000\129\000\000\000\000\000\000\000\008\000\000\000\008\000\000\000\000\016\000\000\000@\000\000\000\000\000\000\000!\128\016\000\016\n\000\000\000\000\000\004\000\000 @\000\000\000\000\000\000\002\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\004\000\000\000\000\000\000\000\002\024\001\000\000\000\160\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000G\0000\000\000\016\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\134\000`\000\000 \000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\0040\002\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\012\000\128\008\000@\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\192\008\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000!\128\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\142\000`\000\000 \000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\0040\003\000\000\001\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000!\128\016\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\012\000\128\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008`\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\134\000`\000\000 \000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\0040\002\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000!\128\016\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\012\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000") let action = - ((16, "\001\146\000\006\000\000\000\000\000\241\000\000\000\000\000\000\001\146\000\000\002B)\234\000\000\000[B\146\000\000\000\000\025x\000\000\029\170\000\000\000\000\000\000\000\000\000\000\000\000\0266\000\000\030h\000\000\000\000\000\000\000\000\000\000\031&\000\000\000\000\000\000\000\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\025\000L\000\000)\234\031\228\028\224\000\176C\218\000\000\000\000\000\000D\170\001\140\028\224\001J\028\224\000\000\001\030\000\000\028\224\000\000\000\133\001\2348\246\000\000\000\000:\252\000\000=f\000\000=\2388\2468\246\018^\018^=f\018^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000;\1328\246\000\000\000\000;\132\000\000;\132\000\0008\246\000\000\000\000\000\000\020\196\000\133\000\000\018^\000\0000P8\246\02708\246\000\000\000\000\000\000\000\000\000\000\000\000 28\246!*8\246!\1548\246\"\1468\246\000\0008\246\000\0008\246#\0028\246#\2508\246$j8\246%b8\246%\2108\246\001^8\246\000\000\000\000\000\000\000\000\000\0008\246&\2028\246':8\246(28\246\000\000\000\0008\246\000\000\000\000\017\244*f\000\000\000\000\001X\000\000\000\000\000\000\000\000\025F\000[\000\000*\014\000\000\000\179\018^\000\0008\246\001\170\000\000\000\000\000\133\000\000\000\000\000\000\000\000\000\000\001\176\000\000\000\000\002h\000\000\002\252=f\000\000\000\000\000\000\000\000\000\000\000\000>\1508\246\000\000>\150\000\000>\150=f\000\000\000\000/6\000\133\000\000\018^\003\006\000\0008\246\003,\000\000\000\000\000\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000C\0228\246\000\0008\246\000\000\000\000\0034\000\000\000G<,\004\0068\246\004\004\000\000\000\000=f\000G\000\000\000\000\000\000\000\000\000\000D\236=fEB=fE\246=fFL=f\000\000=f\000\000=fG\000=fGV=fH\n=fH`=fI\0208\246\003\210=f\000\000=fIj=fJ\030=fJt\003\194\000\000\003\212\000\000\000\1358\246\000\000\000\135\000\000\000\000\000\210)\234\000\000\000\210\000\000\000\000\003\2308\246\000\000\003\234\000\000\018^\003\254\000\000\000\000\005d\000\000\018^\004\160\000\000\000\000\004\228\000\000\000\000\001\234\000\000\005\204\000\000*fJ\248\005\174\005\160\000\133\005\004\005\214K\218\000\176\000\000\000\000\000tM$\000\000\000\000\000\000\005\224\005\216\0026\005\238K\218\001\030K\218\000\000\000\000\000\031\000\000\000\000\005:\000\000\005@\006\012K\218\005^\000\000\000\000\000t\000\000\005b\006>\000\000MhL\130\000\000\000\133\006F\000\000\025F\000\133\006L\000\000\000\000)\008\028\224\005n\000\000\006\006\000\000\005\160\000\000\000\t)\234\000\000)\234\000\000\005\144\000\000\000\t\000\000\016\030\026X\006fK\218\005\180\006\144\000\000N\182\000[\000\000\003\210\004B)\234\005\186\000\000\000i\000\000\001z\000\000\006\150\000\000\000\000;\192\000[\000\000\000i\000\000\000\000\000\000\000\000\000\000\006\1288\246\005\202\019\012\006\1368\246\005\210\006\134\000\136\005\254\006\182\000\000?\142?\224\018^\005\218\000\000\005\220?\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\1628\246\000\000@\162\000\000@\162?\224\000\000\000\000\024\154\000\133\000\000\018^\005\224\000\0008\246\005\224\000\000\000\000\000\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000,\0068\246\000\0008\246\000\000\005\232\000\000\000\135\000\000\000\000\000\000\000\000\000\0000\174?\2241\166?\2242\022?\2243\014?\224\000\000?\224\000\000?\2243~?\2244v?\2244\230?\2245\222?\2246N8\246\006\024?\224\000\000?\2247F?\2247\182?\2248\174\018^\005\248\000\000\000\0008\246\000\000\006\216\000\000\001V\006\1768\246\006|\000\000\006\1828\246\006\134\000\000\001:\000\000\006\182\006\182\001V\000\000\001V\000\000\016\030\006\182\006\182\000\000\000\000\000\000\023\162\000\000\000\000\000\000\000\000\006\2148\246\006\030\019\012\019\218\000\133\006\250\000\000\006\2269\204\007\n9\204\007\0208\246\006>\019\012\019\012\001J\001L\000\133\000\000\000\000\000\000\001L\000\000\001\236\001\012\000\000\000\000\006D\000\000\000\000\000\000\007 \000\000\007\"\000\000\000\000\007V\007\n8\246\006R\0074\000\000<\182\007\022\018^\006j\019\012\000\000\000\000\006\148\000\000\0012\000\000\005^\000\000\001V\000\000\000\000\006\230\000\000\021\164\026X\007.K\218\006|\007Z\000\000\000\133\000\000\003\0128\246,N\000\000@\2448\246\006\132\000\000\018^\006\136\000\000\006\138\000\000\000\000\000\000\000\000\000\000\000\000\000\000A\1828\246\000\000A\182\000\000A\182B\008\018^\006\140B\008\000\000\000\000M\198\000\133\000\000\018^\006\144\000\0008\246\006\142\000\000\000\000\000\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0008\246\000W8\246\006\146\000\000\000\000-\028+6\007F8\246\000\000\007\016\000\000\000\000\000\133\000\000\000\000\006\208,N\000\000\006\208,N\000\000\000\004\000\000\000\000\030\144B\008:\026B\008<\246B\008A\000B\008\000\000B\008\000\000B\008NrB\008N\164B\008N\252B\008O\000\000\008B\000\000\000\000\000\000\008\014\000\000\000\000\0012\000\000\006\182\000\000\000,\000\000\000\000\000\236\019\218\000\000\000\236\000\000\000\000\007n\000\000\001\182\000\003\019\012\000\000\004\006\000K\004\006\000\000\0012\000\000\006\182\000\000\006\182\000\000\000\000\000\000\007n\000\000\000\000\007x\000\000\002*\005^\0012\004\006\000\000\000\000\000\000\0012\000\000\006\182\000\000\002*\000\000\000\000\000\238\000\015\016\030\000\000\016\218\000\000\tf\016\030\000\000\000\000\tf\000\000\000\000\007~\000\000\000\000\007\148\000\000\002\166\006\182\000\000\002\166\000\000\000\000\008\n\000\000\0012\000\000\006\182\000\000\000\000\000\000\017j:T\000\000\008p\000\000\017j\008v\000\000\008x\000\000\021\164\000\133\002\216\000\0008\246\008z\000\000\008\\\008L\000\133\007\166\008bK\218\007\170\004F\000\0008\246\008\134\000\000\000,\004H\000\0008\246\008\140\000\000\025F\000\133\004\158\000\0008\246\008\142\000\000\003\022\017j\000\000\021\188\004\196\000\0008\246\008\156\000\000\000\000\000\000\008\134\008v\000\133\007\214\008\146K\218\007\218\004\228\000\0008\246\008\182\000\000\003\014\000\000\008\158\018^\007\232\008\196\000\000\003\018\000\000\005.\000\0008\246\008\200\000\000\025F\000\133\005^\000\0008\246\008\202\000\000\003\022\000\000\000\000\007\244\000\000\003\014\007\214\008n\000\000\000\000\000\000\008r\000\000\002\150\001:\000\000\016\030\008\200\000\000\000\0008\246\008*\006\182\000\000\008\000\000\000\000\136\000\000\000\000\001R\016\030\000\000\016\030\000\000\007\240\000\000\001R\000\000=f\003\134=f\000\000=f\000\000\007\242\000\000\003\134\000\000\019\012\0046\019\012\000\000\019\012\000\000\007\244\000\000\0046\000\000=f\003\134\007\248\000\000?\152\000\133\004D?\152\000\000?\152\000\000\007\250\000\000\004D\000\000=f\003\134\007\254\000\000\000\000\022\220\000\000\000\000\008l\n\226\000\000\000\000\008F\000\133\000\000\000\000\000\000\000\000\002\028\n\226\000\000\002~\t\024\000\000\000\000\000\000\008\188\000\000\000\000\000\000\000\000\027\024\028\136\000\000\006\018\000\000\n\226\000\000\004\144\n\226\000\000\000G\000J\000J\000\000\002N\000J\000\000\008>\000\000\000\000\000\000\000\000\008\208\000\000\029\024\000\000)\234\n\226\000\000\004\224\n\226\000\000\008\210\000\000\n\226\008\212\000\000\011B\011\174\008\214\000\000\008\216\000\000\012:\022\022\n\226\008\\\n\226\008\222\000\000\008\224\000\000\008\228\000\000)\234\000\000\004t)\234\000\000\008f\013\178\000\000\000\004\n\226\000\000\005\022\n\226\000\000\0030\004*\000\133\000\000\001(\000\133\000\000\008n\000\000\000\000\000\000\000\000\008\242\000\000\013B\027f\008\246\000\000\008\248\000\000\n\226\t\004\000\000\n\226\t\006\000\000\n\226\t\008\000\000\n\006\018\226\n\226\008\138\n\226\t\012\000\000\t\014\000\000\000\000\005&\n\226\000\000\0050\001z\001z\000\000\000\000\000\000\005\030\001z\000\000\008\142\000\000\000\000\000\000\000\000\n\226\000\000\005@\n\226\000\000\005^\004H\000\133\008\144\000\000\000\000\000\000\000\000\t\022\000\000\t\024\000\000\n\226\t\030\000\000\014\"\027f\t \000\000\t\"\000\000\023l\008\204\008\252\020Z\n\226\t.\000\000\000\000\t2\000\000\t\004\023l\n\226\t6\000\000\n\226\t8\000\000\t<\000\000\012\202\008\192\n\226\tH\000\000\tJ\000\000\000\133\008\190\000\000\000\000\022\220\000\000\000\000\002N\t\170\000\000\000\000\001\023\000\000\000\000\000\0008\246\000\171\t\248\t\024\t\162=f\000\000\002\140=f\000\000\008\236\000\000\000\000\000\000\000\000\000\000\002\174\000\000\001\024\000\000\000\000\000\000\004\006\024\130\005\158\024\130\024\130\005\158\000\000\000\000\000F\000F\000F\000F\000\000\000\000\000\000\000\000\000\000\000\000\001V\016\030\t\186\013n\000K\000\000\000\000\003\246\000\000\008\014\000\000,N\008\240\000\000\001V\016\030\008\246\014\198\000\000\001V\013n\000\000\000\000\000\000\021\164\000F\000\000\000\171\000\000\000\000\t>\0014\t\182L\186\000\000\002DM\252\000\000\000\000\t\184\t\168\000\133\000\000\000\133\000\000\002D\000\000\005TL\186\000\000\000\000\t\002\t\200\006\182\t\020\000\000\001\168\003\246\000\000\008\014\000\000\003\138\004\130\000\000\000\000\t\188\000\000\000\000\002N\000\000\004\182\000\000\000\000\000\0008\246\000\171\000\000\002\174\000\000\004\212\000\000\000\000\000\000\005^\000\000\n\190\004\130\n\190\000\000\006\182\n\190\000\000\006\166\000\000\006\182\000\000\006\182\000\000\006\182\000\000\000\000\000\000\000\000\000\000\000\171\000\000\006\182\000\000\006\166\000\000\006\182\000\000\006:\000\000\000\000\tf\tJ\000\133\004t\t\242\003(\000\000\003(\n\028\000\000\n\030\000\000\n \000\000\000\000\004`\003(\025\162\003(\000\000\000\000\003z\t*\000\000\tf\000\133\t0\000\000\007\254\n,\000\000\007f\006*\nD\002\128\nD\000\000\000\000\0050\000\133\000\000\002L\t\148\000\000\000\000\000\000\002\232\000\000\tH\000\000\000\000\000\000\t\136\000\133\tR\000\000\000\000\007\254\007f\006*\0050\002L\002\232\tT\000\000\007f\006*\0050\002L\002\232\tX\000\000\000\133\000\000\nX\nV\t\152\000\133\t\242\000\000"), (16, "\011\t\011\t\011\t\011\t\011\t\011\t\011\t\011\t\011\t\011\t\011\t\004\138\011\t\011\t\011\t\011\t\011\t\011\t\011\t\011\t\011\t\011\t\008J\002\146\000\158\006\029\011\t\005\133\020\159\020\163\000:\008~\011\t\020\167\011\t\011\t\011\t\017\214\007}\011\t\000\n\006\002\006\142\011\t\011\t\006\146\011\t\000\023\000\027\021&\020\178\006\150\008J\007}\000\162\011\t\006\154\021*\011\t\011\t\000\014\008~\006m\011\173\011\t\011\t\002\202\011\t\005\133\011\t\003\141\n\166\013\006\t\n\011\t\000\158\011\t\011\t\011\t\011\t\011\t\017^\006=\006=\011\t\011\t\011\t\006=\011\t\011\t\011\t\005\245\011\t\011\t\011\t\011\t\n\174\n\157\011\173\011\t\011\t\011\230\t\158\007}\003\198\000\162\006\n\017\218\001^\011\t\011\t\011\t\012\022\001j\011\t\011\t\011\t\011\t\n\186\011\t\006m\011\t\013~\0085\011\t\006\029\018\166\011\t\011\t\000\194\011\173\011\173\t\158\004\197\011\t\011\173\012\002\013\174\011\t\005\173\007i\011\t\000\162\n\222\007i\011\t\011\t\011\t\011\t\004)\011\t\011\t\004\197\007}\005\133\011\t\011\t\011\t\000\198\011\t\003\217\011\t\011\t\000\218\011\t\007}\011\t\011\t\005\197\013\006\011\t\011\t\006%\006%\006%\006%\006%\006%\006%\006%\006%\006%\006%\004\162\006%\006%\006%\006%\006%\006%\006%\006%\006%\006%\n\189\008r\013\138\004\162\006%\008N\008^\008n\011\206\t\146\006%\001^\006%\006%\006%\012\022\001j\006%\008J\005>\016\130\006%\006\194\005\165\006%\006\142\004\197\008~\006\146\012\006\000\158\016Z\021&\006%\006\150\008v\005\149\004\013\000\006\006\154\021*\000\250\006%\006%\004\197\000\162\001^\006%\006%\002e\001f\001j\006%\002e\006%\006%\006%\006%\006%\011\173\000\162\000\158\006%\006%\006%\019j\006%\006%\006%\005\237\006%\006%\006%\006%\006j\t\146\000\242\006%\006%\t\002\000\162\n\189\006\021\005\237\012\166\016\138\n\189\n\189\006%\006%\014\170\000\162\006%\006%\006%\006%\014\174\006%\t\158\006%\014\178\005\141\006%\004\138\005f\006%\006%\019n\002\145\018\206\t\002\001\006\006%\020\247\020\251\000\162\n\189\004\013\020\255\006%\001\026\002F\n\189\006%\006%\006%\006%\t\006\006%\006%\003\021\005\181\016.\006%\006%\006%\006E\002\162\006E\006%\006%\006E\006%\003\217\006%\006%\023\190\005\221\006%\006%\006E\006E\006E\006E\006E\006E\006E\006E\006E\006E\006E\013\254\006E\006E\006E\006E\006E\006E\006E\006E\006E\006E\n\133\n\237\005\189\005\189\006E\020\142\006E\000\158\002\218\002\254\006E\005\245\006E\006E\006E\006E\005\141\006E\006E\006E\006E\006E\006E\006E\006E\006E\000.\006\"\016\162\016\202\016\242\017\002\017.\006E\005\141\t\"\006E\000\162\005\141\003\025\012\194\006E\006E\006E\006E\006E\006E\006E\014\230\006E\nA\014~\006E\020\142\006E\023\198\006E\006E\006E\017z\003\165\023\202\006E\006E\006E\n\141\006E\006E\006E\005\253\006E\006E\006E\006E\n\157\015\186\005Z\015\214\006E\021\218\006E\n\133\023.\005\157\017\230\006E\n\133\n\133\006E\006E\017\134\n\181\006E\006E\006E\006E\003\165\006E\n\133\006E\006E\003\n\006E\004\138\0232\006E\006E\015^\nA\023\162\003=\0236\006E\001^\018\190\020\202\006E\012\022\001j\006E\016B\n\165\n\133\006E\006E\003=\006E\012\198\006E\006E\016\170\006\005\000J\006E\000N\014\234\000V\013\006\023\210\006]\006E\023V\006E\000Z\006E\006E\n\157\000\162\006E\006E\0002\006&\000F\000b\006>\000f\006\142\000j\000\134\006\146\000\138\t\218\000\146\021\006\000\150\006\150\000\154\000\174\000\178\000\182\006\154\021\014\023>\001^\005)\003\018\006\158\012\022\001j\011\206\003f\n\157\000\186\005\245\001\030\006\174\006\202\006\013\000n\006\206\000r\t\146\000z\000\190\004\193\016\178\008:\006]\n\157\000~\008J\003r\000^\023F\003\190\001*\003=\000\162\021J\008~\004%\003=\003=\004\193\008\146\006\214\021v\021\130\016\210\008\150\013\186\003\206\007A\003=\001R\017\014\001V\003\233\000\206\t\154\008\158\015\022\015.\0126\006\234\001^\008\162\018\194\006\238\008\166\001j\011\173\006\242\006\246\008\170\006\250\n\157\003=\003\214\023^\008\174\011\206\019\182\022G\007A\007A\023V\005\213\000\130\007A\006\254\007\002\022K\004V\008\178\008\182\007\006\008\186\012V\000\162\008J\008\206\022N\004z\003\197\015J\011\173\008\218\007\014\008~\t\158\004\193\004\130\016\218\006M\012\138\011\206\000\162\021\150\n\157\017\022\008\250\004\186\004\198\015n\008\254\t:\003\233\t\166\004\193\007\018\t>\000\162\011\206\004\210\007\022\003\233\003\233\011\173\011\173\015\166\003\233\tF\011\173\007\026\n\229\006M\006M\015\026\0152\001\154\006M\0002\006&\000F\000b\006>\000f\006\142\000j\000\134\006\146\000\138\013\"\000\146\021\006\000\150\006\150\000\154\000\174\000\178\000\182\006\154\021\014\0065\005\229\008]\015\222\006\158\023&\t\158\011\206\005\205\023f\000\186\n\197\001\030\006\174\006\202\018\142\005\133\006\206\015N\005\133\023^\000\190\n\149\005\133\008:\005\133\019f\015\250\0039\017\202\005\133\005\133\013B\001*\008]\008]\008J\015r\n\213\008]\004\222\004\234\008\146\006\214\021v\008~\n\205\008\150\014\002\019\178\011\206\006U\001R\015\170\001V\003\249\000\206\t\154\008\158\n\221\022g\022k\006\234\001^\008\162\022o\006\238\008\166\001j\018\"\006\242\006\246\008\170\006\250\006e\022\139\022\143\004\246\008\174\0089\022\147\0065\005\n\005\026\002\146\005\030\0065\0065\006\254\007\002\015\226\005&\008\178\008\182\007\006\008\186\018\178\000\162\023\178\008\206\019~\0089\003\197\005*\019Z\008\218\007\014\n\173\005R\006U\023\154\0089\006u\005V\015\254\005^\t\158\019\166\005\130\008\250\017\186\005\138\0065\008\254\t:\006-\t\166\022\n\007\018\t>\005\142\002\133\006e\007\022\005\133\003\249\005\150\013\006\005\170\005\174\tF\0089\007\026\005\198\006u\006u\005\214\005\234\001\154\006u\0002\006&\000F\000b\006>\000f\006\142\000j\000\134\006\146\000\138\005\242\000\146\021\006\000\150\006\150\000\154\000\174\000\178\000\182\006\154\021\014\005\250\001^\006\023\006.\006\158\012\022\001j\0066\006:\006Z\000\186\006r\001\030\006\174\006\202\0089\006\162\006\206\006\170\t\146\006\178\000\190\006\186\006\190\008:\006\198\006\222\006\230\008J\007>\0089\007J\007\146\001*\006-\000\162\008J\008~\008\n\006-\006-\0082\008z\006\214\008F\008~\008R\008\150\008Z\008b\008\149\006-\001R\008j\001V\004\021\000\206\008\154\008\158\008\190\008\198\008\214\006\234\001^\008\162\008\222\006\238\008\166\001j\008\230\006\242\006\246\008\170\006\250\008\238\006-\008\246\011\181\008\174\t2\tB\tJ\008\149\008\149\tV\tZ\tb\008\149\006\254\007\002\tf\tr\008\178\008\182\007\006\008\186\0039\000\162\tz\008\206\t\138\t\174\003\197\t\190\008]\008\218\007\014\t\198\t\158\t\202\t\242\0039\008e\t\254\n\006\nF\t\158\nf\nr\008\250\n\182\n\202\n\214\008\254\t:\004\021\t\166\n\238\007\018\t>\n\250\011\130\011\138\007\022\004\021\004\021\008]\008]\011\154\004\021\tF\008]\007\026\011\166\008e\008e\011\194\011\202\001\154\008e\0002\006&\000F\000b\006>\000f\006\142\000j\000\134\006\146\000\138\011\222\000\146\011\234\000\150\006\150\000\154\000\174\000\178\000\182\006\154\015\214\003\177\011\242\011\246\011\254\006\158\012\014\012\"\012*\012.\012>\000\186\012F\001\030\006\174\006\202\003\177\012^\006\206\012f\012\146\0039\000\190\012\154\012\170\008:\0039\0039\004\162\012\178\012\182\012\190\012\206\012\242\001*\012\250\001^\008J\0039\023&\012\022\001j\012\254\008z\006\214\013\014\008~\013\022\008\150\013\026\013*\0132\013J\001R\013R\001V\013\162\000\206\008\154\008\158\013\234\013\246\0039\006\234\001^\008\162\014j\006\238\008\166\001j\000\162\006\242\006\246\008\170\006\250\014v\014\150\014\194\011\181\008\174\014\206\014\214\014\242\014\250\014\254\015\006\015\n\015\018\015\"\006\254\007\002\015:\015V\008\178\008\182\007\006\008\186\003\177\000\162\015z\008\206\023\138\003\177\003\177\015\138\015\142\008\218\007\014\005\237\015\150\015\154\015\162\015\178\011\181\003\177\003\177\015\194\t\158\015\202\015\206\008\250\015\234\016\006\016\026\008\254\t:\016*\t\166\016:\007\018\t>\016R\016b\016n\007\022\016\151\016\191\016\231\003\177\016\255\017#\tF\017;\007\026\017R\011\181\011\181\017b\017\138\001\154\011\181\0002\006&\000F\000b\006>\000f\006\142\000j\000\134\006\146\000\138\017\155\000\146\017\242\000\150\006\150\000\154\000\174\000\178\000\182\006\154\018\007\018/\018;\018K\018S\006\158\018f\018o\018w\003\177\018\127\000\186\018\154\001\030\006\174\006\202\018\218\018\239\006\206\018\255\019\007\023\026\000\190\007\133\003\177\008:\019\019\019\031\019+\019>\019G\019O\019\138\019\190\001*\019\211\019\219\008J\007\133\019\231\019\247\019\255\020\n\008z\006\214\020\014\008~\020\027\008\150\020'\020.\020;\020G\001R\020O\001V\020Z\000\206\008\154\008\158\020c\020k\020w\006\234\001^\008\162\020\146\006\238\008\166\001j\0192\006\242\006\246\008\170\006\250\020\182\020\186\020\190\020\214\008\174\021V\021~\021\142\021\198\021\206\021\234\021\238\022\026\007\133\006\254\007\002\023v\017Z\008\178\008\182\007\006\008\186\022\030\000\162\022&\008\206\023\134\017^\022S\023\030\003\177\008\218\007\014\023\230\023\138\003\177\003\177\023*\023:\023B\023J\023s\t\158\023z\023\131\008\250\023\142\003\177\003\177\008\254\t:\023\158\t\166\023\194\007\018\t>\023\219\017j\000:\007\022\023\234\023\243\024\023\007\133\0243\024B\tF\024F\007\026\024J\024S\003\177\000\000\000\000\001\154\007\133\0002\006&\000F\000b\006>\000f\006\142\000j\000\134\006\146\000\138\000\000\000\146\021\006\000\150\006\150\000\154\000\174\000\178\000\182\006\154\021\014\000\000\000\000\000\000\000\000\006\158\000\162\000\000\017V\000\000\000\000\000\186\000\000\001\030\006\174\006\202\000\000\000\000\006\206\000\000\000\000\017n\000\190\000\000\000\000\008:\000\000\000\000\000\000\000\000\017Z\000\000\000\000\000\000\001*\000\000\000\000\000\000\000\000\000\000\017^\000\000\000\000\008\146\006\214\000\000\000\000\000\000\008\150\022\162\000\000\000\000\000\000\001R\000\000\001V\018B\000\206\t\154\008\158\000\000\000\000\000\000\006\234\001^\008\162\000\000\006\238\008\166\001j\017j\006\242\006\246\008\170\006\250\000\000\000\000\000\000\017Z\008\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017^\006\254\007\002\000\000\000\000\008\178\008\182\007\006\008\186\000\000\000\162\000\000\008\206\000\000\000\000\003\197\000\000\000\000\008\218\007\014\000\000\000\000\017V\000\000\000\000\008I\000\000\000\000\000\162\000\000\017j\000\000\008\250\000\000\000\000\000\000\008\254\t:\000\000\t\166\000\000\007\018\t>\017n\017Z\000\000\007\022\000\000\000\000\000\000\000\000\000\000\000\000\tF\017^\007\026\000\000\008I\008I\000\000\000\000\001\154\008I\0002\006&\000F\000b\006>\000f\006\142\000j\000\134\006\146\000\138\000\000\000\146\000\162\000\150\006\150\000\154\000\174\000\178\000\182\006\154\017j\000\000\000\000\000\000\000\000\006\158\000\000\017n\018Z\000\000\000\000\000\186\000\000\001\030\006\174\006\202\000\000\000\000\006\206\000\000\000\000\000\000\000\190\n!\000\000\008:\000\000\000\000\000\000\000\000\017Z\000\000\000\000\000\000\001*\000\000\000\000\000\000\000\000\000\000\017^\000\000\000\000\008\146\006\214\000\000\000\162\000\000\008\150\012n\000\000\000\000\000\000\001R\000\000\001V\000\000\000\206\t\154\008\158\000\000\017n\000\000\006\234\001^\008\162\000\000\006\238\008\166\001j\017j\006\242\006\246\008\170\006\250\000\000\000\000\000\000\011\145\008\174\017V\n!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\007\002\000\000\000\000\008\178\008\182\007\006\008\186\000\000\000\162\000\000\008\206\000\000\017Z\000\000\000\000\000\000\008\218\007\014\000\000\000\000\000\000\000\000\017^\011\145\000\000\000\000\000\162\000\000\000\000\000\000\008\250\000\000\000\000\000\000\008\254\t:\000\000\t\166\000\000\007\018\t>\017n\000\000\000\000\007\022\000\000\000\000\020V\000\000\000\000\017V\tF\017j\007\026\000\000\011\145\011\145\000\000\000\000\001\154\011\145\0002\006&\000F\000b\006>\000f\006\142\000j\000\134\006\146\000\138\017Z\000\146\000\000\000\150\006\150\000\154\000\174\000\178\000\182\006\154\017^\000\000\000\000\000\000\000\000\006\158\000\000\000\000\000\000\000\000\000\000\000\186\000\000\001\030\006\174\006\202\000\162\000\000\006\206\000\000\000\000\000\000\000\190\000\000\005\133\008:\000\000\000\000\000\000\000\000\018\246\017n\000\000\000\000\001*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\146\006\214\000\000\005\133\000\000\008\150\021Z\000\000\000\000\000\000\001R\000\000\001V\005\133\000\206\t\154\008\158\000\000\000\000\000\000\006\234\001^\008\162\000\000\006\238\008\166\001j\000\000\006\242\006\246\008\170\006\250\000\000\000\162\000\000\000\000\008\174\017V\005\133\000\000\000\000\000\000\000\000\005\133\002\146\000\000\006\254\007\002\017n\000\000\008\178\008\182\007\006\008\186\000\000\000\162\000\000\008\206\000\000\017Z\000\000\000\000\000\000\008\218\007\014\000\000\000\000\000\000\000\000\017^\011\221\000\000\000\000\000\000\000\000\000\000\000\000\008\250\000\000\000\000\000\000\008\254\t:\000\000\t\166\000\000\007\018\t>\000\000\005\133\000\000\007\022\000\000\000\000\000\000\000\000\000\000\000\000\tF\019\238\007\026\000\000\011\221\011\221\005\133\000\000\001\154\011\221\0002\006&\000F\000b\006>\000f\006\142\000j\000\134\006\146\000\138\000\000\000\146\000\000\000\150\006\150\000\154\000\174\000\178\000\182\006\154\000\000\000\000\000\000\000\000\000\000\006\158\000\000\000\000\000\000\000\000\000\000\000\186\000\000\001\030\006\174\006\202\000\162\000\000\006\206\000\000\000\000\000\000\000\190\000\000\000\000\008:\000\000\000\000\000\000\000\000\000\000\017n\000\000\000\000\001*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\146\006\214\000\000\000\000\000\000\008\150\021Z\000\000\000\000\000\000\001R\000\000\001V\000\000\000\206\t\154\008\158\000\000\000\000\000\000\006\234\001^\008\162\000\000\006\238\008\166\001j\000\000\006\242\006\246\008\170\006\250\000\000\000\000\000\000\000\000\008\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\007\002\000\000\000\000\008\178\008\182\007\006\008\186\000\000\000\162\000\000\008\206\000\000\000\000\000\000\000\000\000\000\008\218\007\014\000\000\000\000\000\000\000\000\000\000\011\217\000\000\000\000\000\000\000\000\000\000\000\000\008\250\000\000\000\000\000\000\008\254\t:\000\000\t\166\000\000\007\018\t>\000\000\000\000\000\000\007\022\000\000\000\000\000\000\000\000\000\000\000\000\tF\000\000\007\026\000\000\011\217\011\217\000\000\000\000\001\154\011\217\0002\006&\000F\000b\006>\000f\006\142\000j\000\134\006\146\000\138\000\000\000\146\000\000\000\150\006\150\000\154\000\174\000\178\000\182\006\154\000\000\000\000\000\000\000\000\000\000\006\158\000\000\000\000\000\000\000\000\000\000\000\186\000\000\001\030\006\174\006\202\000\000\000\000\006\206\000\000\000\000\000\000\000\190\000\000\000\000\008:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\146\006\214\000\000\000\000\000\000\008\150\0146\000\000\000\000\000\000\001R\000\000\001V\000\000\000\206\t\154\008\158\000\000\000\000\000\000\006\234\001^\008\162\000\000\006\238\008\166\001j\000\000\006\242\006\246\008\170\006\250\000\000\000\000\000\000\000\000\008\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\007\002\000\000\000\000\008\178\008\182\007\006\008\186\000\000\000\162\000\000\008\206\000\000\000\000\000\000\000\000\000\000\008\218\007\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007}\000\000\000\000\008\250\000\000\t\146\000\000\008\254\t:\000\000\t\166\000\000\007\018\t>\008J\007}\000\000\007\022\000\000\000\000\000\000\000\000\000\000\008~\tF\000\000\007\026\000\000\0002\006&\000F\000b\001\154\000f\006\142\000j\000\134\006\146\000\138\000\000\000\146\000\000\000\150\006\150\000\154\000\174\000\178\000\182\006\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\186\000\000\001\030\000\000\006\202\007}\000\000\006\206\000\000\000\000\000\000\000\190\000\000\000\000\014\182\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\198\006\214\t\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001R\000\000\001V\000\000\000\206\000\000\005\133\000\000\000\000\000\000\006\234\001^\000\000\007}\006\238\001f\001j\000\000\006\242\006\246\008\170\006\250\000\000\000\000\000\000\007}\000\000\000\000\005\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\007\002\005\133\005\133\000\000\000\000\007\006\000\000\000\000\000\162\000\000\000\000\0002\0006\000F\000b\000\000\000f\007\014\000j\000\134\000\000\000\138\000\000\000\146\000\000\000\150\005\133\000\154\000\174\000\178\000\182\005\133\002\146\000\000\000\000\005\133\000\000\t\166\000\000\007\018\014\202\000\000\000\000\000\186\007\022\001\030\000\000\001\"\000\000\000\000\001&\014\210\000\000\007\026\000\190\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\000\000\001*\005\133\000\000\001.\000\000\000\000\000\000\000\000\000\000\001F\001B\005\133\001J\000\000\000\000\000\000\000\000\000\000\000\000\001R\000\000\001V\017V\000\206\000\000\000\000\005\133\000\000\000\000\001Z\001^\000\000\000\000\001b\001f\001j\001\190\001n\001r\000\000\001v\000\000\000\000\000\000\017Z\000\000\005\133\000\000\000\000\005\133\005\133\000\000\000\000\005\133\017^\000\000\001z\000\000\006\158\000\000\000\000\001~\000\000\005\133\000\162\000\000\001\030\006\174\006\202\000\000\000\000\006\206\000\000\001\134\000\000\000\000\000\000\000\000\008:\0196\000\000\000\000\n!\001\138\017j\000\000\000\000\001*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\142\008\202\006\214\000\000\000\000\001\146\008\150\000\000\003\137\000\000\000\000\001R\n!\001V\001\150\000\000\000\000\008\158\000\000\000\000\001\154\006\234\001^\008\162\000\000\006\238\008\166\001j\000\000\006\242\006\246\000\000\006\250\000\000\000\000\000\162\000\000\008\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\007\002\000\000\017n\008\178\008\182\007\006\008\186\000\000\000\162\000\000\008\206\000\000\000\000\000\000\000\000\000\000\008\218\007\014\006\158\000\000\000\000\000\000\n!\000\000\000\000\000\000\001\030\006\174\006\202\000\000\008\250\006\206\000\000\000\000\008\254\t:\000\000\000\000\008:\007\018\t>\000\000\000\000\000\000\007\022\000\000\000\000\001*\000\000\000\000\000\000\tF\000\000\007\026\000\000\000\000\006\210\006\214\000\000\001\154\000\000\008\150\000\000\000\000\000\000\000\000\001R\004\173\001V\000\000\000\000\000\000\008\158\000\000\000\000\000\000\006\234\001^\008\162\000\000\006\238\008\166\001j\000\000\006\242\006\246\000\000\006\250\000\000\004\173\000\000\000\000\008\174\000\000\000\000\000\000\000\000\000\000\000\000\004\173\000\000\000\000\006\254\007\002\000\000\000\000\008\178\008\182\007\006\008\186\000\000\000\162\000\000\008\206\000\000\000\000\000\000\000\000\000\000\008\218\007\014\000\000\000\000\000\000\000\000\000\000\000\000\n\021\000\000\004\173\004\173\011\241\000\000\008\250\011\241\000\000\000\000\008\254\t:\000\000\000\000\000\000\007\018\t>\000\000\000\000\000\000\007\022\000\000\011\241\000\000\000\000\n\021\011\241\tF\000\000\007\026\001\178\011\241\000\000\000\000\000\000\001\154\000\000\011\241\000\000\000\000\011\241\011\241\000\000\011\241\011\241\000\000\000\000\001\186\004\173\011\241\002\210\000\000\000\000\011\241\000\000\000\000\011\241\000\000\011\241\011\241\000\000\000\000\000\000\004\173\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\241\000\000\011\241\000\000\n\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\241\000\000\000\000\0002\t\182\000F\000b\002\222\000f\006\142\000j\000\134\006\146\000\138\000\000\000\146\021\006\000\150\006\150\000\154\000\174\000\178\000\182\006\154\021\014\011\241\011\241\011\241\000\000\011\241\011\241\002\226\000\000\011\241\000\000\000\186\000\000\004%\000\000\000\000\004%\002\234\000\000\000\000\000\000\011\241\000\190\000\000\011\241\011\241\011\241\011\241\000\000\000\000\000\000\004%\011\241\011\241\011\241\004%\011\241\011\241\011\241\004%\004%\000\000\000\000\000\202\000\000\000\000\004%\017V\000\000\004%\004%\000\000\004%\004%\000\000\000\000\004%\000\206\004%\004%\000\000\000\000\004%\000\000\000\000\004%\000\000\004%\004%\017Z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017^\000\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004%\000\000\004%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\162\000\000\004%\000\000\000\000\003\197\018^\000\000\000\000\004%\000\000\017j\000\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004%\004%\004%\000\000\004%\004\193\004%\n!\004%\000\000\001=\001=\001=\001=\000\000\001=\004%\001=\001=\000\000\001=\000\000\001=\004%\001=\004%\001=\001=\001=\001=\000\162\004%\004%\004%\017F\004%\004%\004%\000\000\000\000\000\000\001=\001=\001=\000\000\017n\000\000\000\000\001=\000\000\000\000\000\000\000\000\001=\000\000\000\000\000\000\001=\000\000\000\000\000\000\001=\000\000\000\000\017J\n!\000\000\001=\000\000\000\000\000\000\000\000\000\000\000\000\001=\000\000\000\000\000\000\000\000\001=\000\000\000\000\0002\0006\000F\000b\000\000\000f\001=\000j\000\134\000\000\000\138\017V\000\146\000\000\000\150\000\000\000\154\000\174\000\178\000\182\000\000\000\000\000\000\000\000\000\000\000\000\001=\000\000\000\000\001=\000\000\000\000\000\186\017Z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001=\000\000\020\006\000\000\000\000\001=\000\000\001=\004)\000\000\001=\004)\017N\000\000\000\000\000\000\000\000\000\000\001=\000\000\000\000\001=\000\000\000\202\000\000\000\000\004)\000\000\018\130\000\000\004)\000\000\017j\000:\004)\004)\001=\000\206\000\000\001=\001=\004)\000\000\000\000\004)\004)\000\000\004)\004)\000\000\017\158\004)\000\000\004)\004)\000\000\000\000\004)\000\000\000\000\004)\000\000\004)\004)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\162\000\000\000\000\000\000\000\000\004)\000\000\004)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017n\000\000\004)\000\000\000\000\000\000\021\n\000F\000b\004)\000f\006\142\000j\000\134\006\146\000\138\000\000\000\146\021\006\000\150\006\150\000\154\000\174\000\000\000\182\006\154\021\014\004)\004)\004)\000\000\004)\004\197\004)\000\000\004)\000\000\000\186\000\000\012E\000\000\000\000\012E\004)\000\000\000\000\000\000\004)\000\190\000\000\004)\000\000\004)\000\000\000\000\000\000\000\000\012E\004)\004)\004)\012E\004)\004)\004)\007.\012E\000\000\000\000\000\000\000\000\000\000\012E\000\000\000\000\012E\012E\000\000\012E\012E\000\000\000\000\0076\000\206\012E\007B\000\000\000\000\012E\000\000\000\000\012E\000\000\012E\012E\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\182\000F\000b\000\000\000f\000\000\000j\000\134\000\000\000\138\012E\000\146\012E\000\150\000\000\000\154\000\174\000\000\000\182\000\000\000\000\000\000\012E\000\000\000\000\003\197\000\000\000\000\000\000\007N\004I\000\186\000J\004I\000N\004I\000V\004I\000\000\004I\000\000\000\000\000\190\000Z\004I\004I\000\000\012E\012E\012E\000\000\012E\000\000\007R\000\000\012E\000\000\004I\000\000\000\000\000\000\000\000\000\000\007Z\000\000\000\000\000\000\004I\004I\000\000\012E\000\000\012E\004I\000\000\0035\000\000\000\206\012E\012E\012E\000\000\012E\012E\012E\000\000\000\000\000\000\000\000\004I\0035\000\000\004I\000\000\000\000\000\000\000\000\004I\004I\000\000\000\000\004I\000^\000\000\000\000\000\000\0035\000\000\000\000\004I\000\000\000\000\000\000\004I\004I\000\000\000\000\000\000\000\162\000\000\000\000\000\000\000\000\004I\000\000\004M\000\000\000n\004M\000r\004M\000z\004M\004I\004M\000\000\000\000\000\000\000~\004M\004M\000\000\005\133\004I\000\000\005\133\000\000\000\000\004I\005\133\000\000\005\133\004M\000\000\000\000\000\000\005\133\005\133\004I\000\000\000\000\000\000\004M\004M\000\000\000\000\000\000\000\000\004M\000\000\000\000\0035\000\000\000\000\000\000\000\000\0035\0035\004I\000\000\000\000\004I\004I\000\000\004M\004I\000\000\004M\0035\000\000\004I\004I\004M\004M\000\000\004I\004M\000\130\000\000\000\000\000\000\005\133\000\000\0035\004M\000\000\000\000\000\000\004M\004M\000\218\000\000\0035\000\000\023^\000\000\000\000\000\000\004M\000\000\000\000\001^\000\000\000\000\000\000\001f\001j\000\000\004M\000\000\000\000\000\000\n\017\n\017\n\017\n\017\000\000\n\017\004M\n\017\n\017\000\000\n\017\004M\n\017\000\000\n\017\000\000\n\017\n\017\n\017\n\017\000\000\004M\000\000\000\162\000\000\000\000\000\000\000\000\005\133\000\000\000\000\n\017\n\017\n\017\001\137\000\000\000\000\001\137\n\017\000\000\000\000\004M\000\000\n\017\004M\004M\000\000\017\174\004M\000\000\017V\017\182\001\137\004M\004M\000\000\001\137\n\017\004M\000\000\000\000\001\137\000\000\000\000\n\017\000\000\000\000\001\137\000\000\n\017\001\137\001\137\017Z\001\137\001\137\000\000\000\000\000\000\n\017\001\137\000\000\000\000\017^\001\137\000\000\000\000\001\137\000\000\001\137\001\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\017\000\000\000\000\n\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\137\n-\001\137\017j\n\017\000\000\000\000\000\000\000\000\n\017\000\000\n\017\001\137\000\000\n\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\017\000\000\000\000\n\017\n-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\137\001\137\001\206\n\017\001\137\001\137\018\n\n\017\001\137\000\000\000\000\000\000\000\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\137\000\000\000\000\001\137\001\137\001\137\001\137\017n\000\000\000\000\000\000\002v\001\137\001\137\000\000\001\137\001\137\001\137\n\001\n\001\n\001\n\001\000\000\n\001\000\000\n\001\n\001\n-\n\001\000\000\n\001\000\000\n\001\000\000\n\001\n\001\n\001\n\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\001\n\001\n\001\000\000\000\000\000\000\000\000\n\001\000\000\000\000\000\000\000\000\n\001\0002\000\214\000F\000b\000\000\000f\000\000\000j\000\134\000\000\000\138\000\000\000\146\n\001\000\150\000\000\000\154\000\174\000\178\000\182\n\001\000\000\000\000\000\000\000\000\n\001\000\000\000\000\n\005\n\005\n\005\n\005\000\186\n\005\n\001\n\005\n\005\000\000\n\005\000\000\n\005\000\000\n\005\000\190\n\005\n\005\n\005\n\005\000\000\000\000\000\000\000\000\000\000\000\000\n\001\000\000\000\000\n\001\000\000\n\005\n\005\n\005\000\000\000\000\000\202\000\000\n\005\000\000\000\000\n\001\000\230\n\005\000\000\000\000\n\001\018\014\n\001\000\000\000\206\n\001\000\000\000\000\000\000\000\000\000\000\n\005\000\000\n\001\000\000\000\000\n\001\000\000\n\005\000\000\000\000\000\000\000\000\n\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\001\n\005\004\129\017\178\n\001\004\129\000R\004\129\000\000\004\129\000\000\004\129\000\000\000\000\000\162\000\000\004\129\004\129\000\000\000\000\000\000\n\005\000\000\000\000\n\005\000\000\000\000\000\000\000\000\004\129\000\000\000\000\000\000\000\234\000\000\000\000\n\005\000\000\000\000\004\129\004\129\n\005\000\000\n\005\000\000\004\129\n\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\005\000\000\011u\n\005\000\000\000\000\000\000\004\129\000\000\000\000\004\129\000\000\000\000\000\000\000\000\004\129\004\129\000\000\n\005\004\129\004\129\000\000\n\005\000\000\000\000\000\000\000\000\004\129\000\000\000\000\000\000\004\129\004\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\129\000\000\004\133\000\000\000\000\004\133\000v\004\133\000\000\004\133\004\129\004\133\000\000\000\000\000\000\000\000\004\133\004\133\000\000\000\000\004\129\000\000\000\000\000\000\000\000\004\129\000\000\000\000\000\000\004\133\000\000\000\000\000\000\000\000\000\000\004\129\000\000\000\000\011\018\004\133\004\133\000\000\000\000\000\000\000\000\004\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\129\011\026\000\000\004\129\004\129\000\000\004\133\004\129\000\000\004\133\000\000\000\000\004\129\004\129\004\133\004\133\011\"\004\129\004\133\004\133\000\000\000\000\011b\011j\000\000\000\000\004\133\000\000\000\000\000\000\004\133\004\133\011B\000\000\000\000\011*\000\000\011:\000\000\000\000\004\133\000\000\004\137\000\000\000\000\004\137\000\142\004\137\000\000\004\137\004\133\004\137\000\000\000\000\000\000\000\000\004\137\004\137\011J\000\000\004\133\000\000\000\000\000\000\000\000\004\133\000\000\000\000\000\000\004\137\000\000\000\000\000\000\000\000\000\000\004\133\000\000\000\000\000\000\004\137\004\137\000\000\000\000\000\000\000\000\004\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\133\011R\000\000\004\133\004\133\000\000\004\137\004\133\0112\004\137\000\000\000\000\004\133\004\133\004\137\004\137\000\000\004\133\004\137\004\137\005\001\000\000\000\000\000\000\000\000\000\000\004\137\000\000\000\000\000\000\004\137\004\137\000\000\000\000\000\000\011r\011Z\000\000\000\000\000\000\004\137\000\000\004\189\000\000\000\000\004\189\000\000\004\189\000\000\004\189\004\137\004\189\000\000\000\000\000\000\000\000\004\189\004\189\000\000\000\000\004\137\000\000\000\000\000\000\000\000\004\137\000\000\000\000\000\000\004\189\000\000\000\000\000\000\000\000\000\000\004\137\000\000\000\000\000\000\004\189\004\189\000\000\000\000\000\000\000\000\004\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\137\000\000\001\238\004\137\004\137\002>\004\189\004\137\000\000\004\189\000\210\000\000\004\137\004\137\004\189\004\189\000\000\004\137\004\189\004\189\001\246\000\000\000\000\000\000\002\005\000\000\004\189\000\000\000\000\002\005\004\189\004\189\000\000\000\000\000\000\001\254\000\000\000\000\002\005\002\005\004\189\002^\002f\000\000\000\000\000\000\000\000\002\005\000\000\000\000\004\189\002\030\000\000\000\000\002\006\000\000\002\022\002\005\000\000\000\000\004\189\000\000\000\000\000\000\000\000\004\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\189\000\000\002&\000\000\002\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\005\000\000\000\000\000\000\000\000\000\000\004\189\000\000\000\000\004\189\004\189\000\000\000\000\004\189\000\000\000\000\000\000\000\000\004\189\004\189\000\000\000\000\000\000\004\189\000\000\002\005\002.\000\000\000\000\002\005\002\005\000\000\000\000\002\014\000\000\000\000\000\000\000}\000\000\000\000\000}\000\000\000\000\000\000\000\000\002\005\000\000\000\000\002\005\002\005\002\005\002\005\000\000\000\000\000\000\001\246\000\000\002\005\002\005\000}\002n\0026\002\005\000\000\000}\000\000\000\000\000\000\000\000\000\000\001\254\000\000\000\000\000}\000}\000\000\000}\000}\000\000\000\000\000\000\000\000\000}\000\000\000\000\000\000\002\030\000\000\000\000\002\006\000\000\002\022\000}\000e\000\000\000\000\000e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000e\002&\000\000\000}\000e\000\000\000\000\000\000\000\000\000e\000\000\000\000\000\000\000}\000\000\001\254\000\000\000\000\000e\000e\000\000\000e\000e\000\000\000\000\000\000\000\000\000e\000\000\000\000\000\000\000e\000\000\000\000\002\006\000\000\002\022\000e\000}\002.\000\000\000\000\000}\000}\000\000\000\000\002\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000e\000}\000e\000\000\000}\000}\000}\000}\000\000\000\000\000\000\000\000\000e\000}\000}\000\000\000}\0026\000}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000e\000e\000\000\000\000\000e\000e\000\000\000\000\002\014\000\000\000\000\000\000\000]\000\000\000\000\000]\000\000\000\000\000\000\000\000\000e\000\000\000\000\000e\000e\000e\000e\000\000\000\000\000\000\000]\000\000\000e\000e\000]\000e\000e\000e\000\000\000]\000\000\000\000\000\000\000\000\000\000\000]\000\000\000\000\000]\000]\000\000\000]\000]\000\000\000\000\000\000\000\000\000]\000\000\000\000\000\000\000]\000\000\000\000\002\006\000\000\000]\000]\000a\000\000\000\000\000a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000a\000]\000\000\000]\000a\000\000\000\000\000\000\000\000\000a\000\000\000\000\000\000\000]\000\000\000a\000\000\000\000\000a\000a\000\000\000a\000a\000\000\000\000\000\000\000\000\000a\000\000\000\000\000\000\000a\000\000\000\000\002\006\000\000\000a\000a\000]\000]\000\000\000\000\000]\000]\000\000\000\000\002\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000a\000]\000a\000\000\000]\000]\000]\000]\000\000\000\000\000\000\000\000\000a\000]\000]\000\000\000]\000]\000]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000a\000a\000\000\000\000\000a\000a\000\000\000\000\002\014\000\000\000\000\000\000\000q\000\000\000\000\000q\000\000\000\000\000\000\000\000\000a\000\000\000\000\000a\000a\000a\000a\000\000\000\000\000\000\001\246\000\000\000a\000a\000q\000a\000a\000a\000\000\000q\000\000\000\000\000\000\000\000\000\000\001\254\000\000\000\000\000q\000q\000\000\000q\000q\000\000\000\000\000\000\000\000\000q\000\000\000\000\000\000\000q\000\000\000\000\002\006\000\000\002\022\000q\000i\000\000\000\000\000i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\246\002&\000\000\000q\000i\000\000\000\000\000\000\000\000\000i\000\000\000\000\000\000\000q\000\000\001\254\000\000\000\000\000i\000i\000\000\000i\000i\000\000\000\000\000\000\000\000\000i\000\000\000\000\000\000\000i\000\000\000\000\002\006\000\000\002\022\000i\000q\000q\000\000\000\000\000q\000q\000\000\000\000\002\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000i\000q\000i\000\000\000q\000q\000q\000q\000\000\000\000\000\000\000\000\000i\000q\000q\000\000\000q\000q\000q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000i\000i\000\000\000\000\000i\000i\000\000\000\000\002\014\000\000\000\000\000\000\000m\000\000\000\000\000m\000\000\000\000\000\000\000\000\000i\000\000\000\000\000i\000i\000i\000i\000\000\000\000\000\000\001\246\000\000\000i\000i\000m\000i\000i\000i\000\000\000m\000\000\000\000\000\000\000\000\000\000\001\254\000\000\000\000\000m\000m\000\000\000m\000m\000\000\000\000\000\000\000\000\000m\000\000\000\000\000\000\000m\000\000\000\000\002\006\000\000\002\022\000m\000u\000\000\000\000\000u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\246\002&\000\000\000m\000u\000\000\000\000\000\000\000\000\000u\000\000\000\000\000\000\000m\000\000\001\254\000\000\000\000\000u\000u\000\000\000u\000u\000\000\000\000\000\000\000\000\000u\000\000\000\000\000\000\002\030\000\000\000\000\002\006\000\000\002\022\000u\000m\000m\000\000\000\000\000m\000m\000\000\000\000\002\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002&\000m\000u\000\000\000m\000m\000m\000m\000\000\000\000\000\000\000\000\000u\000m\000m\000\000\000m\000m\000m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000u\002.\000\000\000\000\000u\000u\000\000\000\000\002\014\000\000\000\000\000\000\001\238\000\000\000\000\000\133\000\000\000\000\000\000\000\000\000u\000\000\000\000\000u\000u\000u\000u\000\000\000\000\000\000\001\246\000\000\000u\000u\000\133\000u\000u\000u\000\000\000\133\000\000\000\000\000\000\000\000\000\000\001\254\000\000\000\000\000\133\000\133\000\000\000\133\002f\000\000\000\000\000\000\000\000\000\133\000\000\000\000\000\000\002\030\000\000\000\000\002\006\000\000\002\022\000\133\001\238\000\000\000\000\000y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\246\002&\000\000\000\133\000y\000\000\000\000\000\000\000\000\000y\000\000\000\000\000\000\000\133\000\000\001\254\000\000\000\000\000y\000y\000\000\000y\000y\000\000\000\000\000\000\000\000\000y\000\000\000\000\000\000\002\030\000\000\000\000\002\006\000\000\002\022\000y\000\133\002.\000\000\000\000\000\133\000\133\000\000\000\000\002\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002&\000\133\000y\000\000\000\133\000\133\000\133\000\133\000\000\000\000\000\000\000\000\000y\000\133\000\133\000\000\002n\0026\000\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000y\002.\000\000\000\000\000y\000y\000\000\000\000\002\014\000\000\000\000\000\000\001\238\000\000\000\000\000\129\000\000\000\000\000\000\000\000\000y\000\000\000\000\000y\000y\000y\000y\000\000\000\000\000\000\001\246\000\000\000y\000y\000\129\000y\0026\000y\000\000\000\129\000\000\000\000\000\000\000\000\000\000\001\254\000\000\000\000\000\129\000\129\000\000\000\129\002f\000\000\000\000\000\000\000\000\000\129\000\000\000\000\000\000\002\030\000\000\000\000\002\006\000\000\002\022\000\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002&\000\000\000\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\000\000\000\000\000\000\004\157\000\000\000\000\004\157\000\000\004\157\000\000\004\157\000\000\004\157\000\000\000\000\000\000\000\000\004\157\004\157\000\000\000\000\000\000\000\000\000\000\000\129\002.\000\000\000\000\000\129\000\129\004\157\000\000\002\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\157\004\157\000\000\000\000\000\129\000\000\004\157\000\129\000\129\000\129\000\129\000\000\000\000\000\000\000\000\000\000\000\129\000\129\000\000\000\129\0026\000\129\004\157\000\000\000\000\004\157\005\226\000\000\000\000\000\000\004\157\004\157\000\000\000\000\004\157\004\157\000\000\000\000\000\000\000\000\000\000\000\000\004\157\000\000\000\000\000\000\004\157\004\157\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\157\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\157\000\000\000\000\000\000\0002\0006\000F\000b\000\000\000f\004\157\000j\000\134\000\000\000\138\004\157\000\146\000\000\000\150\000\000\000\154\000\174\000\178\000\182\000\000\004\157\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\133\000\000\018\022\000\186\0182\000\000\000\000\000\000\000\000\018>\000\000\000\000\004\157\000\000\000\190\004\157\004\157\000\000\000\000\004\157\000\000\000\000\005\133\000\000\004\157\004\157\000\000\000\000\018V\004\157\000\000\000\000\005\133\005\133\000\000\000\202\000\000\000\000\005\133\005\133\018\130\000\000\005\133\000\000\005\133\000\000\005\133\000\000\005\133\000\206\000\000\000\000\000\000\005\133\005\133\000\000\000\000\005\133\000\000\000\000\000\000\000\000\005\133\002\146\000\000\000\000\005\133\000\000\000\000\018\162\000\000\000\000\018\242\000\000\005\133\000\000\005\133\005\133\005\133\005\133\000\000\000\000\005\133\000\000\019\n\000\000\000\000\000\000\005\133\019\022\000\000\0081\000\000\000\000\019\"\000\000\000\000\000\000\005\133\000\000\000\000\005\133\019.\000\000\000\000\019\222\005\133\002\146\005\133\000\000\005\133\005\133\000\000\000\000\000\000\000\000\000\000\000\000\005\133\000\000\019\234\000\000\005\133\005\133\020\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\133\005\133\000\000\000\000\005\133\005\133\000\000\000\000\005\133\000\000\005\133\000\000\000\000\005\133\005\133\005\133\000\000\000\000\005\133\000\000\000\000\000\000\000\000\000\000\n\198\005\133\000\000\000\000\000\000\003m\000\000\003m\000\000\000\000\003m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\133\000\000\000\000\005\133\005\133\003m\000\000\005\133\000\000\000\000\000\000\000\000\005\133\005\133\003m\003m\000\000\005\133\003m\003m\000\000\000\000\000\000\000\000\003m\000\000\003m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003m\003m\000\000\000\000\003m\003m\003m\000\000\003m\003m\000\000\003m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003m\003m\000\000\000\000\000\000\000\000\003m\000\000\000\000\003m\000\000\000\000\000\000\000\000\000\000\000\000\001\161\000\000\003m\001\161\000\000\000\000\000\000\000\000\000\000\000\000\003m\000\000\003m\000\000\003m\000\000\000\000\000\000\001\161\000\000\000\000\000\000\001\161\000\000\003m\000\000\000\000\001\161\000\000\003m\000\000\000\000\000\000\001\161\000\000\003m\001\161\001\161\003m\001\161\001\161\000\000\000\000\000\000\003m\001\161\000\000\000\000\001\030\001\161\t\226\000\000\001\161\t\230\001\161\001\161\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001*\000\000\000\000\000\000\000\000\000\000\001\161\000\000\001\161\t\234\n>\000\000\000\000\n\166\n\190\000\000\000\000\000\000\001\161\001R\000\000\001V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\n\001^\000\000\000\000\n\014\008\166\001j\000\000\n\018\n\022\000\000\n\026\000\000\000\000\001\161\001\161\007~\000\000\001\161\000\000\000\000\000\000\001\161\000\000\000\000\000\000\006\254\n\030\000\000\000\000\000\000\000\000\n\"\000\000\000\000\000\162\000\000\001\161\000\000\001\161\000\000\000\000\000\000\000\000\n*\007\134\001\161\001\161\000\000\001\161\001\161\001\161\005\173\001\030\n\194\t\226\n\222\000\000\t\230\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n.\000\000\000\000\000\000\000\000\n2\000\000\000\000\001*\000\000\000\000\011\186\000\000\000\000\n6\000\000\000\000\t\234\n>\000\000\001\154\n\166\n\190\000\000\000\000\000\000\000\000\001R\000\000\001V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\n\001^\000\000\000\000\n\014\008\166\001j\000\000\n\018\n\022\000\000\n\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\n\030\000\000\000\000\000\000\000\000\n\"\000\000\001\030\000\162\t\226\000\000\000\000\t\230\000\000\000\000\000\000\000\000\n*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\173\000\000\n\194\001*\n\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\234\n>\n.\000\000\n\166\n\190\000\000\n2\000\000\000\000\001R\000\000\001V\n\230\000\000\000\000\n6\000\000\000\000\000\000\n\n\001^\001\154\000\000\n\014\008\166\001j\000\000\n\018\n\022\000\000\n\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\n\030\000\000\000\000\000\000\000\000\n\"\000\000\001\030\000\162\t\226\000\000\000\000\t\230\000\000\000\000\000\000\000\000\n*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\173\000\000\n\194\001*\n\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\234\n>\n.\000\000\n\166\n\190\000\000\n2\000\000\000\000\001R\000\000\001V\005\025\000\000\000\000\n6\000\000\000\000\000\000\n\n\001^\001\154\000\000\n\014\008\166\001j\000\000\n\018\n\022\000\000\n\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\254\n\030\000\000\000\000\000\000\000\000\n\"\000\000\000\000\000\162\000\000\000\000\000\000\012)\000\000\000\000\012)\000\000\n*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\173\000\000\n\194\000\000\n\222\012)\000\000\000\000\000\000\012)\000\000\000\000\000\000\003V\n.\000\000\000\000\000\000\000\000\n2\012)\000\000\000\000\000\000\012)\001\189\012)\012)\n6\000\000\003^\000\000\000\000\003j\001\154\001\030\012)\t\226\000\000\012)\t\230\012)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001*\000\000\000\000\000\000\000\000\000\000\012)\000\000\000\000\t\234\n>\000\000\000\000\n\166\n\190\000\000\000\000\000\000\012)\001R\000\000\001V\000\000\000\000\000\000\003v\000\000\000\000\000\000\n\n\001^\000\000\000\000\n\014\008\166\001j\000\000\n\018\n\022\000\000\n\026\000\000\000\000\000\000\012)\012)\000\000\012)\000\000\003z\000\000\012)\000\000\000\000\000\000\006\254\n\030\000\000\000\000\003\130\000\000\n\"\000\000\012)\000\162\000\000\000\000\000\000\012)\012)\000\000\000\000\001\137\n*\012)\001\137\000\000\000\000\012)\012)\012)\005\173\000\000\000\000\000\000\n\222\000\000\000\000\000\000\000\000\001\137\000\000\000\000\000\000\000\000\n.\000\000\000\000\000\000\001\137\n2\000\000\000\000\000\000\000\000\001\137\001\201\000\000\000\000\n6\000\000\001\137\001\137\000\000\000\000\001\154\000\000\000\000\000\000\007\178\000\000\001\137\008\002\000\000\001\137\000\000\001\137\001\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\186\000\000\000\000\000\000\002\021\000\000\000\000\000\000\000\000\002\021\001\137\000\000\001\137\000\000\000\000\007\194\000\000\000\000\002\021\002\021\000\000\008\018\008\026\000\000\000\000\000\000\000\000\002\021\000\000\000\000\000\000\007\226\000\000\000\000\007\202\000\000\007\218\002\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\137\001\137\001\198\000\000\001\137\001\137\000\000\000\000\001\137\000\000\007\234\000\000\002\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\137\000\000\002\021\001\137\001\137\000\000\001\137\000\000\000\000\000\000\000\000\002\130\001\137\001\137\000\000\001\137\001\137\001\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\021\007\242\000\000\000\000\002\021\000\000\000\000\000\000\007\210\000\000\000\000\000\000\001%\000\000\000\000\001%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\021\000\000\002\021\000\000\000\000\000\000\000\000\007\186\000\000\002\021\002\021\001%\008\"\007\250\002\021\000\000\001%\000\000\000\000\000\000\000\000\000\000\007\194\000\000\000\000\001%\001%\000\000\001%\001%\000\000\000\000\000\000\000\000\001%\000\000\000\000\000\000\007\226\000\000\000\000\007\202\000\000\007\218\001%\001\013\000\000\000\000\001\013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\013\007\234\000\000\001%\001\013\000\000\000\000\000\000\000\000\001\013\000\000\000\000\000\000\001%\000\000\007\194\000\000\000\000\001\013\001\013\000\000\001\013\001\013\000\000\000\000\000\000\000\000\001\013\000\000\000\000\000\000\001\013\000\000\000\000\007\202\000\000\007\218\001\013\001%\007\242\000\000\000\000\001%\000\000\000\000\000\000\007\210\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\013\000\000\001\013\000\000\001%\000\000\001%\000\000\000\000\000\000\000\000\000\000\001\013\001%\001%\000\000\001%\007\250\001%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\013\001\013\000\000\000\000\001\013\000\000\000\000\000\000\007\210\000\000\000\000\000\000\001\005\000\000\000\000\001\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\013\000\000\001\013\000\000\000\000\000\000\000\000\001\005\000\000\001\013\001\013\001\005\001\013\001\013\001\013\000\000\001\005\000\000\000\000\000\000\000\000\000\000\001\005\000\000\000\000\001\005\001\005\000\000\001\005\001\005\000\000\000\000\000\000\000\000\001\005\000\000\000\000\000\000\001\005\000\000\000\000\007\202\000\000\001\005\001\005\001\t\000\000\000\000\001\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\t\001\005\000\000\001\005\001\t\000\000\000\000\000\000\000\000\001\t\000\000\000\000\000\000\001\005\000\000\001\t\000\000\000\000\001\t\001\t\000\000\001\t\001\t\000\000\000\000\000\000\000\000\001\t\000\000\000\000\000\000\001\t\000\000\000\000\007\202\000\000\001\t\001\t\001\005\001\005\000\000\000\000\001\005\000\000\000\000\000\000\007\210\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\t\000\000\001\t\000\000\001\005\000\000\001\005\000\000\000\000\000\000\000\000\000\000\001\t\001\005\001\005\000\000\001\005\001\005\001\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\t\001\t\000\000\000\000\001\t\000\000\000\000\000\000\007\210\000\000\000\000\000\000\001\025\000\000\000\000\001\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\t\000\000\001\t\000\000\000\000\000\000\000\000\007\186\000\000\001\t\001\t\001\025\001\t\001\t\001\t\000\000\001\025\000\000\000\000\000\000\000\000\000\000\007\194\000\000\000\000\001\025\001\025\000\000\001\025\001\025\000\000\000\000\000\000\000\000\001\025\000\000\000\000\000\000\001\025\000\000\000\000\007\202\000\000\007\218\001\025\001\017\000\000\000\000\001\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\186\007\234\000\000\001\025\001\017\000\000\000\000\000\000\000\000\001\017\000\000\000\000\000\000\001\025\000\000\007\194\000\000\000\000\001\017\001\017\000\000\001\017\001\017\000\000\000\000\000\000\000\000\001\017\000\000\000\000\000\000\001\017\000\000\000\000\007\202\000\000\007\218\001\017\001\025\001\025\000\000\000\000\001\025\000\000\000\000\000\000\007\210\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\017\000\000\001\017\000\000\001\025\000\000\001\025\000\000\000\000\000\000\000\000\000\000\001\017\001\025\001\025\000\000\001\025\001\025\001\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\017\001\017\000\000\000\000\001\017\000\000\000\000\000\000\007\210\000\000\000\000\000\000\001\021\000\000\000\000\001\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\017\000\000\001\017\000\000\000\000\000\000\000\000\007\186\000\000\001\017\001\017\001\021\001\017\001\017\001\017\000\000\001\021\000\000\000\000\000\000\000\000\000\000\007\194\000\000\000\000\001\021\001\021\000\000\001\021\001\021\000\000\000\000\000\000\000\000\001\021\000\000\000\000\000\000\001\021\000\000\000\000\007\202\000\000\007\218\001\021\001\029\000\000\000\000\001\029\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\186\007\234\000\000\001\021\001\029\000\000\000\000\000\000\000\000\001\029\000\000\000\000\000\000\001\021\000\000\007\194\000\000\000\000\001\029\001\029\000\000\001\029\001\029\000\000\000\000\000\000\000\000\001\029\000\000\000\000\000\000\007\226\000\000\000\000\007\202\000\000\007\218\001\029\001\021\001\021\000\000\000\000\001\021\000\000\000\000\000\000\007\210\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\234\000\000\001\029\000\000\001\021\000\000\001\021\000\000\000\000\000\000\000\000\000\000\001\029\001\021\001\021\000\000\001\021\001\021\001\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\029\007\242\000\000\000\000\001\029\000\000\000\000\000\000\007\210\000\000\000\000\000\000\007\178\000\000\000\000\001-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\029\000\000\001\029\000\000\000\000\000\000\000\000\007\186\000\000\001\029\001\029\001-\001\029\001\029\001\029\000\000\001-\000\000\000\000\000\000\000\000\000\000\007\194\000\000\000\000\001-\001-\000\000\001-\008\026\000\000\000\000\000\000\000\000\001-\000\000\000\000\000\000\007\226\000\000\000\000\007\202\000\000\007\218\001-\007\178\000\000\000\000\001!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\186\007\234\000\000\001-\001!\000\000\000\000\000\000\000\000\001!\000\000\000\000\000\000\001-\000\000\007\194\000\000\000\000\001!\001!\000\000\001!\001!\000\000\000\000\000\000\000\000\001!\000\000\000\000\000\000\007\226\000\000\000\000\007\202\000\000\007\218\001!\001-\007\242\000\000\000\000\001-\000\000\000\000\000\000\007\210\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\234\000\000\001!\000\000\001-\000\000\001-\000\000\000\000\000\000\000\000\000\000\001!\001-\001-\000\000\008\"\007\250\001-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001!\007\242\000\000\000\000\001!\000\000\000\000\000\000\007\210\000\000\000\000\000\000\007\178\000\000\000\000\001)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001!\000\000\001!\000\000\000\000\000\000\000\000\007\186\000\000\001!\001!\001)\001!\007\250\001!\000\000\001)\000\000\000\000\000\000\000\000\000\000\007\194\000\000\000\000\001)\001)\000\000\001)\008\026\000\000\000\000\000\000\000\000\001)\000\000\000\000\001\030\007\226\001\"\000\000\007\202\001&\007\218\001)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008>\000\000\000\000\000\000\000\000\000\000\001*\000\000\000\000\001.\000\000\000\000\007\234\000\000\001)\001>\001B\000\000\001J\000\000\t\222\000\000\000\000\000\000\001)\001R\000\000\001V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001Z\001^\000\000\n\206\001b\001f\001j\000\000\001n\001r\000\000\001v\000\000\000\000\001)\007\242\000\000\000\000\001)\000\000\000\000\000\000\007\210\000\000\000\000\000\000\000\000\001z\000\000\000\000\000\000\000\000\001~\000\000\000\000\000\162\000\000\001)\000\000\001)\000\000\000\000\000\000\000\000\001\134\000\000\001)\001)\000\000\001)\007\250\001)\000\000\000\000\001\138\008A\000\000\001\030\000\000\001\"\000\000\000\000\001&\000\000\000\000\000\000\001\142\000\000\000\000\000\000\000\000\001\146\008A\000\000\008A\000\000\008A\000\000\001*\000\000\001\150\001.\000\000\000\000\000\181\000\000\001\154\001>\001B\000\000\001J\000\000\000\000\000\000\000\000\000\000\000\000\001R\000\000\001V\000\000\000\000\011\026\000\000\000\000\000\000\000\000\001Z\001^\000\000\000\000\001b\001f\001j\000\000\001n\001r\011\"\001v\000\000\000\000\000\000\000\000\000\181\000\181\001\030\000\000\001\"\000\000\000\000\001&\000\000\000\000\011B\001z\000\000\011*\000\000\011:\001~\014\186\000\000\000\162\000\000\000\000\000\000\001*\000\000\000\000\001.\000\000\001\134\000\000\000\000\000\000\001>\001B\000\000\001J\011J\000\000\001\138\000\000\000\000\000\000\001R\000\000\001V\000\000\000\000\000\000\000\000\000\000\001\142\000\000\001Z\001^\000\000\001\146\001b\001f\001j\000\000\001n\001r\000\000\001v\001\150\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\011R\000\000\000\000\000\000\000\000\001z\000\000\0112\000\000\000\000\001~\000\000\001\030\000\162\001\"\000\000\000\000\001&\000\000\000\181\000\000\000\000\001\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\138\001*\000\181\011Z\001.\000\000\000\000\000\000\000\000\000\000\001>\004\226\001\142\001J\000\000\000\000\000\000\001\146\000\000\000\000\001R\000\000\001V\000\000\000\000\000\000\001\150\000\000\000\000\000\000\001Z\001^\001\154\000\000\001b\001f\001j\000\000\001n\001r\000\000\001v\000\000\000\000\000\000\006~\006J\000b\001\030\000f\001\"\006N\000\134\001&\000\138\000\000\000\146\001z\000\150\000\000\000\154\000\174\001~\000\182\000\000\000\162\000\000\000\000\000\000\001*\000\000\000\000\001.\000\000\001\134\000\000\000\186\000\000\001>\001\130\000\000\001J\000\000\000\000\001\138\000\000\000\000\000\190\001R\000\000\001V\000\000\000\000\000\000\000\000\000\000\001\142\000\000\001Z\001^\000\000\001\146\001b\001f\001j\000\000\001n\001r\000\000\001v\001\150\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\000\206\000\000\000\000\001z\000\000\003\202\000\000\000\000\001~\000\000\003e\000\162\003e\000\000\000\000\003e\000\000\000\000\000\000\000\000\001\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\138\003e\000\000\000\000\003e\000\000\000\000\000\000\000\000\000\000\003e\003e\001\142\003e\000\000\000\000\000\000\001\146\000\000\000\000\003e\000\000\003e\000\000\000\000\000\000\001\150\000\000\000\000\000\000\003e\003e\001\154\000\000\003e\003e\003e\004%\003e\003e\004%\003e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004%\000\000\003e\000\000\000\000\000\000\000\000\003e\004%\004%\003e\000\000\000\000\000\000\000\157\004%\000\000\000\000\000\000\003e\000\000\004%\004%\000\000\000\000\004%\000\000\000\000\004%\000\000\000\000\004%\000\157\000\000\004%\000\000\004%\004%\000\000\000\000\000\000\003e\000\000\000\000\000\000\000\000\003e\011\"\000\000\000\000\000\000\000\000\000\000\000\157\000\157\003e\000\000\004%\000\000\000\000\000\000\003e\000\000\000\157\000\000\000\000\011*\000\000\011:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004%\000\000\000\000\000\000\000\000\000\000\001\030\000\000\0012\000\000\000\000\0016\000\000\000\157\000\000\000\000\000\000\000\000\000\000\004%\004%\000\000\000\000\004\193\004%\000\000\004%\001*\000\000\000\000\001.\000\000\000\000\000\000\004%\000\000\001:\001N\004%\001J\000\000\004%\000\000\000\000\000\000\000\000\001R\000\000\001V\004%\000\000\000\157\000\000\004%\004%\000\000\003\022\001^\0112\000\000\003\026\001f\001j\000\000\003\030\003\"\000\000\003&\000\000\000\000\000\157\000\000\000\000\000\000\001\030\000\000\0012\000\000\000\000\0016\000\000\000\000\000\000\003*\000\000\000\157\000\157\000\000\003.\000\000\000\000\000\162\000\000\000\000\000\000\001*\000\000\000\000\001.\000\000\0036\000\000\000\000\000\000\001:\004\202\000\000\001J\000\000\000\000\000\000\000\000\000\000\000\000\001R\000\000\001V\000\000\000\000\000\000\000\000\000\000\003:\000\000\003\022\001^\000\000\003>\003\026\001f\001j\000\000\003\030\003\"\000\000\003&\003B\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\000\000\000\000\000\000\003.\000\000\001\030\000\162\0012\000\000\000\000\0016\000\000\000\000\000\000\000\000\0036\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001*\000\000\000\000\001.\000\000\000\000\000\000\000\000\000\000\001:\0032\003:\001J\000\000\000\000\000\000\003>\000\000\000\000\001R\000\000\001V\000\000\000\000\000\000\003B\000\000\000\000\000\000\003\022\001^\001\154\000\000\003\026\001f\001j\000\000\003\030\003\"\000\000\003&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\000\000\000\000\000\000\003.\000\000\000\000\000\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0036\0002\006&\000F\000b\006>\000f\006\142\000j\000\134\006\146\000\138\000\000\000\146\000\000\000\150\006\150\000\154\000\174\000\178\000\182\006\154\003:\000\000\000\000\000\000\000\000\003>\000\000\000\000\001\030\000\000\006\202\000\186\000\000\006\206\003B\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\190\000\000\000\000\000\000\000\000\000\000\000\000\001*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\210\008*\000\000\000\000\000\000\000\202\000\000\000\000\000\000\000\000\001R\001\030\001V\006\202\000\000\000\000\006\206\000\000\000\000\000\206\006\234\001^\000\000\000\000\006\238\001f\001j\000\000\006\242\006\246\000\000\006\250\001*\000\000\000\000\008\170\000\000\000\000\000\000\000\000\000\000\006\210\006\214\000\000\000\000\000\000\006\254\007\002\000\000\000\000\000\000\001R\007\006\001V\000\000\000\162\000\000\000\000\000\000\000\000\000\162\006\234\001^\000\000\007\014\006\238\001f\001j\000\000\006\242\006\246\000\000\006\250\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\018\006\254\007\002\t\166\000\000\007\022\000\000\007\006\000\000\000\000\000\162\000\000\000\000\000\000\007\026\000\000\000\000\000\000\000\000\007\014\001\154\000\000\001\030\000\000\006\202\000\000\000\000\006\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\018\000\000\001*\000\000\000\000\007\022\000\000\000\000\000\000\000\000\000\000\006\210\007\n\000\000\007\026\000\000\000\149\000\000\000\000\000\000\001\154\001R\001\030\001V\t\226\000\000\000\000\t\230\000\000\000\000\000\000\006\234\001^\000\000\000\149\006\238\001f\001j\000\000\006\242\006\246\000\000\006\250\001*\000\000\000\000\000\000\000\000\000\000\000\149\000\000\000\000\t\234\t\246\000\000\000\149\000\149\006\254\007\002\000\000\000\000\000\000\001R\007\006\001V\000\149\000\162\000\000\011*\000\000\000\149\000\000\n\n\001^\000\000\007\014\n\014\001f\001j\000\000\n\018\n\022\000\000\n\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\149\000\000\000\000\000\000\000\000\000\000\007\018\006\254\n\030\000\000\000\000\007\022\000\000\n\"\000\000\000\000\000\162\000\000\000\000\000\000\007\026\000\000\000\000\000\000\000\000\n*\001\154\000\000\001\030\000\000\t\226\000\000\000\000\t\230\000\000\000\000\000\000\000\000\000\149\000\000\000\000\000\000\000\000\000\000\000\000\0112\000\000\n.\000\000\001*\000\000\000\000\n2\000\000\000\000\000\000\000\000\000\149\t\234\n&\000\000\n6\000\000\000\000\000\000\000\000\000\000\001\154\001R\001\030\001V\t\226\000\149\000\149\t\230\000\000\000\000\000\000\n\n\001^\000\000\000\000\n\014\001f\001j\000\000\n\018\n\022\000\000\n\026\001*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\234\n>\000\000\000\000\000\000\006\254\n\030\000\000\000\000\000\000\001R\n\"\001V\000\000\000\162\000\000\007\173\000\000\000\000\000\000\n\n\001^\000\000\n*\n\014\001f\001j\000\000\n\018\n\022\000\000\n\026\000\000\000\000\000\000\000\000\000\000\000\000\007\173\000\000\000\000\000\000\000\000\000\000\000\000\n.\006\254\n\030\007\173\007\173\n2\000\000\n\"\000\000\007\173\000\162\000\000\000\000\000\000\n6\000\000\000\000\000\000\000\000\n*\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\173\000\000\000\000\000\000\000\000\007\173\000:\000\000\000\000\007\173\007\173\000\000\000\000\n.\000\000\000\000\000\000\007\173\n2\000\000\001\153\007\173\007\173\001\153\000\000\000\000\000\000\n6\000\000\000\000\000\000\007\173\000\000\001\154\000\000\000\000\000\000\000\000\001\153\000\000\000\000\007\173\001\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\173\000\000\001\153\000\000\000\000\000\000\001\153\000\000\001\153\001\153\000\000\000\000\000\000\000\000\000\000\007\173\000\000\000\000\001\153\000\000\000\000\001\153\000\000\001\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\173\000\000\000\000\007\173\007\173\000\000\000\000\007\173\000\000\001\153\000\000\000\000\007\173\007\173\000\000\000\000\005\133\007\173\000\000\005\133\000\000\001\153\000\000\005\133\000\000\005\133\000\000\000\000\000\000\000\000\005\133\005\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\153\003\166\000\000\001\153\000\000\000\000\000\000\001\153\000\000\000\000\000\000\000\000\007\173\000\000\000\000\000\000\000\000\000\000\000\000\001\153\000\000\000\000\000\000\000\000\001\153\001\153\000\000\000\000\005\133\000\000\003\174\000\000\000\000\000\000\001\153\001\153\001\153\000\218\000\000\000\000\007\173\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\173\000\000\000\000\000\000\007\173\007\173\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\173\000\000\000\000\000\000\000\000\003u\003u\003u\003u\000\000\003u\000\000\003u\003u\000\000\003u\000\000\003u\000\000\003u\007\173\003u\003u\003u\003u\005\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\238\007\173\000\000\003u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003u\000\000\000\000\000\000\000\000\000\000\000\000\007\173\000\000\000\000\007\173\007\173\003\254\000\000\000\000\004N\000\000\000\000\000\000\007\173\007\173\003u\000\000\000\000\007\173\000\000\000\000\003u\000\000\000\000\004\006\000\000\000\000\000\000\002\013\003u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\014\000\000\000\000\000\000\002\013\000\000\004^\004f\000\000\000\000\000\237\000\000\000\000\000\237\000\000\000\000\004.\000\000\000\000\004\022\000\000\004&\000\000\000\000\000\000\000\000\000\000\000\000\004\006\000\000\000\000\003u\000\237\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0046\004\014\000\000\000\000\000\000\000\237\000\000\000\237\000\237\000\000\000\000\000\000\002\013\000\000\000\000\000\000\000\000\004.\000\000\000\000\004\022\000\000\004&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003u\000\000\000\000\000\000\000\000\000\000\000\000\004>\000\000\000\000\002\013\000\000\0046\000\000\004\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\237\000\000\002\013\000\213\000\000\000\000\000\213\002\013\002\013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004n\004F\002\013\000\000\000\213\000\000\000\000\000\000\000\213\004>\000\000\000\000\000\237\000\000\000\000\000\000\004\030\000\000\000\000\004\014\000\000\000\000\000\000\000\213\000\000\000\213\000\213\000\000\000\237\000\205\000\000\000\000\000\205\000\237\000\237\000\213\000\000\000\000\004\022\000\000\004&\000\000\000\000\000\237\004F\000\237\000\000\000\205\000\000\000\000\000\000\000\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\213\000\205\000\000\000\000\000\000\000\205\000\000\000\205\000\205\000\000\000\000\000\000\000\213\000\000\000\000\000\000\000\000\000\205\000\000\000\000\004\022\000\000\000\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\213\000\000\000\000\000\213\000\000\000\205\000\000\004\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\205\000\000\000\213\000\209\000\000\000\000\000\209\000\213\000\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\213\000\213\000\213\000\000\000\209\000\000\000\000\000\000\000\209\000\205\000\000\000\000\000\205\000\000\000\000\000\000\004\030\000\000\000\000\000\209\000\000\000\000\000\000\000\209\000\000\000\209\000\209\000\000\000\205\000\225\000\000\000\000\000\225\000\205\000\205\000\209\000\000\000\000\004\022\000\000\000\209\000\000\000\000\000\205\000\205\000\205\000\000\004\006\000\000\000\000\000\000\000\225\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\209\004\014\000\000\000\000\000\000\000\225\000\000\000\225\000\225\000\000\000\000\000\000\000\209\000\000\000\000\000\000\000\000\000\225\000\000\000\000\004\022\000\000\004&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\209\000\000\000\000\000\209\000\000\0046\000\000\004\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\225\000\000\000\209\000\217\000\000\000\000\000\217\000\209\000\209\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\209\000\209\000\209\000\000\004\006\000\000\000\000\000\000\000\217\000\225\000\000\000\000\000\225\000\000\000\000\000\000\004\030\000\000\000\000\004\014\000\000\000\000\000\000\000\217\000\000\000\217\000\217\000\000\000\225\000\221\000\000\000\000\000\221\000\225\000\225\000\217\000\000\000\000\004\022\000\000\004&\000\000\000\000\000\225\000\225\000\225\000\000\004\006\000\000\000\000\000\000\000\221\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\217\004\014\000\000\000\000\000\000\000\221\000\000\000\221\000\221\000\000\000\000\000\000\000\217\000\000\000\000\000\000\000\000\000\221\000\000\000\000\004\022\000\000\004&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\217\000\000\000\000\000\217\000\000\0046\000\000\004\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\221\000\000\000\217\000\229\000\000\000\000\000\229\000\217\000\217\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\217\000\217\000\217\000\000\004\006\000\000\000\000\000\000\000\229\000\221\000\000\000\000\000\221\000\000\000\000\000\000\004\030\000\000\000\000\004\014\000\000\000\000\000\000\000\229\000\000\000\229\000\229\000\000\000\221\003\254\000\000\000\000\000\245\000\221\000\221\004.\000\000\000\000\004\022\000\000\004&\000\000\000\000\000\221\000\221\000\221\000\000\004\006\000\000\000\000\000\000\000\245\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0046\004\014\000\000\000\000\000\000\000\245\000\000\000\245\004f\000\000\000\000\000\000\000\229\000\000\000\000\000\000\000\000\004.\000\000\000\000\004\022\000\000\004&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004>\000\000\000\000\000\229\000\000\0046\000\000\004\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\245\000\000\000\229\003\254\000\000\000\000\000\233\000\229\000\229\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\229\000\229\000\229\000\000\004\006\000\000\000\000\000\000\000\233\004>\000\000\000\000\000\245\000\000\000\000\000\000\004\030\000\000\000\000\004\014\000\000\000\000\000\000\000\233\000\000\000\233\000\233\000\000\000\245\003\254\000\000\000\000\000\241\000\245\000\245\004.\000\000\000\000\004\022\000\000\004&\000\000\000\000\004n\004F\000\245\000\000\004\006\000\000\000\000\000\000\000\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0046\004\014\000\000\000\000\000\000\000\241\000\000\000\241\004f\000\000\000\000\000\000\000\233\000\000\000\000\000\000\000\000\004.\003\189\000\000\004\022\003\189\004&\000\000\000\000\003\189\000\000\003\189\000\000\000\000\000\000\000\000\003\189\003\189\000\000\000\000\000\000\000\000\004>\000\000\000\000\000\233\000\000\0046\000\000\004\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\241\000\000\000\233\000\000\000\000\000\000\0021\000\233\000\233\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\233\004F\000\233\000\000\000\000\003\189\000\000\000\000\000\000\004>\000\000\000\000\000\241\000\000\000\000\000\000\004\030\0021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0021\000\000\000\000\000\241\0021\0021\000\000\000\000\000\241\000\241\000\000\000\000\000\000\000\000\0021\000\000\000\000\000\000\000\241\004F\000\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\005.\000F\000b\000\000\000f\0021\000j\000\134\000\000\000\138\003\189\000\146\000\000\000\150\000\000\000\154\000\174\000\178\000\182\000\000\0021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0021\000\000\000\190\0021\0021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0021\0021\000\000\000\000\000\000\0021\000\000\000\000\000\000\000\000\000\000\000\202\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\206\000\000\000\000\000\000\0052\0056\0002\000\214\000F\000b\000\000\000f\000\000\000j\000\134\000\000\000\138\000\000\000\146\000\000\000\150\000\000\000\154\000\174\000\178\000\182\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\005.\000F\000b\000\186\000f\000\000\000j\000\134\000\000\000\138\000\000\000\146\000\000\000\150\000\190\000\154\000\174\000\178\000\182\000\000\000\000\000\000\000\000\000\000\000\000\005:\000\000\000\000\000\000\000\000\000\000\000\186\000\000\000\000\000\000\000\202\000\000\000\000\000\000\000\000\000\000\000\230\000\190\000\000\000\000\002}\000\000\000\000\000\000\000\206\000\000\000\000\0002\005.\000F\000b\000\000\000f\000\000\000j\000\134\000\000\000\138\000\202\000\146\000\000\000\150\000\000\000\154\000\174\000\178\000\182\000\000\000\000\000\000\000\000\000\000\000\206\000\000\000\000\000\000\021\210\0056\000\000\000\186\000\000\0002\000\214\000F\000b\000\162\000f\000\000\000j\000\134\000\190\000\138\000\000\000\146\000\000\000\150\000\000\000\154\000\174\000\178\000\182\000\000\000\000\000\000\000\234\000\000\000\000\000\000\000\000\000\000\000\000\000\202\000\000\000\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\190\000\206\000\000\002-\000\000\0052\0056\000\000\021\214\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\202\000\000\000\000\000\000\000\000\012\013\000\230\002u\000\000\000\000\0002\005.\000F\000b\000\206\000f\000\000\000j\000\134\000\000\000\138\000\000\000\146\012\013\000\150\000\000\000\154\000\174\000\178\000\182\000\000\nV\000\000\000\000\000\000\000\000\000\000\000\000\012\013\000\000\005B\000\000\000\186\000\000\012\013\012\013\000\000\000\000\n^\000\000\000\000\nj\000\000\000\190\012\013\000\162\000\000\012\013\000\000\012\013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\202\000\000\000\000\000\000\000\000\000\000\012\013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\206\000\000\000\000\000\153\021\210\0056\000\000\000\000\000\000\002%\000\000\nv\000\000\000\000\000\000\0002\006B\006J\000b\000\000\000f\000\153\006N\000\134\000\000\000\138\000\000\000\146\000\169\000\150\012\013\000\154\000\174\000\178\000\182\nz\000\153\012\013\000\000\000\000\000\000\000\000\000\153\000\153\000\000\n\130\011\026\000\186\000\000\012\013\000\000\000\000\000\153\000\000\000\000\011*\000\000\000\153\000\190\000\000\021\222\011\"\000\000\000\000\012\013\012\013\000\000\000\169\000\169\000\000\000\000\000\000\000\161\000\000\000\000\000\000\000\000\000\169\000\153\006R\011*\000\000\011:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\026\000\000\000\000\000\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011J\000\165\011\"\000\000\000\000\000\000\000\000\000\000\000\161\000\161\000\000\000\000\000\000\000\153\000\000\000\000\000\000\000\000\000\161\011\026\0112\011*\000\000\011:\000\000\000\173\000\000\000\000\000\000\000\000\000\000\000\000\000\153\000\000\011\"\000\000\000\000\000\000\000\169\000\000\000\165\000\165\000\000\011\026\000\161\0112\000\000\000\153\000\153\000\000\000\165\000\000\000\000\011*\000\000\011:\000\000\000\169\011\"\000\000\000\000\000\000\000\000\000\000\000\173\000\173\011\018\000\000\000\000\000\000\000\000\000\000\000\169\000\169\011B\000\000\011J\011*\000\000\011:\000\000\000\000\000\161\000\000\011\026\000\000\000\000\000\000\000\000\0112\011\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\"\011J\000\161\000\000\000\000\000\000\000\189\011j\011\018\011\026\000\000\000\000\000\000\000\000\000\000\000\165\011B\000\161\000\161\011*\000\000\011:\0112\000\000\011\"\000\000\011\026\000\000\000\000\000\000\000\177\000\177\000\000\000\000\000\165\000\000\000\000\000\000\000\000\011R\011B\011\"\011J\011*\000\000\011:\0112\000\185\011j\000\165\000\165\000\000\000\000\000\000\000\000\000\000\000\000\011B\000\173\000\000\011*\000\000\011:\000\000\000\000\000\000\011J\000\000\000\000\000\000\000\000\000\000\000\000\000\173\000\173\000\000\000\000\000\000\000\000\000\000\011R\000\000\000\000\011J\000\000\000\000\000\000\0112\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\189\000\000\000\000\000\000\000\000\011R\000\000\000\000\000\000\000\000\000\000\000\000\0112\000\000\000\000\011r\011Z\000\000\000\000\000\000\000\000\000\000\011R\000\000\000\177\000\000\000\000\000\000\000\000\0112\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\177\011Z\000\185\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\185\011Z")) + ((16, "\000\224\001Z\000\000\000\000\000\000\001\031\000\000\000\000\000\000\000\224\000\000\001T\023\164\000\000\018B\018F\000\000\000\000+\022\018B\000\000;h\018B\000\000\000\000\018B\000\000\018B\000\000\001\003\000\195\018B\000\000\018B\000\000\000\000\000\000+\224\018B\000\000;\156\018B\000\000\000\000\018B\000\000\018B\000\000\000W\000\017\018B\000\000\018B\000\000\018B\000\000;\160\018B\000\000\000\000\018B\000\000\018B\000\000\000O\000\000\000\000\000\000\018B\000\000\018B\000\000\000\000\018B\000\000\018B\000\000\000\224\001\134\018B\000\000\023\164\018B-P\000\000G<\002\008-P\000O-P\000\000\001\156\018B\000\000G\242\000\000\000O\001\234-\254\000\000\000\0008\024\000\000<\172\000\000=\"-\254-\254\019\158\019\158<\172\019\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0008\228-\254\000\000\000\0008\228\000\0008\228\000\000-\254\000\000\000\000\000\000\022\250\000O\000\000\019\158\000\000.v-\254\027\180-\254\000\000\000\000\000\000\000\000\000\000\000\000\030\246-\254\031d-\254 \\-\254 \202-\254\000\000-\254\000\000-\254!\194-\254\"0-\254#(-\254#\150-\254$\142-\254\001\220-\254\000\000\000\000\000\000\000\000\000\000-\254$\252-\254%\244-\254&b-\254\000\000\000\000-\254\000\000\000\000\001\190\000\000\000\000\000\000\000\000\019\236\018B\000\000\003^\018B\000\000=\220\018B\000\000\000\000\018B\000\000\018B\000\000\002<\002v\018B\000\000\018B\000\000\004\246\018B\000\000=\254\018B\000\000\000\000\018B\000\000\018B\000\000\002d\002\144\018B\000\000\018B\000\000\018B\000\000>\024\018B\000\000\000\000\018B\000\000\018B\000\000\000O\018B\000\000\018B\000\000\018B\000\000\018B\000\000\002\130\002\234\018B\000\000;h-P\002\242\018B\000\000H\252H\028\000\000\000\152\003\226\000O\003Z\004(+x\000\000\000\000\000\235I\162\000\000\000\000\000\000\000\000\001*\004l\001\012\004\128+x\000++x\000\000\000\000\003\228\000\000\003\232\004\182+x\004N\000\000\000\000\000\000\000\235\000\000\004\176\005\188\000\000\005\210\000\000\019\236\001*-P\005\028\018B\000\000;\156-P\005Z\018B\000\000\000\000\000O\006N\000\000\000\000\000\000\000\015\019\158\000\000-\254\005\140\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\000\005\166\000\000\000\000\005\172\000\000\005\184<\172\000\000\000\000\000\000\000\000\000\000\000\000?\000-\254\000\000?\000\000\000?\000<\172\000\000\000\000.\212\000O\000\000\019\158\005\188\000\000-\254\005\206\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H6-\254\000\000-\254\000\000\000\000\005\216\000\000\000\1889n\006\140-\254\006V\000\000\000\000<\172\000\188\000\000\000\000\000\000\000\000\000\000I\254<\172J4<\172J\138<\172K4<\172\000\000<\172\000\000<\172K\138<\172K\192<\172L4<\172L\182<\172L\236-\254\006\n<\172\000\000<\172MB<\172M\236<\172NB\005\230\000\000\005\234\000\000\001&-\254\000\000\001&\000\000\000\000\002\174\023\164\000\000\002\174\000\000\000\000\005\234-\254\000\000\005\242\000\000\019\158\005\242\000\000\000\000\006\188\000\000\019\158\005\246\000\000\000\000\005\248\000\000\000\000\001\234\000\000\006\220\000\000;\160-P\006\020\018B\000\000\000\000\006\150\000\000\006 \018B\000\000\000\000\001\132\023\164\000\000\023\164\000\000\006\020\000\000\001\132\000\000\016\030\026\006\0182\000\000\005\218\0182\000\000\0186\0182\000\000\000\000\0182\000\000\0182\000\000\006`\006\140\0182\000\000\0182\000\000\006\022\0182\000\000\018F\0182\000\000\000\000\0182\000\000\0182\000\000\006h\006\148\0182\000\000\0182\000\000\0182\000\000/\190\0182\000\000\000\000\0182\000\000\0182\000\000\000O\0182\000\000\0182\000\000\0182\000\000\0182\000\000\006l\006\152\0182\000\000\023\164\006L\000\000\0182-P\006H\0182\000\000\000\000\000[\000\000\007,\000\000\000\000\001\188-P\006L\0182\000\000\018F-P\006T\0182\000\000\000\000\021\002\0182\000\000\006R\0182\000\000/\226\0182\000\000\000\000\0182\000\000\0182\000\000\006\138\006\184\0182\000\000\0182\000\000\0072\0182\000\000/\242\0182\000\000\000\000\0182\000\000\0182\000\000\006\146\006\190\0182\000\000\0182\000\000\0182\000\0000\002\0182\000\000\000\000\0182\000\000\0182\000\000\000O\0182\000\000\0182\000\000\0182\000\000\0182\000\000\006\152\006\196\0182\000\000/\226-P\006t\0182\000\000\000\000\002\160-P\006v\0182\000\000/\242-P\006x\0182\000\000\000\000\000\000\000\000\000\000\000\000\007>-\254\006\132\021f\007B-\254\006\142\007H\000\213\006\190\006\182\000\000@<@\178\019\158\006\152\000\000\006\162@\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000A(-\254\000\000A(\000\000A(@\178\000\000\000\000\026\\\000O\000\000\019\158\006\166\000\000-\254\006\166\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000,p-\254\000\000-\254\000\000\006\174\000\000\001&\000\000\000\000\000\000\000\000\000\0000\214@\17812@\1781\206@\1782*@\178\000\000@\178\000\000@\1782\198@\1783\"@\1783\190@\1784\026@\1784\182-\254\006\214@\178\000\000@\1785\018@\1785\174@\1786\n\019\158\006\182\000\000\000\000-\254\000\000\007\148\000\000\001V\007j-\254\0078\000\000\007z-\254\007`\000\000\000\003\000\000\006\182\006\182\001V\000\000\001V\000\000\016\030\006\182\006\182\000\000\000\000\000\000\025\\\000\000\000\000\000\000\000\000\007\184-\254\006\254\021f\0224\000O\007\220\000\000\007\1906\208\007\2286\208\007\2306\208\007\012\021f\021f\000\248\001J\002\208\000\000\000\000\000\000\001J\000\000\001N\000\248\000\000\000\000\007\014\000\000\000\000\000\000\007\236\000\000\007\254\000\000\000\000\008,\007\226-\254\007.\008\012\000\000\024R\007\238\019\158\0074\021f\000\000\000\000\007^\000\000\001&\000\000\005^\000\000\001V\000\000\000\000\007\176\000\000-P\000O\000\000\002\004-\254'\242\000\000A\158-\254\007<\000\000\019\158\007<\000\000\007@\000\000\000\000\000\000\000\000\000\000\000\000\000\000B\020-\254\000\000B\020\000\000B\020B\138\019\158\007BB\138\000\000\000\000\029\022\000O\000\000\019\158\007H\000\000-\254\007F\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000-\254\000\134-\254\007H\000\000\000\000(\166'>\007\254-\254\000\000\007\204\000\000\000\000\000O\000\000\000\000\007\138'\242\000\000\007\134'\242\000\000\000\028\000\000\000\000:DB\138>\144B\138NxB\138N\164B\138\000\000B\138\000\000B\138N\246B\138ONB\138O\170B\138O\186B\138P\018B\138P\"B\138PDB\138P\198\000\000\007Z\000\000\007j)Z\000\000*\014\007n*\014-J\007r*\014\000\000\000\000\000\000\000\000\000\000\007l\000\000\008P\000\000\000O\000\000\002\004\008R\000\000\000N\008(\000O\007\134\008L+x\007\146\001(\000\000-\254\008p\000\000\003\226\005\020\008R+x\007\154\008x\000\000\002\008-\254\008z\000\000\008|\000\000\019\236\000O\002\172-\254\008~\000\000\008\128\000\000\012\022\003z\000\000\012\022\000\000\000\000\024R\002\188-\254\008\132\000\000\008\140\000\000\000\000\003z\000\000\000\000\tf\000\000\012\022\000\000\008n\019\158\007\188\008\156\000\000\000%\000\000\008n\000O\007\198\008\132+x\007\202\003\216\000\000-\254\008\174\000\000\008\144+x\007\214\008\180\000\000\003B-\254\008\182\000\000\008\184\000\000\019\236\000O\003r-\254\008\186\000\000\008\188\000\000\000\000\000\000\tf\000\000\000\000\003z\000\000\006\182\000\000\000%\000\000\000\000\003\154\0224\000\000\003\154\000\000\000\000\007\228\000\000\001&\000\003\021f\000\000\004\006\000Z\004\006\000\000\001\240\000\000\006\182\000\000\006\182\000\000\000\000\000\000\007\224\000\000\000\000\007\234\000\000\003\192\005^\000Z\004\006\000\000\000\000\000\000\001\240\000\000\006\182\000\000\003\192\000\000\000\000\007\168\003D\016\030\000\000\003\250\000\000\008\014\016\030\000\000\000\000\008\014\000\000\000\000\007\236\000\000\000\000\007\242\000\000\005\018\006\182\000\000\005\018\000\000\000\000\008n\000\000\003z\000\000\006\182\000\000\000\000\000\000\017j7F\000\000\008\214\000\000\017j\008\218\000\000\008\222\000\000-P\000O\005d\000\000-\254\008\226\000\000\002\254\008\180\000O\008\012\008\202+x\008\018\005t\000\000-\254\008\244\000\000\005\242\000\000-\254\008\252\000\000\019\236\000O\006\004\000\000-\254\008\254\000\000\005f\017j\000\000\024R\006\014\000\000-\254\t\000\000\000\000\000\000\000\005.\000\000\008\252\019\158\008D\t0\000\000\007\020\000\000\t\000\000O\008Z\t\024+x\008`\006\028\000\000-\254\t>\000\000\0062\000\000-\254\t@\000\000\019\236\000O\0066\000\000-\254\tB\000\000\005f\000\000\000\000\008j\000\000\005.\008\168\008\228\000\000\000\000\000\000\008\236\000\000\004~\000\003\000\000\016\030\t>\000\000\000\000-\254\008\162\006\182\000\000\008v\000\000\000\213\000\000\000\000\001\146\016\030\000\000\016\030\000\000\008d\000\000\001\146\000\000<\172\003\134<\172\000\000<\172\000\000\008h\000\000\003\134\000\000\021f\003\142\021f\000\000\021f\000\000\008l\000\000\003\142\000\000<\172\003\134\008n\000\000-P\000O\004\214-P\000\000-P\000\000\008p\000\000\004\214\000\000<\172\003\134\008r\000\000\000\000\024R\000\000\000\000\008\2247\242\000\000\000\000\000\000\000\000\000\000\008\182\000\143\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\1397\242\000\000\0036\001\144\000\000\008\184\000\143\000\000\000\000\000\000\003~\001\144\000\000\000\000\000\000\t\018\000\000\000\000\000\000\000\000\027\180\029\012\000\000C>\000\0007\242\000\000\00307\242\000\000\004|\000\250\000\250\000\000\000\187\000\250\000\000\008\146\000\000\000\000\000\000\000\000\t\024\000\000\030\004\000\000\030\1507\242\000\000\004\2227\242\000\000\t\028\000\0007\242\t\030\000\000D\1807\242\t \000\000\t\"\000\000E\148:\0027\242\008\1687\242\t.\000\000\t2\000\000\t4\000\000\023\164\000\000\004\134\023\164\000\000\008\178\0182\000\000\001\2427\242\000\000\005\1887\242\000\000\004\136\004l\000\143\000\000\000\207\000\143\000\000\008\180\000\000\000\000\000\000\000\000\t<\000\000E\222:\226\t@\000\000\tH\000\0007\242\tJ\000\0007\242\tL\000\0007\242\tT\000\000C\1387\2427\242\008\2187\242\tf\000\000\th\000\000Dj\000\000\000\000\005\2107\242\000\000\005\000\005\174\000\143\000\000\000\000\000\000\005\176\000\143\000\000\008\230\000\000\000\000\000\000\000\0007\242\000\000\005\2247\242\000\000\005\028\006\028\000\143\008\236\000\000\000\000\000\000\000\000\tr\000\000\tt\000\0007\242\tv\000\000F\190:\226\tx\000\000\tz\000\000\020\158\t$\tP/\226\000\0007\242\t\128\000\000\t\134\000\000\tX\020\1587\242\t\146\000\0007\242\t\150\000\000\t\154\000\000:\226\t\0267\242\t\158\000\000\t\160\000\000\000\143\t\018\000\000\000\000\024R\000\000\000\000\002X\t\254\000\000\000\000\002v\000\000\000\000\000\000-\254\000\000\000\000\000\000\002\174\000\000\004J\000\000\000\000\000\000\004\006@L@L@L\000\000\000N\000N\000N\000N\000\000\000\000\000\000\000\000\000\000\000\000\001V\016\030\t\244\013n\003z\000\000\000\000\003z\000\000\tf\000\000'\242\t(\000\000\001V\016\030\t.\014\198\000\000\001V\013n\000\000\000\000\000\000@L\000N\000\000\000\000\000\000\tx\001\166\t\240H\252\000\000\005\178J\002\000\000\000\000\000\000\005R\t\224\000O\000\000\005\178\000\000\005\206H\252\000\000\000\000\t8\t\238\006\182\t8\000\000\003z\000\000\tf\000\000\022L\004h\000\000\000\000\t\220\000\000\000\000\002X\000\000\004\128\000\000\000\000\000\000-\254\000\000\002\174\000\000\005\n\000\000\000\000\000\000\005^\000\000\n\190\003\196\n\190\000\000\006\182\n\190\000\000\004\210\000\000\006\182\000\000\006\182\000\000\006\182\000\000\017\004\000\000\000\000\000\000\000\000\000\000\006\182\000\000\004\210\000\000\006\182\000\000D\218\000\000\000\000\000\180\tl\000\143\003v\n\006\002\248\000\000\002\248\n.\000\000\n4\000\000\n8\000\000\000\000\002l\002\248\002\030\002\248\000\000\000\000\000\198\tD\000\000\t\130\000\143\tJ\000\000\000\180\nD\000\000\003v\004\188\nV\000I\nV\000\000\000\000\0005\000\143\000\000\003\212\000\000\000\000\000;\000\000\tR\000\000\000\000\000\000\t\142\000\143\tV\000\000\000\000\000\180\003v\004\188\0005\003\212\000;\tX\000\000\003v\004\188\0005\003\212\000;\tZ\000\000\000\143\000\000\n\\\nZ\t\160\000\143\t\250\000\000"), (16, "\011\149\011\149\011\149\011\149\011\149\011\149\011\149\011\149\011\149\011\149\011\149\000z\011\149\011\149\011\149\011\149\011\149\011\149\011\149\011\149\011\149\011\149\000~\011A\000\027\000\031\011\149\011q\011A\011A\001f\016V\011\149\008\186\011\149\011\149\011\149\012\014\004F\011\149\023R\n^\005\233\011\149\011\149\011\149\n*\016Z\001\n\n.\001\006\019\206\022\170\024\206\011\149\n2\005\217\011\149\011\149\011A\n6\024\210\021\194\011\149\011\149\011A\011\149\001\206\011\149\0119\012\018\015\150\001\218\011\149\001\n\011\149\011\149\011\149\011\149\011\149\001\n\016\250\014*\011\149\011\149\011\149\0216\011\149\011\149\011\149\011\017\011\149\011\149\011\149\011\149\011\017\011\017\000\198\011\149\011\149\006y\001\n\027b\011\230\015j\006y\006y\011\017\011\149\011\149\011\149\000\202\012\026\011\149\011\149\011\149\011\149\027J\011\149\027:\011\149\004y\004\205\011\149\001\206\018&\011\149\011\149\015\150\001\218\004\013\018*\011\017\026\178\004r\018.\017*\011\149\003a\005m\011\149\004&\006y\000\006\011\149\011\149\011\149\011\149\005\006\011\149\005\241\011\149\004]\006a\014b\011\149\011\149\011\149\001\n\011\149\026\238\011\149\011\149\004\153\011\149\001\006\011\149\011\149\019\162\020\222\011\149\011\149\006i\006i\006i\006i\006i\006i\006i\006i\006i\006i\006i\013:\006i\006i\006i\006i\006i\006i\006i\006i\006i\006i\021\182\001\n\013.\015\134\006i\011\234\011\250\012\n\027\014\004\205\006i\0142\006i\006i\006i\001\n\000\n\006i\027\030\001\006\004^\006i\004y\006i\004\198\027v\027\"\004y\004y\001\006\006\198\004\013\006i\000\018\014>\000\014\004\013\004\013\006\002\004y\004y\006i\006i\021F\001\006\007~\006i\006i\004\013\001\n\021J\006i\019\246\006i\006i\006i\006i\006i\001:\001\n\006a\006i\006i\006i\004y\006i\006i\006i\012\158\006i\006i\006i\006i\004\013\001\n\026\246\006i\006i\0002\007\158\020\022\020>\020f\020v\020\162\006\001\006\001\006i\006i\003\229\015\138\006i\006i\006i\006i\021V\006i\008\206\006i\004f\005\209\006i\001\206\013.\006i\006i\001\214\001\218\004\005\007\134\0031\0069\011\230\011)\0031\011)\019\254\001\006\006i\001\138\001>\012\026\006i\006i\006i\006i\012\162\006i\012\190\006i\005\249\004\205\003\233\006i\006i\006i\001\n\001^\004\005\006i\006i\006\129\006i\006\129\006i\006i\006\129\001\n\006i\006i\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\129\006\t\006\129\001r\008m\006\129\026\238\022\130\006!\006\129\024r\006\129\002\182\006\129\006\129\006\129\005\209\003\002\006\129\006\129\006\129\013:\006\129\006\129\006\129\006\129\011)\006\129\006\129\013^\006\129\015\182\004\005\006\129\011)\005\209\006\129\004\005\004\005\005\209\n\002\004\205\006\129\006\129\006\129\006\129\006\129\006\129\015R\004\005\015R\006\129\006\129\024r\006\129\006\222\006\129\006\129\006\129\026\198\001\006\003N\006\129\006\129\006\129\004\005\006\129\006\129\006\129\003R\006\129\006\129\006\129\006\129\004\005\003\"\026\246\003*\006\129\003:\026\202\003\146\003\150\018v\001\006\006\129\003B\026\206\006\129\006\129\001\n\006\129\006\129\006\129\006\129\006\129\003\246\006\129\007\181\006\129\006\129\011)\006\129\001\206\026\254\006\129\006\129\015\150\001\218\004\t\003J\011\230\007\181\015\214\001\n\026\246\006\129\024\131\024\135\006\129\012\026\016\n\024\139\006\129\006\129\011)\006\129\003\250\006\129\013.\006\129\020\030\015R\012\166\006\129\020F\0061\001\n\011\230\011i\015R\006\129\n\193\006\129\003Z\006\129\006\129\012\026\026\214\006\129\006\129\0006\000:\000J\000\142\007\162\000\146\n*\000\150\000\218\n.\000\226\007\181\000\242\024\186\000\250\n2\001\002\001\026\001\"\001&\n6\024\190\017\006\004\014\011\230\016v\n:\011y\0129\026\222\005\005\021B\001.\012\026\001\142\nJ\nf\016\158\007\181\nj\013:\017z\013.\0016\020&\011\214\004\233\021\166\020N\005\005\n\193\011\230\007\181\004\t\001\154\004*\015R\024\242\004\t\004\t\012\026\016\190\007\181\012.\nr\025\030\025*\013:\0122\0176\004\t\026\190\0042\001\194\007\181\001\198\004\169\001J\0136\012:\015R\0046\021b\n\134\001\206\012>\011y\n\138\012B\001\218\025\227\n\142\n\146\012F\n\150\004\t\0129\0129\025\231\012J\027V\0129\007\181\006Y\013:\004m\027Z\006\025\025\234\n\154\n\158\006)\016z\012N\012R\n\162\012V\005\005\001\n\022\158\012j\0272\006A\004\133\004b\004j\012v\n\170\003f\021\178\003n\013:\003~\008\149\008\149\022\154\005\005\025>\008\149\003\134\012\150\004\130\004m\004\138\012\154\012\214\004\169\013B\020\130\n\174\013.\012\218\004\142\007\181\006\169\n\178\004\169\004\169\011\025\011\230\006\153\004\169\012\226\003\142\n\182\007\181\006\137\006\137\012\026\001\n\002\n\006\137\0006\000:\000J\000\142\007\162\000\146\n*\000\150\000\218\n.\000\226\005\001\000\242\024\186\000\250\n2\001\002\001\026\001\"\001&\n6\024\190\004\150\023J\019\002\003\158\n:\004\229\024\171\024\175\005\001\011I\001.\024\179\001\142\nJ\nf\023\150\017\250\nj\020\138\006\169\019\182\0016\006q\011\214\022j\006\153\006\145\006q\006q\018b\006\198\011!\001\154\026\003\026\007\011\230\025\146\018\146\026\011\006q\006\161\012.\nr\025\030\012\026\013:\0122\017~\007\178\004\174\007\186\001\194\007\202\001\198\004\185\001J\0136\012:\018\214\007\210\001\006\n\134\001\206\012>\006q\n\138\012B\001\218\021\254\n\142\n\146\012F\n\150\004\178\008\149\008\149\005\001\012J\007\246\008\149\007\254\006\017\008\014\007\218\004\186\006\145\023N\n\154\n\158\008\022\001\n\012N\012R\n\162\012V\005\001\001\n\006I\012j\006\161\018\166\004\133\026#\026'\012v\n\170\004\206\026+\t\006\018\194\t\014\0069\t\030\008\030\018\230\013:\018f\007\234\012\150\t&\011Y\019>\012\154\012\214\018\150\013B\0031\n\174\023R\012\218\0031\011Q\019R\n\178\019n\004\185\001\n\004\226\011a\006Q\012\226\023\154\n\182\t.\006\177\006\177\004\246\008.\002\n\006\177\0006\000:\000J\000\142\007\162\000\146\n*\000\150\000\218\n.\000\226\005\022\000\242\024\186\000\250\n2\001\002\001\026\001\"\001&\n6\024\190\005:\023b\025~\005F\n:\t>\005\225\022\142\0111\005N\001.\005\162\001\142\nJ\nf\018\170\025\170\nj\023>\001\n\003U\0016\005\174\011\214\018\198\023\138\005\250\006\n\006\018\018\234\006\146\006\182\001\154\006\190\006\246\011\230\019B\007\002\007\014\007\026\007&\012\022\nr\0072\012\026\007F\0122\019V\tJ\019r\tR\001\194\tb\001\198\004\213\001J\0126\012:\007V\tj\007f\n\134\001\206\012>\007n\n\138\012B\001\218\007\147\n\142\n\146\012F\n\150\019\030\007\222\007\226\012A\012J\008\"\008&\008\134\008\138\008\154\tr\008\170\008\194\008\214\n\154\n\158\019\"\008\234\012N\012R\n\162\012V\t2\001\n\t6\012j\tv\tz\004\133\t\218\t\222\012v\n\170\t\242\n\n\n\030\001\206\n>\nF\nN\015\150\001\218\013:\nV\t\130\012\150\nZ\nb\nz\012\154\012\214\004\213\013B\n\130\n\174\n\218\012\218\n\230\011.\011\166\n\178\004\213\004\213\011\206\011\226\011\238\004\213\012\226\011\246\n\182\001\n\008\157\008\157\011\254\016V\002\n\008\157\0006\000:\000J\000\142\007\162\000\146\n*\000\150\000\218\n.\000\226\012\006\000\242\016Z\000\250\n2\001\002\001\026\001\"\001&\n6\012Z\012b\012r\012z\006\222\n:\012\130\012\138\012\146\012\206\012\222\001.\001\206\001\142\nJ\nf\015\150\001\218\nj\012\230\012\242\012\246\0016\007\189\011\214\012\254\013\002\013\014\013\022\013&\013J\013v\013\130\001\154\013\138\013\202\011\230\007\189\013\234\013\246\014:\014N\012\022\nr\014Z\012\026\001\n\0122\014r\014~\015\006\015\014\001\194\015\030\001\198\015*\001J\0126\012:\015F\015N\015b\n\134\001\206\012>\015n\n\138\012B\001\218\015v\n\142\n\146\012F\n\150\015z\015\130\015\146\015\162\012J\015\170\015\174\015\190\015\198\015\222\015\230\0061\016\018\007\189\n\154\n\158\016\026\016B\012N\012R\n\162\012V\016J\001\n\016N\012j\016^\016f\016j\016r\019\030\012v\n\170\016\130\016\138\016\146\016\150\016\166\016\174\016\198\016\206\017\030\013:\017f\017r\012\150\019\"\017\230\017\242\012\154\012\214\018\018\013B\018>\n\174\018J\012\218\018R\006\222\018n\n\178\018z\018\130\018\134\007\189\018\142\001\206\012\226\018\158\n\182\015\150\001\218\018\178\018\206\018\242\002\n\007\189\0006\000:\000J\000\142\007\162\000\146\n*\000\150\000\218\n.\000\226\019\n\000\242\019\018\000\250\n2\001\002\001\026\001\"\001&\n6\019\022\019&\001\n\019.\0192\n:\019:\019J\019^\019z\019\142\001.\019\158\001\142\nJ\nf\019\174\019\198\nj\019\214\019\226\020\011\0016\0203\011\214\020[\020s\020\151\020\175\020\198\020\226\021N\021w\001\154\021\206\021\227\011\230\022\011\022\023\022'\022/\0061\012\022\nr\022B\012\026\022K\0122\022S\022[\022v\022\182\001\194\022\203\001\198\022\219\001J\0126\012:\022\227\022\239\022\251\n\134\001\206\012>\023\007\n\138\012B\001\218\023\026\n\142\n\146\012F\n\150\023#\023+\023n\012A\012J\023\162\023\183\023\191\023\203\023\219\023\227\023\238\023\242\024\003\n\154\n\158\024\011\024\018\012N\012R\n\162\012V\024\031\001\n\024+\012j\0243\024>\024G\024O\024[\012v\n\170\024v\024\254\025&\0256\025j\025r\025\150\025\186\025\190\013:\025\198\025\239\012\150\026\182\026\194\026\210\012\154\012\214\026\218\013B\026\226\n\174\027\011\012\218\027\018\027\027\027&\n\178\0276\027k\027z\027\131\027\167\027\195\012\226\027\210\n\182\027\214\012A\012A\027\218\027\227\002\n\012A\0006\000:\000J\000\142\007\162\000\146\n*\000\150\000\218\n.\000\226\000\000\000\242\024\186\000\250\n2\001\002\001\026\001\"\001&\n6\024\190\000\000\000\000\000\000\000\000\n:\000\000\000\000\000\000\000\000\000\000\001.\000\000\001\142\nJ\nf\000\000\000\000\nj\000\000\000\000\000\000\0016\000\000\011\214\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012.\nr\000\000\000\000\000\000\0122\026:\000\000\000\000\000\000\001\194\000\000\001\198\000\000\001J\0136\012:\000\000\000\000\000\000\n\134\001\206\012>\000\000\n\138\012B\001\218\000\000\n\142\n\146\012F\n\150\000\000\000\000\000\000\000\000\012J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\154\n\158\000\000\000\000\012N\012R\n\162\012V\000\000\001\n\000\000\012j\000\000\000\000\004\133\000\000\000\000\012v\n\170\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\150\000\000\000\000\000\000\012\154\012\214\000\000\013B\000\000\n\174\000\000\012\218\000\000\000\000\000\000\n\178\000\000\000\000\000\000\000\000\000\000\000\000\012\226\000\000\n\182\000\000\008\129\008\129\000\000\000\000\002\n\008\129\0006\000:\000J\000\142\007\162\000\146\n*\000\150\000\218\n.\000\226\000\000\000\242\000\000\000\250\n2\001\002\001\026\001\"\001&\n6\000\000\000\000\000\000\000\000\000\000\n:\000\000\000\000\000\000\000\000\000\000\001.\000\000\001\142\nJ\nf\000\000\000\000\nj\000\000\000\000\000\000\0016\000\000\011\214\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012.\nr\000\000\000\000\000\000\0122\015\238\000\000\000\000\000\000\001\194\000\000\001\198\000\000\001J\0136\012:\000\000\000\000\000\000\n\134\001\206\012>\000\000\n\138\012B\001\218\000\000\n\142\n\146\012F\n\150\000\000\000\000\000\000\012\029\012J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\154\n\158\000\000\000\000\012N\012R\n\162\012V\000\000\001\n\000\000\012j\000\000\000\000\000\000\000\000\000\000\012v\n\170\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\150\000\000\000\000\000\000\012\154\012\214\000\000\013B\000\000\n\174\000\000\012\218\000\000\000\000\000\000\n\178\000\000\000\000\000\000\000\000\000\000\000\000\012\226\000\000\n\182\000\000\012\029\012\029\000\000\000\000\002\n\012\029\0006\000:\000J\000\142\007\162\000\146\n*\000\150\000\218\n.\000\226\000\000\000\242\000\000\000\250\n2\001\002\001\026\001\"\001&\n6\000\000\000\000\000\000\000\000\000\000\n:\000\000\000\000\000\000\000\000\000\000\001.\000\000\001\142\nJ\nf\000\000\000\000\nj\000\000\000\000\000\000\0016\000\000\011\214\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012.\nr\000\000\000\000\000\000\0122\025\002\000\000\000\000\000\000\001\194\000\000\001\198\000\000\001J\0136\012:\000\000\000\000\000\000\n\134\001\206\012>\000\000\n\138\012B\001\218\000\000\n\142\n\146\012F\n\150\000\000\000\000\000\000\000\000\012J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\154\n\158\000\000\000\000\012N\012R\n\162\012V\000\000\001\n\000\000\012j\000\000\000\000\000\000\000\000\000\000\012v\n\170\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\150\000\000\000\000\000\000\012\154\012\214\000\000\013B\000\000\n\174\000\000\012\218\000\000\000\000\000\000\n\178\000\000\000\000\000\000\000\000\000\000\000\000\012\226\000\000\n\182\000\000\012i\012i\000\000\000\000\002\n\012i\0006\000:\000J\000\142\007\162\000\146\n*\000\150\000\218\n.\000\226\000\000\000\242\000\000\000\250\n2\001\002\001\026\001\"\001&\n6\000\000\000\000\000\000\000\000\000\000\n:\000\000\000\000\000\000\000\000\000\000\001.\000\000\001\142\nJ\nf\000\000\000\000\nj\000\000\000\000\000\000\0016\000\000\011\214\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012.\nr\000\000\000\000\000\000\0122\025\002\000\000\000\000\000\000\001\194\000\000\001\198\000\000\001J\0136\012:\000\000\000\000\000\000\n\134\001\206\012>\000\000\n\138\012B\001\218\000\000\n\142\n\146\012F\n\150\000\000\000\000\000\000\000\000\012J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\154\n\158\000\000\000\000\012N\012R\n\162\012V\000\000\001\n\000\000\012j\000\000\000\000\000\000\000\000\000\000\012v\n\170\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\150\000\000\000\000\000\000\012\154\012\214\000\000\013B\000\000\n\174\000\000\012\218\000\000\000\000\000\000\n\178\000\000\000\000\000\000\000\000\000\000\000\000\012\226\000\000\n\182\000\000\012e\012e\000\000\000\000\002\n\012e\0006\000:\000J\000\142\007\162\000\146\n*\000\150\000\218\n.\000\226\000\000\000\242\000\000\000\250\n2\001\002\001\026\001\"\001&\n6\000\000\000\000\000\000\000\000\000\000\n:\000\000\000\000\000\000\000\000\000\000\001.\000\000\001\142\nJ\nf\000\000\000\000\nj\000\000\000\000\000\000\0016\000\000\011\214\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012.\nr\000\000\000\000\000\000\0122\017\178\000\000\000\000\000\000\001\194\000\000\001\198\000\000\001J\0136\012:\000\000\000\000\000\000\n\134\001\206\012>\000\000\n\138\012B\001\218\000\000\n\142\n\146\012F\n\150\000\000\000\000\000\000\000\000\012J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\154\n\158\000\000\000\000\012N\012R\n\162\012V\000\000\001\n\000\000\012j\n*\000\000\000\000\n.\000\000\012v\n\170\024\206\000\000\n2\000\000\000\000\000\000\000\000\n6\024\210\000\000\000\000\000\000\012\150\000\000\000\000\000\000\012\154\012\214\000\000\013B\000\000\n\174\000\000\012\218\000\000\000\000\000\000\n\178\000\000\000\000\000\000\000\000\000\000\000\000\012\226\016V\n\182\000\000\0006\000:\000J\000\142\002\n\000\146\n*\000\150\000\218\n.\000\226\000\000\000\242\016Z\000\250\n2\001\002\001\026\001\"\001&\n6\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001.\001\206\001\142\000\000\nf\015\150\001\218\nj\000\000\000\000\000\000\0016\000\000\0182\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018B\nr\000\000\000\000\001\n\000\000\000\000\000\000\000\000\004\153\001\194\000\000\001\198\000\000\001J\000\000\000\000\000\000\000\000\000\000\n\134\001\206\000\000\000\000\n\138\001\214\001\218\000\000\n\142\n\146\012F\n\150\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\154\n\158\005\201\007\190\005\201\005\201\n\162\005\201\005\201\001\n\005\201\008\002\005\201\000\000\005\201\000\000\005\201\000\000\n\170\005\201\005\201\005\201\005\201\000\000\005\201\000\000\005\201\000\000\000\000\005\201\000\000\005\201\005\201\000\000\005\201\000\000\005\201\005\201\013B\005\201\n\174\005\201\018F\005\201\005\201\005\201\n\178\005\201\000\000\005\201\000\000\005\201\000\000\018N\000\000\n\182\000\000\005\201\005\201\008\162\005\201\002\n\000\000\005\201\000>\005\201\000>\001N\005\201\008\226\005\201\000\000\000>\005\201\000>\005\201\000\000\005\201\005\201\000\000\000\000\000\000\000\000\005\201\000\000\005\201\000\000\005\201\005\201\005\201\005\201\005\201\000\000\005\201\000\000\000\000\000\000\005\201\005\201\005\201\000\000\005\201\000\000\005\201\000\000\005\201\000\000\005\201\005\201\005\201\005\201\005\201\005\201\005\201\005\201\005\201\000\000\005\201\005\201\005\201\005\201\005\201\005\201\005\201\005\201\005\201\005\201\000\000\000\000\000\000\000\000\005\201\000\000\000\000\005\201\000\000\000\000\000\000\000\000\005\201\000\000\005\201\000\000\005\201\005\201\005\201\005\201\000\000\000\000\005\201\000\000\000\000\000\000\005\201\005\201\005\201\005\201\005\201\005\201\005\201\005\201\000\000\005\201\000\000\000\000\005\201\005\201\005\201\005\201\000\000\005\201\000\000\005\201\0006\000:\000J\000\142\000\000\000\146\000\000\000\150\000\218\000\000\000\226\000\000\000\242\000\000\000\250\000\000\001\002\001\026\001\"\001&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001.\000\000\001\142\000\000\001\146\000\000\000\000\001\150\003\022\003\030\000\142\0016\000\146\000\000\003b\003\166\000\000\003\174\000\000\003\190\000\000\003\198\001\154\003\206\003\218\001\158\003\226\000\000\000\000\000\000\000\000\001\182\001\178\000\000\001\186\000\000\000\000\000\000\000\000\003\234\000\000\001\194\000\000\001\198\000\000\001J\000\000\000\000\000\000\000\000\003\242\001\202\001\206\000\000\000\000\001\210\001\214\001\218\002.\001\222\001\226\000\000\001\230\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\234\000\000\000\000\000\000\000\000\001\238\004\002\000\000\001\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\246\0006\007\166\007\174\000\142\000\000\000\146\000\000\007\242\0086\001\250\008>\020\202\008N\000\000\008V\000\000\008^\008j\001\"\008r\000\000\001\254\000\000\020\206\000\000\000\000\000\000\002\002\000\000\001\n\004Y\020\210\008z\020\214\000\000\000\000\002\006\000\000\020\218\000\000\000\000\000\000\002\n\023\234\000\000\000\000\020\234\000\000\000\000\000\000\020\238\008\250\t\002\000\142\000\000\000\146\020\242\tF\t\138\000\000\t\146\000\000\t\162\008\146\t\170\000\000\t\178\t\190\022^\t\198\000\000\000\000\020\246\023.\000\000\000\000\000\000\008\158\000\000\000\000\000\000\000\000\t\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\214\000\000\000\000\000\000\020\250\000\000\000\000\020\254\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\002\000\000\000\000\000\000\000\000\021\006\001\n\021\n\000\000\021\014\021\018\000\000\021\022\000\000\n:\t\230\000\000\000\000\021\026\000\000\000\000\021\030\001\142\nJ\nf\000\000\000\000\nj\000\000\000\000\000\000\000\000\000\000\011\214\000\000\000\000\021\"\000\000\000\000\000\000\021&\021*\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012f\nr\000\000\000\000\000\000\0122\000\000\000\000\000\000\000\000\001\194\000\000\001\198\000\000\000\000\000\000\012:\000\000\000\000\000\000\n\134\001\206\012>\000\000\n\138\012B\001\218\000\000\n\142\n\146\000\000\n\150\000\000\000\000\000\000\000\000\012J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\154\n\158\000\000\000\000\012N\012R\n\162\012V\000\000\001\n\000\000\012j\n*\000\000\000\000\n.\000\000\012v\n\170\024\206\n:\n2\000\000\000\000\000\000\000\000\n6\024\210\001\142\nJ\nf\012\150\000\000\nj\000\000\012\154\012\214\000\000\000\000\011\214\n\174\000\000\012\218\000\000\000\000\000\000\n\178\000\000\001\154\000\000\000\000\000\000\000\000\012\226\016V\n\182\000\000\nn\nr\000\000\000\000\002\n\0122\000\000\000\000\000\000\000\000\001\194\000\000\001\198\016Z\000\000\000\000\012:\000\000\000\000\000\000\n\134\001\206\012>\000\000\n\138\012B\001\218\000\000\n\142\n\146\000\000\n\150\000\000\001\206\000\000\000\000\012J\015\150\001\218\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\154\n\158\000\000\000\000\012N\012R\n\162\012V\000\000\001\n\000\000\012j\013q\000\000\000\000\013q\000\000\012v\n\170\000\000\000\000\001\n\000\000\000\000\000\000\000\000\004\153\000\000\000\000\000\000\013q\012\150\000\000\000\000\013q\012\154\012\214\002\"\013q\000\000\n\174\000\000\012\218\000\000\013q\000\000\n\178\013q\013q\000\000\013q\013q\000\000\012\226\002*\n\182\013q\005\014\000\000\000\000\013q\002\n\000\000\013q\000\000\013q\013q\000\000\000\000\007}\007}\000\000\000\000\000\000\007}\0006\000:\000J\000\142\000\000\000\146\000\000\000\150\000\218\000\000\000\226\013q\000\242\013q\000\250\000\000\001\002\001\026\001\"\001&\000\000\000\000\000\000\013q\000\000\000\000\000\000\000\000\000\000\000\000\005\026\000\000\001.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0016\000\000\000\000\000\000\000\000\000\000\013q\013q\000\000\013q\013q\005\030\000\000\013q\000\000\000\000\000\000\000\000\000\000\000\000\001F\005&\000\000\000\000\000\000\000\000\013q\000\000\000\000\013q\013q\013q\013q\000\000\001J\000\000\000\000\013q\013q\013q\000\000\013q\013q\013q\001=\001=\001=\001=\000\000\001=\000\000\001=\001=\000\000\001=\000\000\001=\000\000\001=\000\000\001=\001=\001=\001=\000\000\000\000\004\229\000\000\020\186\004\229\000\000\000\000\000\000\000\000\000\000\001=\001=\001=\000\000\000\000\000\000\000\000\001=\000\000\004\229\000\000\000\000\001=\004\229\000\000\001=\004\229\004\229\000\000\001=\000\000\000\000\020\190\004\229\000\000\001=\004\229\004\229\000\000\004\229\004\229\000\000\001=\004\229\000\000\004\229\004\229\001=\000\000\004\229\000\000\000\000\004\229\000\000\004\229\004\229\001=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\229\001=\004\229\000\000\001=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\229\000\000\000\000\000\000\001=\000\000\000\000\004\229\000\000\001=\001\n\001=\000\000\000\000\001=\000\000\020\194\000\000\000\000\000\000\000\000\000\000\001=\000\000\000\000\001=\004\229\004\229\000\000\004\229\005\001\004\229\000\000\004\229\000\000\000\000\000\000\000\000\000\000\000\000\001=\004\229\000\000\000\000\001=\001=\004\229\004\233\000\000\004\229\004\233\004\229\000\000\000\000\000\000\021z\000\000\004\229\004\229\004\229\000\000\004\229\004\229\004\229\000\000\004\233\000\000\000\000\000\000\004\233\000\000\000\000\004\233\004\233\000\000\000\000\000\000\000\000\000\000\004\233\000\000\000\000\004\233\004\233\000\000\004\233\004\233\000\000\000\000\004\233\000\000\004\233\004\233\000\000\000\000\004\233\000\000\000\000\004\233\000\000\004\233\004\233\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0006\007\166\007\174\000\142\000\000\000\146\000\000\007\242\0086\000\000\008>\004\233\008N\004\233\008V\000\000\008^\008j\001\"\008r\000\000\000\000\000\000\004\233\000\000\000\000\000\000\000\000\000\000\000\000\004\233\000\000\008z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008\130\000\000\000\000\000\000\000\000\000\000\004\233\004\233\000\000\004\233\005\005\004\233\000\000\004\233\000\000\000\000\000\000\000\000\000\000\000\000\008\146\004\233\013\197\000\000\000\000\013\197\004\233\000\000\000\000\004\233\000\000\004\233\000\000\000\000\008\158\000\000\000\000\004\233\004\233\004\233\013\197\004\233\004\233\004\233\013\197\000\000\000\000\n\202\013\197\000\000\000\000\000\000\000\000\000\000\013\197\000\000\000\000\013\197\013\197\000\000\013\197\013\197\000\000\000\000\n\210\000\000\013\197\n\222\000\000\000\000\013\197\000\000\000\000\013\197\000\000\013\197\013\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\197\000\000\013\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\197\000\000\000\000\000\000\000\000\000\000\000\000\n\234\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\197\013\197\000\000\013\197\000\000\n\238\000\000\013\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\246\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\197\000\000\013\197\000\000\000\000\000\000\000\000\000\000\013\197\013\197\013\197\000\000\013\197\013\197\013\197\nI\nI\nI\nI\000\000\nI\000\000\nI\nI\000\000\nI\000\000\nI\000\000\nI\000\000\nI\nI\nI\nI\000\000\000\000\001\137\000\000\000\000\001\137\000\000\000\000\000\000\000\000\000\000\nI\nI\nI\000\000\000\000\000\000\000\000\nI\000\000\001\137\000\000\000\000\nI\001\137\000\000\021\138\000\000\001\137\000\000\021\146\000\000\000\000\000\000\001\137\000\000\nI\001\137\001\137\000\000\001\137\001\137\000\000\nI\000\000\000\000\001\137\000\000\nI\000\000\001\137\000\000\000\000\001\137\000\000\001\137\001\137\nI\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\137\nI\001\137\000\000\nI\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\137\000\000\000\000\000\000\nI\000\000\000\000\000\000\000\000\nI\000\000\nI\000\000\000\000\nI\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nI\000\000\000\000\nI\001\137\002>\000\000\001\137\001\137\000\000\000\000\001\137\000\000\000\000\000\000\000\000\000\000\000\000\nI\000\000\000\000\000\000\021\230\nI\001\137\000\000\000\000\001\137\001\137\001\137\001\137\000\000\000\000\000\000\000\000\002\230\001\137\001\137\000\000\001\137\001\137\001\137\n9\n9\n9\n9\000\000\n9\000\000\n9\n9\000\000\n9\000\000\n9\000\000\n9\000\000\n9\n9\n9\n9\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\141\000\000\000\000\000\000\n9\n9\n9\000\000\000\000\000\000\000\000\n9\000\000\000\000\000\000\000\000\n9\000\000\013\141\000\000\000\000\000\000\000\000\000\000\000\000\013\218\000\000\000\000\000\000\n9\000\000\000\000\013\141\000\000\000\000\000\000\n9\000\000\013\141\013\141\000\000\n9\013\226\000\000\000\000\013\238\000\000\000\000\013\141\000\000\n9\013\141\000\000\013\141\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n9\000\000\000\000\n9\013\141\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n9\000\000\000\000\000\000\000\000\n9\000\000\n9\013\250\000\000\n9\000\000\n=\n=\n=\n=\000\000\n=\n9\n=\n=\n9\n=\000\000\n=\000\000\n=\013\141\n=\n=\n=\n=\013\254\000\000\013\141\000\000\n9\000\000\000\000\000\000\021\142\n9\014\006\n=\n=\n=\000\000\013\141\000\000\000\000\n=\000\000\000\000\000\000\000\000\n=\000\000\000\000\021\234\000\000\000\000\000\000\013\141\013\141\000\000\000\000\000\000\000\000\n=\000\000\000\000\000\000\000\000\000\000\000\000\n=\000\000\000\000\000\000\000\000\n=\000\000\000\000\000\000\000\000\0006\007\166\007\174\000\142\n=\000\146\000\000\007\242\0086\000\000\008>\000\000\008N\000\000\008V\000\000\008^\008j\001\"\008r\000\000\000\000\000\000\000\000\n=\000\000\000\000\n=\000\000\000\000\000\000\021\242\008z\022\014\000\000\000\000\000\000\000\000\022\026\n=\000\000\000\000\000\000\008\130\n=\000\000\n=\000\000\000\000\n=\000\000\000\000\000\000\000\000\000\000\000\000\0222\n=\000\000\000\000\n=\000\000\000\000\008\146\000\000\000\000\000\000\000\000\022^\000\000\002^\000\000\000\000\002\174\000\000\n=\000\000\008\158\000\000\000\000\n=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002f\000\000\000\000\000\000\002\001\000\000\000\000\000\000\002\001\022~\000\000\000\000\022\206\000\000\002n\000\000\000\000\002\001\002\001\000\000\002\206\002\214\000\000\000\000\022\230\000\000\002\001\000\000\000\000\022\242\002\142\008i\000\000\002v\022\254\002\134\002\001\000}\000\000\000\000\000}\000\000\023\n\000\000\000\000\023\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002f\002\150\000\000\002\001\000}\023\206\000\000\000\000\000}\000\000\023\230\000\000\000\000\002\001\002n\000\000\000\000\000}\000}\000\000\000}\000}\000\000\000\000\000\000\000\000\000}\000\000\000\000\000\000\002\142\000\000\000\000\002v\000\000\002\134\000}\000\000\000\000\002\158\000\000\000\000\002\001\002\001\000\000\000\000\002~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\150\000\000\000}\002\001\000\000\000\000\002\001\002\001\002\001\002\001\000\000\000\000\000}\000\000\000\000\002\001\002\001\000\000\002\222\002\166\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\158\000\000\000\000\000}\000}\000\000\000\000\002~\000\000\000\000\000\000\000\000\000e\000\000\000\000\000e\000\000\000\000\000\000\000\000\000}\000\000\000\000\000}\000}\000}\000}\000\000\000\000\000\000\000e\000\000\000}\000}\000e\000}\002\166\000}\000e\000\000\000\000\000\000\000\000\000\000\002n\000\000\000\000\000e\000e\000\000\000e\000e\000\000\000\000\000\000\000\000\000e\000\000\000\000\000\000\000e\000\000\000\000\002v\000\000\002\134\000e\000]\000\000\000\000\000]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000]\000e\000\000\000e\000]\000\000\000\000\000\000\000]\000\000\000\000\000\000\000\000\000e\000]\000\000\000\000\000]\000]\000\000\000]\000]\000\000\000\000\000\000\000\000\000]\000\000\000\000\000\000\000]\000\000\000\000\002v\000\000\000]\000]\000\000\000\000\000e\000\000\000\000\000e\000e\000\000\000\000\002~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000]\000\000\000]\000e\000\000\000\000\000e\000e\000e\000e\000\000\000\000\000]\000\000\000\000\000e\000e\000\000\000e\000e\000e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000]\000\000\000\000\000]\000]\000\000\000\000\002~\000\000\000\000\000\000\000\000\000a\000\000\000\000\000a\000\000\000\000\000\000\000\000\000]\000\000\000\000\000]\000]\000]\000]\000\000\000\000\000\000\000a\000\000\000]\000]\000a\000]\000]\000]\000a\000\000\000\000\000\000\000\000\000\000\000a\000\000\000\000\000a\000a\000\000\000a\000a\000\000\000\000\000\000\000\000\000a\000\000\000\000\000\000\000a\000\000\000\000\002v\000\000\000a\000a\000q\000\000\000\000\000q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002f\000a\000\000\000a\000q\000\000\000\000\000\000\000q\000\000\000\000\000\000\000\000\000a\002n\000\000\000\000\000q\000q\000\000\000q\000q\000\000\000\000\000\000\000\000\000q\000\000\000\000\000\000\000q\000\000\000\000\002v\000\000\002\134\000q\000\000\000\000\000a\000\000\000\000\000a\000a\000\000\000\000\002~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\150\000\000\000q\000a\000\000\000\000\000a\000a\000a\000a\000\000\000\000\000q\000\000\000\000\000a\000a\000\000\000a\000a\000a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000q\000\000\000\000\000q\000q\000\000\000\000\002~\000\000\000\000\000\000\000\000\000i\000\000\000\000\000i\000\000\000\000\000\000\000\000\000q\000\000\000\000\000q\000q\000q\000q\000\000\000\000\000\000\002f\000\000\000q\000q\000i\000q\000q\000q\000i\000\000\000\000\000\000\000\000\000\000\002n\000\000\000\000\000i\000i\000\000\000i\000i\000\000\000\000\000\000\000\000\000i\000\000\000\000\000\000\000i\000\000\000\000\002v\000\000\002\134\000i\000m\000\000\000\000\000m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002f\000i\000\000\000i\000m\000\000\000\000\000\000\000m\000\000\000\000\000\000\000\000\000i\002n\000\000\000\000\000m\000m\000\000\000m\000m\000\000\000\000\000\000\000\000\000m\000\000\000\000\000\000\000m\000\000\000\000\002v\000\000\002\134\000m\000\000\000\000\000i\000\000\000\000\000i\000i\000\000\000\000\002~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\150\000\000\000m\000i\000\000\000\000\000i\000i\000i\000i\000\000\000\000\000m\000\000\000\000\000i\000i\000\000\000i\000i\000i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000m\000\000\000\000\000m\000m\000\000\000\000\002~\000\000\000\000\000\000\000\000\000u\000\000\000\000\000u\000\000\000\000\000\000\000\000\000m\000\000\000\000\000m\000m\000m\000m\000\000\000\000\000\000\002f\000\000\000m\000m\000u\000m\000m\000m\000u\000\000\000\000\000\000\000\000\000\000\002n\000\000\000\000\000u\000u\000\000\000u\000u\000\000\000\000\000\000\000\000\000u\000\000\000\000\000\000\002\142\000\000\000\000\002v\000\000\002\134\000u\002^\000\000\000\000\000\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002f\002\150\000\000\000u\000\133\000\000\000\000\000\000\000\133\000\000\000\000\000\000\000\000\000u\002n\000\000\000\000\000\133\000\133\000\000\000\133\002\214\000\000\000\000\000\000\000\000\000\133\000\000\000\000\000\000\002\142\000\000\000\000\002v\000\000\002\134\000\133\000\000\000\000\002\158\000\000\000\000\000u\000u\000\000\000\000\002~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\150\000\000\000\133\000u\000\000\000\000\000u\000u\000u\000u\000\000\000\000\000\133\000\000\000\000\000u\000u\000\000\000u\000u\000u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\158\000\000\000\000\000\133\000\133\000\000\000\000\002~\000\000\000\000\000\000\000\000\002^\000\000\000\000\000y\000\000\000\000\000\000\000\000\000\133\000\000\000\000\000\133\000\133\000\133\000\133\000\000\000\000\000\000\002f\000\000\000\133\000\133\000y\002\222\002\166\000\133\000y\000\000\000\000\000\000\000\000\000\000\002n\000\000\000\000\000y\000y\000\000\000y\000y\000\000\000\000\000\000\000\000\000y\000\000\000\000\000\000\002\142\000\000\000\000\002v\000\000\002\134\000y\002^\000\000\000\000\000\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002f\002\150\000\000\000y\000\129\000\000\000\000\000\000\000\129\000\000\000\000\000\000\000\000\000y\002n\000\000\000\000\000\129\000\129\000\000\000\129\002\214\000\000\000\000\000\000\000\000\000\129\000\000\000\000\000\000\002\142\000\000\000\000\002v\000\000\002\134\000\129\000\000\000\000\002\158\000\000\000\000\000y\000y\000\000\000\000\002~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\150\000\000\000\129\000y\000\000\000\000\000y\000y\000y\000y\000\000\000\000\000\129\000\000\000\000\000y\000y\000\000\000y\002\166\000y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\158\000\000\000\000\000\129\000\129\014J\000\000\002~\000\000\000\000\004=\000\000\004=\000\000\000\000\004=\000\000\000\000\000\000\000\000\000\129\000\000\000\000\000\129\000\129\000\129\000\129\000\000\000\000\000\000\004=\000\000\000\129\000\129\000\000\000\129\002\166\000\129\000\000\004=\004=\000\000\000\000\004=\004=\000\000\000\000\000\000\000\000\004=\000\000\004=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004=\004=\000\000\000\000\004=\004=\004=\000\000\004=\004=\000\000\004=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004=\004=\000\000\000\000\000\000\000\000\004=\000\000\000\000\004=\000\000\000\000\000\000\000\000\000\000\001\142\000\000\013f\004=\000\000\013j\000\000\000\000\000\000\000\000\000\000\004=\000\000\004=\000\000\004=\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\004=\000\000\000\000\000\000\013n\013\194\004=\000\000\014*\014B\000\000\000\000\004=\000\000\001\194\004=\001\198\000\000\000\000\000\000\000\000\004=\000\000\000\000\013\142\001\206\000\000\000\000\013\146\012B\001\218\000\000\013\150\013\154\000\000\013\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\154\013\162\000\000\000\000\000\000\000\000\013\166\000\000\000\000\001\n\000\000\000\000\000\000\000\000\000\000\001\142\000\000\013f\013\174\000\000\013j\000\000\000\000\000\000\000\000\000\000\005\241\000\000\014F\000\000\014b\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\013\178\000\000\000\000\000\000\013n\013\194\013\182\000\000\014*\014B\000\000\000\000\015>\000\000\001\194\013\186\001\198\000\000\000\000\000\000\000\000\002\n\000\000\000\000\013\142\001\206\000\000\000\000\013\146\012B\001\218\000\000\013\150\013\154\000\000\013\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\154\013\162\000\000\000\000\000\000\000\000\013\166\000\000\000\000\001\n\000\000\000\000\000\000\000\000\000\000\001\142\000\000\013f\013\174\000\000\013j\000\000\000\000\000\000\000\000\000\000\005\241\000\000\014F\000\000\014b\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\013\178\000\000\000\000\000\000\013n\013\194\013\182\000\000\014*\014B\000\000\000\000\014j\000\000\001\194\013\186\001\198\000\000\000\000\000\000\000\000\002\n\000\000\000\000\013\142\001\206\000\000\000\000\013\146\012B\001\218\000\000\013\150\013\154\000\000\013\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\154\013\162\000\000\000\000\000\000\000\000\013\166\000\000\000\000\001\n\000\000\000\000\000\000\000\000\000\000\001\142\000\000\013f\013\174\000\000\013j\000\000\000\000\000\000\000\000\000\000\005\241\000\000\014F\000\000\014b\000\000\000\000\000\000\000\000\001\154\000\000\000\000\000\000\000\000\013\178\000\000\000\000\000\000\013n\013\194\013\182\000\000\014*\014B\000\000\000\000\005]\000\000\001\194\013\186\001\198\000\000\000\000\000\000\000\000\002\n\000\000\000\000\013\142\001\206\000\000\000\000\013\146\012B\001\218\000\000\013\150\013\154\000\000\013\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\154\013\162\000\000\000\000\000\000\000\000\013\166\000\000\000\000\001\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\241\000\000\014F\003!\014b\000N\003!\000V\000\000\000f\003!\000\000\003!\000\000\013\178\000\000\000n\003!\003!\000\000\013\182\000\000\000\000\000\000\000\000\000\000\001\189\000\000\000\000\013\186\000\000\000\000\000\000\000\000\000\000\002\n\000\000\000\000\000\000\000\000\000v\003!\000\000\000\000\000\000\003!\0006\000:\000J\000\142\000\000\000\146\000\000\000\150\000\218\000\000\000\226\000\000\000\242\000\000\000\250\003!\001\002\001\026\001\"\001&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003!\000\134\000\000\000\000\000\000\001.\000\000\000\000\003!\000\000\000\000\000\000\003!\003!\000\000\000\000\0016\000\000\000\000\000\000\000\000\000\000\003!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\029\003!\000\154\003\029\000\162\001F\000\178\003\029\000\000\003\029\000\000\003!\000\000\000\186\003\029\003\029\003!\000\000\000\000\001J\000\000\000\000\000\000\004:\004>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\194\003\029\000\000\000\000\000\000\003\029\000\000\000\000\000\000\000\000\003!\000\000\000\000\003!\003!\000\000\000\000\003!\000\000\000\000\000\000\003\029\003!\003!\000\000\000\000\000\000\003!\000\000\000\000\000\000\000\000\000\000\003\029\000\210\000\000\000\000\000\000\000\000\000\000\000\000\003\029\004B\000\000\000\000\003\029\003\029\000\000\000\000\000\000\000\000\001\161\000\000\000\000\001\161\003\029\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003M\000\000\003\029\000\000\000\000\000\000\001\161\000\000\000\000\000\000\001\161\000\000\003\029\000\000\001\161\000\000\000\000\003\029\000\000\000\000\001\161\000\000\000\000\001\161\001\161\000\000\001\161\001\161\000\000\000\000\000\000\000\000\001\161\000\000\000\000\000\000\001\161\000\000\000\000\001\161\000\000\001\161\001\161\000\000\000\000\000\000\000\000\000\000\003\029\000\000\000\000\003\029\003\029\000\000\000\000\003\029\000\000\000\000\000\000\000\000\003\029\003\029\001\161\000\000\001\161\003\029\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\161\000\000\000\000\000\000\0006\000:\000J\000\142\007\162\000\146\n*\000\150\000\218\n.\000\226\000\000\000\242\000\000\000\250\n2\001\002\001\026\001\"\001&\n6\000\000\001\161\011\026\000\000\001\161\000\000\000\000\000\000\001\161\000\000\001\142\001.\013f\000\000\000\000\013j\000\000\000\000\000\000\000\000\000\000\000\000\0016\000\000\001\161\000\000\001\161\000\000\000\000\000\000\001\154\000\000\011\"\001\161\001\161\000\000\001\161\001\161\001\161\013n\013\194\000\000\001F\014*\014B\000\000\000\000\000\000\001R\001\194\000\000\001\198\000\000\000\000\000\000\000\000\001J\000\000\000\000\013\142\001\206\000\000\000\000\013\146\012B\001\218\000\000\013\150\013\154\000\000\013\158\000\000\012F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\154\013\162\000\000\000\000\000\000\000\000\013\166\000\000\000\000\001\n\000\000\000\000\001\n\000\000\000\000\001\142\000\000\001\146\013\174\000\000\001\150\000\000\000\000\000\000\000\000\000\000\005\241\000\000\000\000\011\218\014b\001V\000\000\000\000\000\000\001\154\000\000\000\000\001\158\000\000\013\178\013B\000\000\000\000\001\174\001\178\013\182\001\186\000\000\013b\000\000\000\000\001\201\000\000\001\194\013\186\001\198\000\000\000\000\000\000\000\000\002\n\000\000\001\137\001\202\001\206\001\137\014R\001\210\001\214\001\218\000\000\001\222\001\226\000\000\001\230\000\000\000\000\000\000\000\000\000\000\001\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\137\000\000\001\234\000\000\000\000\000\000\001\137\001\238\000\000\000\000\001\n\000\000\001\137\001\137\000\000\000\000\000\000\000\000\000\000\001\246\000\000\013\169\001\137\000\000\013\169\001\137\000\000\001\137\001\137\001\250\008y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\169\000\000\001\254\000\000\013\169\000\000\000\000\005\146\002\002\001\137\000\000\001\137\000\000\008y\013\169\000\000\000\000\002\006\013\169\000\000\013\169\013\169\000\000\002\n\005\154\000\000\000\000\005\166\000\000\000\000\013\169\000\000\000\000\013\169\000\000\013\169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\137\0026\000\000\001\137\001\137\000\000\000\000\001\137\000\000\013\169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\137\013\169\000\000\001\137\001\137\000\000\001\137\000\000\005\178\000\000\000\000\002\242\001\137\001\137\000\000\001\137\001\137\001\137\000\000\000\000\008B\005\201\000\000\000\000\000\000\000\000\000\000\013\169\013\169\000\000\013\169\000\000\005\182\005\201\013\169\000\000\000\000\000\000\t\018\005\201\000\000\005\201\005\190\005\201\000\000\000\000\tV\005\201\005\201\000\000\000\000\005\201\013\169\005\201\t\150\005\201\005\201\000\000\013\169\005\201\005\201\005\201\013\169\013\169\013\169\000\000\005\201\005\201\000\000\005\201\000\000\005\201\000\000\000\000\005\201\005\201\000\000\005\201\005\201\005\201\000\000\000\000\005\201\000>\005\201\000\000\005\201\005\201\000\000\000\000\005\201\000\000\005\201\000\000\005\201\005\201\t\234\000\000\nM\000\000\005\201\000>\000\000\005\201\n\022\005\201\000\000\005\201\005\201\000>\005\201\005\201\000\000\005\201\000\000\000\000\005\201\000>\000\000\000\000\000\000\005\201\005\201\nM\000\000\005\201\000\000\005\201\005\201\005\201\000\000\005\201\005\201\005\201\005\201\000\000\005\201\000\000\000\000\000\000\005\201\005\201\000\000\005\201\005\201\005\201\005\201\005\201\005\201\005\201\005\201\000\000\005\201\005\201\005\201\005\201\005\201\005\201\005\201\000\000\005\201\005\201\005\201\005\201\000\000\005\201\005\201\000\000\005\201\005\201\000\000\000\000\011N\000\000\005\201\011\158\005\201\005\201\000\000\000\000\005\201\005\201\nM\000\000\005\201\000\000\000\000\000\000\005\201\005\201\011V\000\000\005\201\000\000\002\017\000\000\005\201\005\201\002\017\000\000\000\000\000\000\000\000\000\000\011^\000\000\000\000\002\017\002\017\000\000\011\174\011\182\000\000\000\000\000\000\000\000\002\017\000\000\001%\000\000\011~\001%\000\000\011f\000\000\011v\002\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011V\000\000\000\000\000\000\001%\000\000\000\000\000\000\001%\000\000\011\134\000\000\002\017\000\000\011^\000\000\000\000\001%\001%\000\000\001%\001%\002\017\000\000\000\000\000\000\001%\000\000\000\000\000\000\011~\000\000\000\000\011f\000\000\011v\001%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\142\000\000\000\000\002\017\000\000\000\000\000\000\011n\011\134\000\000\001%\000\000\001\013\000\000\000\000\001\013\000\000\000\000\000\000\000\000\001%\000\000\000\000\002\017\000\000\002\017\000\000\000\000\000\000\000\000\001\013\000\000\002\017\002\017\001\013\011\190\011\150\002\017\001\013\000\000\000\000\000\000\000\000\000\000\011^\000\000\011\142\001\013\001\013\001%\001\013\001\013\000\000\011n\000\000\000\000\001\013\000\000\001\005\000\000\001\013\001\005\000\000\011f\000\000\011v\001\013\000\000\000\000\001%\000\000\001%\000\000\000\000\000\000\000\000\001\005\000\000\001%\001%\001\005\001%\011\150\001%\001\005\000\000\001\013\000\000\001\013\000\000\001\005\000\000\000\000\001\005\001\005\000\000\001\005\001\005\001\013\000\000\000\000\000\000\001\005\000\000\000\000\000\000\001\005\000\000\000\000\011f\000\000\001\005\001\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\013\000\000\000\000\001\013\000\000\000\000\000\000\011n\001\005\000\000\001\005\000\000\001\t\000\000\000\000\001\t\000\000\000\000\000\000\000\000\001\005\000\000\000\000\001\013\000\000\001\013\000\000\000\000\000\000\000\000\001\t\000\000\001\013\001\013\001\t\001\013\001\013\001\013\001\t\000\000\000\000\000\000\000\000\000\000\001\t\000\000\001\005\001\t\001\t\001\005\001\t\001\t\000\000\011n\000\000\000\000\001\t\000\000\001\025\000\000\001\t\001\025\000\000\011f\000\000\001\t\001\t\000\000\000\000\001\005\000\000\001\005\000\000\000\000\000\000\000\000\011V\000\000\001\005\001\005\001\025\001\005\001\005\001\005\001\025\000\000\001\t\000\000\001\t\000\000\011^\000\000\000\000\001\025\001\025\000\000\001\025\001\025\001\t\000\000\000\000\000\000\001\025\000\000\000\000\000\000\001\025\000\000\000\000\011f\000\000\011v\001\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\t\000\000\000\000\001\t\000\000\000\000\000\000\011n\011\134\000\000\001\025\000\000\001\017\000\000\000\000\001\017\000\000\000\000\000\000\000\000\001\025\000\000\000\000\001\t\000\000\001\t\000\000\000\000\000\000\000\000\011V\000\000\001\t\001\t\001\017\001\t\001\t\001\t\001\017\000\000\000\000\000\000\000\000\000\000\011^\000\000\001\025\001\017\001\017\001\025\001\017\001\017\000\000\011n\000\000\000\000\001\017\000\000\001\021\000\000\001\017\001\021\000\000\011f\000\000\011v\001\017\000\000\000\000\001\025\000\000\001\025\000\000\000\000\000\000\000\000\011V\000\000\001\025\001\025\001\021\001\025\001\025\001\025\001\021\000\000\001\017\000\000\001\017\000\000\011^\000\000\000\000\001\021\001\021\000\000\001\021\001\021\001\017\000\000\000\000\000\000\001\021\000\000\000\000\000\000\001\021\000\000\000\000\011f\000\000\011v\001\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\017\000\000\000\000\001\017\000\000\000\000\000\000\011n\011\134\000\000\001\021\000\000\001\029\000\000\000\000\001\029\000\000\000\000\000\000\000\000\001\021\000\000\000\000\001\017\000\000\001\017\000\000\000\000\000\000\000\000\011V\000\000\001\017\001\017\001\029\001\017\001\017\001\017\001\029\000\000\000\000\000\000\000\000\000\000\011^\000\000\001\021\001\029\001\029\001\021\001\029\001\029\000\000\011n\000\000\000\000\001\029\000\000\011N\000\000\011~\001-\000\000\011f\000\000\011v\001\029\000\000\000\000\001\021\000\000\001\021\000\000\000\000\000\000\000\000\011V\000\000\001\021\001\021\001-\001\021\001\021\001\021\001-\000\000\011\134\000\000\001\029\000\000\011^\000\000\000\000\001-\001-\000\000\001-\011\182\001\029\000\000\000\000\000\000\001-\000\000\000\000\000\000\011~\000\000\000\000\011f\000\000\011v\001-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\142\000\000\000\000\001\029\000\000\000\000\000\000\011n\011\134\000\000\001-\000\000\011N\000\000\000\000\001!\000\000\000\000\000\000\000\000\001-\000\000\000\000\001\029\000\000\001\029\000\000\000\000\000\000\000\000\011V\000\000\001\029\001\029\001!\001\029\001\029\001\029\001!\000\000\000\000\000\000\000\000\000\000\011^\000\000\011\142\001!\001!\001-\001!\001!\000\000\011n\000\000\000\000\001!\000\000\011N\000\000\011~\001)\000\000\011f\000\000\011v\001!\000\000\000\000\001-\000\000\001-\000\000\000\000\000\000\000\000\011V\000\000\001-\001-\001)\011\190\011\150\001-\001)\000\000\011\134\000\000\001!\000\000\011^\000\000\000\000\001)\001)\000\000\001)\011\182\001!\000\000\000\000\000\000\001)\000\000\000\000\000\000\011~\000\000\000\000\011f\000\000\011v\001)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\142\000\000\000\000\001!\000\000\000\000\000\000\011n\011\134\000\000\001)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001)\000\000\000\000\001!\000\000\001!\000\000\000\000\000\000\000\000\000\000\000\000\001!\001!\000\000\001!\011\150\001!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\142\011\142\001\146\000\000\001)\001\150\000\000\000\000\011n\000\000\000\000\000\000\000\000\000\000\008y\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\001\158\001)\000\000\001)\000\000\000\000\001\174\001\178\000\000\001\186\001)\001)\000\000\001)\011\150\001)\001\194\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\202\001\206\000\000\000\000\001\210\001\214\001\218\000\000\001\222\001\226\001\142\001\230\001\146\000\000\000\000\001\150\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0186\000\000\000\000\001\234\000\000\000\000\001\154\000\000\001\238\001\158\000\000\001\n\000\000\000\000\000\000\001\174\001\178\000\000\001\186\000\000\001\246\000\000\000\000\000\000\000\000\001\194\000\000\001\198\000\000\000\000\001\250\000\000\000\000\000\000\000\000\001\202\001\206\000\000\000\000\001\210\001\214\001\218\001\254\001\222\001\226\000\000\001\230\000\000\002\002\020\202\000\000\008y\000\000\000\000\000\000\000\000\000\000\002\006\000\000\000\000\000\000\020\206\001\234\002\n\000\000\000\000\000\000\001\238\000\000\020\210\001\n\020\214\000\000\000\000\000\000\000\000\020\218\000\000\000\000\001\246\000\000\020\222\000\000\000\000\020\234\000\000\000\000\000\000\020\238\001\250\000\000\001\142\000\000\001\146\020\242\000\000\001\150\000\000\000\000\000\000\000\000\001\254\000\000\000\000\000\000\023\018\000\000\002\002\n}\000\000\020\246\001\154\000\000\000\000\001\158\000\000\002\006\000\000\000\000\000\000\001\174\007\030\002\n\001\186\000\000\000\000\000\000\000\000\000\000\000\000\001\194\000\000\001\198\n}\000\000\020\250\000\000\000\000\020\254\000\000\001\202\001\206\000\000\000\000\001\210\001\214\001\218\000\000\001\222\001\226\021\002\001\230\000\000\000\000\000\000\021\006\001\n\021\n\000\000\021\014\021\018\000\000\021\022\000\000\000\000\000\000\000\000\001\234\021\026\000\000\000\000\021\030\001\238\000\000\000\000\001\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\246\000\000\021\"\000\000\000\000\000\000\021&\021*\n}\001\142\001\250\001\146\000\000\000\000\001\150\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\254\000\000\000\000\000\000\000\000\000\000\002\002\001\154\000\000\000\000\001\158\000\000\000\000\000\000\000\000\002\006\001\174\001\242\000\000\001\186\000\000\002\n\000\000\000\000\000\000\000\000\001\194\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\202\001\206\000\000\000\000\001\210\001\214\001\218\000\000\001\222\001\226\000\000\001\230\000\000\000\000\000\000\006\006\000\000\000\000\000\000\000\000\0045\000\000\0045\000\000\000\000\0045\000\000\001\234\000\000\000\000\000\000\000\000\001\238\000\000\000\000\001\n\000\000\000\000\000\000\000\000\0045\000\000\000\000\0045\001\246\000\000\000\000\000\000\000\000\0045\0045\000\000\0045\000\000\001\250\000\000\000\000\000\000\000\000\0045\000\000\0045\000\000\000\000\000\000\000\000\001\254\000\000\000\000\0045\0045\020\202\002\002\0045\0045\0045\000\000\0045\0045\000\000\0045\002\006\000\000\020\206\000\000\000\000\000\000\002\n\000\000\000\000\000\000\020\210\000\000\020\214\000\000\000\000\0045\000\000\020\218\000\000\000\000\0045\000\000\020\222\0045\000\000\020\234\000\000\000\000\000\000\020\238\000\000\000\000\0045\000\000\014\150\020\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022:\000\000\000\000\000\000\000\000\020\246\014\158\000\000\0045\000\000\000\000\000\000\000\000\000\000\0045\000\000\000\000\000\000\000\000\000\000\014\166\000\000\000\000\0045\000\000\000\000\014\230\014\238\n}\0045\020\250\000\000\000\000\020\254\000\000\000\000\014\198\000\000\000\000\014\174\000\000\014\190\000\000\000\000\000\000\021\002\000\000\000\000\000\000\000\000\021\006\001\n\021\n\000\000\021\014\021\018\020\202\021\022\000\000\000\000\000\000\000\000\014\206\021\026\000\000\000\000\021\030\000\000\020\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\210\000\000\020\214\000\000\000\000\021\"\000\000\020\218\000\000\021&\021*\n}\020\222\000\000\000\000\020\234\000\000\000\000\000\000\020\238\000\000\000\000\000\000\000\000\014\214\020\242\000\000\000\000\000\000\000\000\000\000\014\182\000\000\000\000\000\000\000\000\024:\000\000\000\000\n\169\000\000\020\246\005\201\000\000\005E\005\201\000Z\000\000\000\000\005\201\000\000\005\201\000\000\000\000\000\000\000\000\005\201\005\201\000\000\014\246\014\222\000\000\000\000\000\000\n\169\000\000\020\250\000\000\005\201\020\254\005\201\005\201\000\166\005\201\000\230\005\201\000\000\005\201\000\000\005\201\005\201\021\002\005\201\005\201\005\201\005\201\021\006\001\n\021\n\000\000\021\014\021\018\000\000\021\022\000\000\000\000\000\000\000\000\000\000\021\026\005\201\000\000\021\030\000\000\004\006\000\000\005\201\000\000\005\201\000>\005\201\000\000\005\201\000\000\000\000\000\000\000\000\021\"\000\000\000\000\005\201\021&\021*\n\169\005\201\005\201\005\201\000\000\005\201\000\000\004\218\000\000\007N\000\000\005\201\000>\000\000\000>\005\201\000\000\005\201\000\000\000\000\000\000\005\201\000\000\005\201\000\000\005\201\000\000\005\201\005\201\005\201\005\201\005\201\000\000\000\000\000\000\000\000\005\201\005\201\000\000\005\201\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\201\000\000\005\201\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\201\000\000\005\201\000\000\000\000\005\201\000\000\005\201\000\000\000\000\005\201\000\000\000\000\005\201\005\201\000\000\000\000\005\201\000\000\000\000\000\000\000\000\005\201\005\201\000\000\000\000\000\000\005\201\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\201\000\000\005\201\005\201\005\201\005\201\005\201\005\201\000\000\005\201\000\000\000\000\005\201\005\201\005\201\005\201\001\142\005\201\001\162\005\201\000\000\001\166\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\000\000\000\000\001\158\000\000\000\000\000\000\000\000\000\000\001\170\001\190\000\000\001\186\000\000\000\000\000\000\000\000\000\000\000\000\001\194\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005R\001\206\000\000\000\000\005V\001\214\001\218\000\000\005Z\005^\001\142\005b\001\162\000\000\000\000\001\166\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005f\000\000\000\000\001\154\000\000\005j\001\158\000\000\001\n\000\000\000\000\000\000\001\170\007\006\000\000\001\186\000\000\005r\000\000\000\000\000\000\000\000\001\194\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005R\001\206\000\000\000\000\005V\001\214\001\218\005v\005Z\005^\000\000\005b\000\000\005z\000\000\000\000\005\201\000\000\000\000\005\201\003.\000\000\005~\005\201\000\000\005\201\000\000\005f\002\n\000\000\005\201\005\201\005j\005\201\000\000\001\n\005\201\003r\000\000\000\000\005\201\000\000\005\201\000\000\005r\000\000\005\201\005\201\005\201\005\201\003\178\000\000\000\000\005\201\005\201\005\201\000\000\000\000\005\201\000\000\005\201\005\201\000\000\000\000\000\000\000\000\005v\000\000\000\000\000\000\000\000\005\201\005z\000\000\005\201\005\201\000\000\000\000\000\000\000\000\000\000\005~\000\000\000>\005\201\000\000\005\201\002\n\005\201\000\000\000\000\005\201\000\000\000\000\005\201\000\000\000\000\000\000\005\201\005\201\000>\000\000\000\000\005\201\005\201\000\000\000\000\000\000\005\201\000\000\000\000\005\201\000\000\000>\000\000\005\201\005\201\000\000\005\201\000\000\000\000\000\000\000\181\000\000\005\201\005\201\000\000\000\000\005\201\005\201\000\000\000\000\000\000\005\201\000\000\005\201\000\000\000\000\005\201\000\000\014\158\000\000\000\000\000\000\000\000\005\201\000\000\000\000\005\201\000\000\005\201\000\000\000\000\000\000\014\166\000\000\000\000\000\000\005\201\000\000\000\181\000\181\000\000\005\201\005\201\000\000\000\000\005\201\005\201\000\000\014\198\005\201\000\000\014\174\000\000\014\190\005\201\005\201\000\000\000\000\000\000\005\201\000\000\000\000\005\201\005\201\000\000\000\000\005\201\000\000\001\142\000\000\001\162\005\201\005\201\001\166\014\206\005\201\005\201\000\000\000\000\005\201\000\000\000\000\000\000\000\000\005\201\005\201\000\000\000\000\001\154\005\201\000\000\001\158\000\000\000\000\000\000\000\000\000\000\001\170\005n\000\000\001\186\000\000\000\000\000\000\000\000\000\000\000\000\001\194\000\000\001\198\000\000\000\000\014\214\000\000\000\000\000\000\000\000\005R\001\206\014\182\000\000\005V\001\214\001\218\000\000\005Z\005^\000\000\005b\000\000\000\000\000\000\000\181\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005f\000\000\000\000\000\181\014\222\005j\000\000\000\000\001\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005v\000\000\000\000\000\000\000\000\000\000\005z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005~\000\000\0006\000:\000J\000\142\002\n\000\146\n*\000\150\000\218\n.\000\226\000\000\000\242\024\186\000\250\n2\001\002\001\026\001\"\001&\n6\024\190\000\000\000\000\000\000\000\000\001\142\000\000\nf\000\000\000\000\nj\001.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0016\000\000\000\000\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nn\011\198\000\000\000\000\000\000\000\000\000\000\000\000\001F\000\000\001\194\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\134\001\206\001J\000\000\n\138\001\214\001\218\000\000\n\142\n\146\001\142\n\150\nf\000\000\000\000\nj\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\154\n\158\000\000\000\000\001\154\000\000\n\162\000\000\000\000\001\n\000\000\000\000\000\000\nn\nr\000\000\000\000\001\n\n\170\000\000\000\000\000\000\004\133\001\194\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\134\001\206\000\000\000\000\n\138\001\214\001\218\n\174\n\142\n\146\001\142\n\150\nf\n\178\000\000\nj\000\000\000\000\000\000\000\000\000\000\000\000\n\182\000\000\000\000\000\000\n\154\n\158\002\n\000\000\001\154\000\000\n\162\000\000\000\000\001\n\000\000\000\000\000\000\nn\n\166\000\000\000\000\000\000\n\170\000\000\000\000\000\000\000\000\001\194\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\134\001\206\000\000\000\000\n\138\001\214\001\218\n\174\n\142\n\146\001\142\n\150\013f\n\178\000\000\013j\000\000\000\000\000\000\000\000\000\000\000\000\n\182\000\000\000\000\000\000\n\154\n\158\002\n\000\000\001\154\000\000\n\162\000\000\000\000\001\n\000\000\000\000\000\000\013n\013z\000\000\000\000\000\000\n\170\000\000\000\000\000\000\000\000\001\194\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\142\001\206\000\000\000\000\013\146\001\214\001\218\n\174\013\150\013\154\001\142\013\158\013f\n\178\000\000\013j\000\000\000\000\000\000\000\000\000\000\000\000\n\182\000\000\000\000\000\000\n\154\013\162\002\n\000\000\001\154\000\000\013\166\000\000\000\000\001\n\000\000\000\000\000\000\013n\013\170\000\000\000\000\000\000\013\174\000\000\000\000\000\000\000\000\001\194\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\142\001\206\000\000\000\000\013\146\001\214\001\218\013\178\013\150\013\154\001\142\013\158\013f\013\182\000\000\013j\000\000\000\000\000\000\000\000\000\000\000\000\013\186\000\000\000\000\000\000\n\154\013\162\002\n\000\000\001\154\000\000\013\166\000\000\000\000\001\n\000\000\000\000\000\000\013n\013\194\000\000\000\000\000\000\013\174\000\000\000\000\000\000\000\000\001\194\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\142\001\206\000\000\000\000\013\146\001\214\001\218\013\178\013\150\013\154\000\000\013\158\000\000\013\182\000\000\000\000\000\000\000\000\008q\000\000\000\000\000\000\013\186\000\000\000\000\000\000\n\154\013\162\002\n\000\000\008q\000\000\013\166\000\000\000\000\001\n\000\000\000\000\008q\000\000\008q\000\000\000\000\000\000\013\174\008q\000\000\000\000\000\000\000\000\008q\000\000\000\000\008q\000\000\000\000\023\014\008q\021\150\000\000\000\000\000\000\000\000\008q\000\000\000\000\013\178\000\000\020\206\000\000\000\000\000\000\013\182\000\000\000\000\000\000\020\210\000\000\020\214\008q\000\000\013\186\000\000\020\218\000\000\000\000\000\000\002\n\020\222\000\000\000\000\020\234\000\000\000\000\000\000\020\238\000\000\000\000\000\000\000\000\000\000\020\242\000\000\000\000\008q\000\000\000\000\008q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\246\023.\008q\000\000\000\000\000\000\000\000\008q\008q\008q\000\000\008q\008q\000\000\008q\000\000\000\000\000\000\000\000\000\000\008q\000\000\000\000\008q\000\000\020\250\000\000\000\000\020\254\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\008q\000\000\021\002\000\000\008q\008q\000\000\021\006\001\n\021\n\000\000\021\014\021\018\007\229\021\022\000\000\000\000\000\000\000\000\000\000\021\026\000\000\000\000\021\030\000\000\007\229\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\229\000\000\007\229\000\000\000\000\021\"\000\000\007\229\000\000\021&\021*\000\000\007\229\000\000\000\000\007\229\000\000\022\030\000\000\007\229\000\000\000\000\000\000\000\000\000\000\007\229\000\000\000\000\000\000\020\206\000\000\n*\000\000\000\000\n.\000\000\000\000\020\210\024\206\020\214\n2\007\229\023.\000\000\020\218\n6\024\210\000\000\000\000\020\222\000\000\000\000\020\234\000\000\000\000\000\000\020\238\000\000\000\000\000\000\000\000\000\000\020\242\000\000\000\000\000\000\007\229\000\000\000\000\007\229\000\000\000\000\000\000\016V\000\000\000\000\000\000\000\000\020\246\000\000\000\000\007\229\000\000\000\000\000\000\000\000\007\229\007\229\007\229\016Z\007\229\007\229\000\000\007\229\000\000\000\000\000\000\000\000\000\000\007\229\000\000\000\000\007\229\020\250\000\000\000\000\020\254\000\000\000\000\001\206\000\000\000\000\000\000\015\150\001\218\000\000\000\000\007\229\021\002\000\000\000\000\007\229\007\229\021\006\001\n\021\n\000\000\021\014\021\018\0226\021\022\000\000\000\000\000\000\000\000\000\000\021\026\000\000\000\000\021\030\000\000\020\206\000\000\001\n\000\000\000\000\000\000\000\000\004\153\020\210\000\000\020\214\000\000\000\000\021\"\000\000\020\218\000\000\021&\021*\000\000\020\222\000\000\000\000\020\234\000\000\020\202\000\000\020\238\000\000\000\000\000\000\000\000\000\000\020\242\000\000\000\000\000\000\020\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\210\000\000\020\214\000\000\020\246\008\205\008\205\020\218\000\000\000\000\008\205\000\000\020\222\000\000\000\000\020\234\000\000\000\000\000\000\020\238\000\000\000\000\000\000\000\000\000\000\020\242\000\000\000\000\000\000\020\250\000\000\000\000\020\254\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\210\000\000\000\000\021\002\000\000\000\000\000\000\000\000\021\006\001\n\021\n\000\000\021\014\021\018\000\000\021\022\000\000\000\000\000\000\000\000\000\000\021\026\000\000\000\000\021\030\020\250\000\000\000\000\020\254\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\"\021\002\000\000\000\000\021&\021*\021\006\001\n\021\n\000\000\021\014\021\018\020\202\021\022\000\000\000\000\000\000\000\000\000\000\021\026\000\000\000\000\021\030\000\000\020\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\210\000\000\020\214\000\000\000\000\021\"\000\000\020\218\000\000\021&\021*\000\000\020\222\000\000\000\000\020\234\000\000\000\000\000\000\020\238\000\000\000\000\000\000\000\000\000\000\020\242\000\000\000\000\000\000\000\000\000\000\000\000\004E\004E\004E\004E\000\000\004E\000\000\004E\004E\023\210\004E\000\000\004E\000\000\004E\000\000\004E\004E\004E\004E\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001Z\000\000\000\000\004E\000\000\020\250\000\000\000\000\020\254\000\000\000\000\000\000\000\000\000\000\004E\000\000\000\000\000\000\000\000\000\000\021\002\000\000\000\000\000\000\000\000\021\006\001\n\021\n\000\000\021\014\021\018\000\000\021\022\000\000\004E\000\000\000\000\000\000\021\026\000\000\004E\021\030\000\000\000\000\000\000\000\000\000\000\000\000\004E\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\"\000\000\000\000\000\000\021&\021*\0006\000:\000J\000\142\000\000\000\146\000\000\000\150\000\218\000\000\000\226\000\000\000\242\000\000\000\250\000\000\001\002\001\026\001\"\001&\000\000\0006\000:\000J\000\142\000\000\000\146\004E\000\150\000\218\000\000\000\226\001.\000\242\000\000\000\250\000\000\001\002\001\026\001\"\001&\000\000\000\000\0016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001.\000\000\000\000\001\153\000\000\000\000\001\153\000\000\000\000\000\000\001F\0016\000\000\000\000\000\000\000\000\001R\004E\000\000\000\000\000\000\001\153\000\000\000\000\001J\001\153\000\000\000\000\000\000\000\000\000\000\001F\000\000\000\000\000\000\001\153\000\000\001R\000\000\001\153\000\000\001\153\001\153\000\000\000\000\001J\000\000\000\000\000\000\000\000\000\000\001\153\000\000\000\000\001\153\000\000\001\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\153\000\000\000\000\0006\000:\000J\000\142\001V\000\146\001\n\000\150\000\218\001\153\000\226\000\000\000\242\000\000\000\250\000\000\001\002\001\026\001\"\001&\000\000\000\000\000\000\000\000\000\000\001V\000\000\000\000\012\001\000\000\000\000\000\000\001.\000\000\000\000\001\153\005\226\000\000\001\153\000\000\000\000\000\000\001\153\0016\000\000\000\000\000\000\000\000\000\000\002)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\153\000\000\000\000\001F\000\000\000\000\005\234\000\000\000\000\001R\001\153\001\153\001\153\000\000\000\000\000\000\000\000\001J\000\000\000\000\000\000\025v\004>\0006\000:\000J\000\142\000\000\000\146\000\000\000\150\000\218\000\000\000\226\000\000\000\242\000\000\000\250\000\000\001\002\001\026\001\"\001&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001.\000\000\000\000\001\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0016\000\000\000\000\000\000\000\000\0006\000:\000J\000\142\000\000\000\146\025z\000\150\000\218\000\000\000\226\000\000\000\242\000\000\000\250\001F\001\002\001\026\001\"\001&\006:\000\000\000\000\006\138\000\000\000\000\000\000\003E\000\000\001J\002!\000\000\001.\004:\004>\000\000\000\000\000\000\006B\000\000\000\000\000\000\002\t\0016\000\000\000\000\000\000\000\237\000\000\000\000\000\237\000\000\006J\000\000\000\000\000\000\002\t\000\000\006\154\006\162\000\000\000\000\000\000\001F\000\000\006B\000\000\000\000\006j\000\237\000\000\006R\000\000\006b\000\000\000\000\000\000\001J\000\000\006J\000\000\025v\004>\000\237\000\000\000\237\000\237\000\000\000\000\004J\000\213\000\000\000\000\000\213\006r\006j\000\000\000\000\006R\000\000\006b\000\000\000\000\000\000\000\000\000\000\002\t\000\000\000\213\000\000\000\000\000\000\000\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006r\006J\000\000\000\000\000\000\000\213\000\000\000\213\000\213\000\000\000\000\006z\000\237\000\000\002\t\000\000\025\130\000\213\006Z\000\000\006R\000\000\006b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\t\000\000\006z\000\000\000\000\000\237\000\000\000\213\000\000\006Z\006\170\006\130\002\t\000\000\000\000\000\000\000\000\000\000\000\205\000\213\000\000\000\205\000\000\000\000\000\000\000\000\000\000\000\237\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\205\000\237\006\130\000\237\000\205\000\000\000\000\000\000\000\000\000\213\000\000\000\000\000\213\000\000\000\205\000\000\006Z\000\000\000\205\000\000\000\205\000\205\000\000\000\000\000\000\000\209\000\000\000\000\000\209\000\000\000\205\000\000\000\000\006R\000\213\000\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\209\000\213\000\213\000\213\000\209\000\000\000\000\000\000\000\000\000\225\000\000\000\000\000\225\000\205\000\209\000\000\000\000\000\000\000\209\000\000\000\209\000\209\000\000\000\000\000\000\000\205\000\000\006B\000\000\000\000\000\209\000\225\000\000\006R\000\000\000\209\000\000\000\000\000\000\000\000\000\000\006J\000\000\000\000\000\000\000\225\000\000\000\225\000\225\000\000\000\000\000\205\000\000\000\000\000\205\000\000\000\209\000\225\006Z\000\000\006R\000\000\006b\000\000\000\000\000\000\000\000\000\217\000\209\000\000\000\217\000\000\000\000\000\000\000\000\000\000\000\205\000\000\000\000\000\000\000\000\000\000\000\000\006r\000\000\006B\000\205\000\205\000\205\000\217\000\000\000\000\000\000\000\000\000\209\000\225\000\000\000\209\000\000\006J\000\000\006Z\000\000\000\217\000\000\000\217\000\217\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\217\000\000\000\000\006R\000\209\006b\000\225\000\000\000\000\000\225\000\000\000\000\000\000\006Z\000\209\000\209\000\209\000\221\000\000\000\000\000\221\000\000\000\000\000\000\000\000\000\000\000\217\000\000\000\000\000\000\000\000\000\225\000\000\000\000\000\000\006B\000\000\000\000\000\217\000\221\000\000\000\225\000\225\000\225\000\229\000\000\000\000\000\229\000\000\006J\000\000\000\000\000\000\000\221\000\000\000\221\000\221\000\000\000\000\000\000\000\000\000\000\006B\000\000\000\217\000\221\000\229\000\217\006R\000\000\006b\006Z\000\000\000\000\000\000\000\000\006J\000\000\000\000\000\000\000\229\000\000\000\229\000\229\000\000\000\000\000\000\006:\000\000\000\217\000\245\006r\006j\000\000\000\000\006R\000\000\006b\000\000\000\217\000\217\000\217\000\000\000\221\000\000\006B\000\000\000\000\000\000\000\245\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006r\006J\000\000\000\000\000\000\000\245\000\000\000\245\006\162\000\000\000\000\000\221\000\229\000\000\000\221\000\000\000\000\006j\006Z\000\000\006R\000\000\006b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\221\000\000\006z\000\000\000\000\000\229\000\000\006r\000\000\006Z\000\221\000\221\000\221\000\000\000\000\000\000\000\000\000\000\006:\000\245\000\000\000\233\000\000\000\000\000\000\000\000\000\000\000\229\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006B\000\229\000\229\000\229\000\233\000\000\000\000\000\000\000\000\006z\000\000\000\000\000\245\000\000\006J\000\000\006Z\000\000\000\233\000\000\000\233\000\233\000\000\000\000\000\000\006:\000\000\000\000\000\241\000\000\006j\000\000\000\000\006R\000\245\006b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006B\006\170\006\130\000\245\000\241\000\000\000\000\000\000\000\000\000\157\000\000\000\000\000\000\006r\006J\000\000\000\000\000\000\000\241\000\000\000\241\006\162\000\000\000\000\000\000\000\233\000\000\000\157\000\000\000\000\006j\000\149\000\000\006R\000\000\006b\000\000\000\000\000\000\000\000\000\000\014\166\000\000\000\000\000\000\000\000\000\000\000\157\000\157\000\149\000\000\006z\000\000\000\000\000\233\000\000\006r\000\157\006Z\000\000\014\174\000\000\014\190\000\149\000\000\000\000\000\000\000\000\000\241\000\149\000\149\000\000\000\153\000\000\000\000\000\000\000\233\000\000\000\000\000\149\000\000\000\000\014\174\000\157\000\149\000\000\000\233\006\130\000\233\000\000\000\153\000\000\000\000\000\000\006z\000\000\000\000\000\241\000\000\000\000\000\000\006Z\000\000\000\000\000\153\000\149\000\000\000\000\000\000\000\000\000\153\000\153\000\000\000\000\000\000\000\000\000\169\000\000\000\000\000\241\000\153\000\157\000\000\014\174\000\000\000\153\000\000\000\000\014\182\000\241\006\130\000\241\000\000\000\000\014\158\000\000\000\000\000\000\000\000\000\000\000\000\000\157\000\000\000\149\000\000\000\000\000\153\000\000\014\166\000\000\014\182\000\000\000\000\000\000\000\169\000\169\000\157\000\157\000\000\000\000\000\000\000\000\000\161\000\149\000\169\000\000\000\000\014\174\000\000\014\190\000\165\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\149\000\149\014\158\000\000\000\000\000\000\000\153\000\000\000\000\000\000\014\158\000\000\014\206\014\182\000\000\000\000\014\166\000\000\000\000\000\000\000\000\000\000\000\161\000\161\014\166\000\000\000\153\000\000\000\000\000\000\000\165\000\165\000\161\000\000\000\000\014\174\000\173\014\190\000\000\000\000\000\165\000\153\000\153\014\174\014\150\014\190\000\000\000\000\000\000\000\000\000\169\000\000\000\000\000\000\014\158\000\000\000\000\014\182\000\161\000\000\000\000\014\150\014\158\000\000\000\000\000\000\014\206\000\000\014\166\000\000\000\169\000\000\000\000\000\000\000\173\000\173\014\166\000\000\000\000\014\158\000\000\000\000\000\189\014\238\014\198\000\169\000\169\014\174\000\000\014\190\000\000\000\000\014\198\014\166\000\000\014\174\000\161\014\190\000\000\000\177\000\177\000\000\000\000\014\182\000\165\000\000\000\000\000\000\000\000\014\198\014\206\014\182\014\174\000\000\014\190\000\000\000\161\000\000\014\206\000\000\000\000\000\000\000\000\000\000\000\165\000\000\014\150\000\000\000\000\000\000\000\000\000\161\000\161\000\000\000\000\014\206\000\000\000\000\000\000\000\165\000\165\000\000\000\000\000\000\014\158\000\000\000\000\000\000\014\214\000\000\000\000\000\000\000\000\000\000\000\000\014\182\014\214\000\000\014\166\000\000\000\000\000\000\000\000\014\182\000\185\014\238\000\000\000\000\000\173\000\000\000\000\000\000\000\000\014\214\014\198\000\000\000\189\014\174\000\000\014\190\014\182\000\000\000\000\000\173\000\173\000\000\000\000\000\000\000\000\000\000\000\000\014\246\014\222\000\177\000\000\000\000\000\000\000\000\000\000\000\000\014\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\177\014\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\214\000\000\000\000\000\000\000\000\000\000\000\000\014\182\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\185\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\185\014\222")) let lhs = - (16, "\000\012\000\011\000\n\000\t\000\008\000\007\000\006\000\005\000\004\000\003\000\002\000\001\000\000\001\t\001\t\001\t\001\008\001\008\001\008\001\008\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\007\001\006\001\006\001\006\001\006\001\006\001\006\001\006\001\006\001\006\001\006\001\006\001\006\001\006\001\006\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\005\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\003\001\003\001\003\001\003\001\002\001\001\001\001\001\001\001\000\001\000\001\000\000\255\000\255\000\255\000\254\000\254\000\254\000\253\000\252\000\251\000\250\000\250\000\249\000\249\000\248\000\248\000\247\000\247\000\246\000\246\000\245\000\244\000\244\000\243\000\243\000\242\000\242\000\242\000\241\000\241\000\240\000\239\000\238\000\237\000\236\000\235\000\234\000\233\000\232\000\231\000\230\000\229\000\228\000\227\000\227\000\226\000\226\000\225\000\225\000\224\000\224\000\223\000\223\000\223\000\222\000\222\000\222\000\222\000\222\000\221\000\221\000\221\000\221\000\221\000\220\000\219\000\219\000\219\000\219\000\218\000\218\000\217\000\217\000\216\000\216\000\215\000\215\000\215\000\214\000\214\000\214\000\213\000\213\000\213\000\213\000\212\000\212\000\212\000\212\000\211\000\211\000\211\000\211\000\211\000\211\000\211\000\211\000\211\000\211\000\211\000\211\000\211\000\211\000\211\000\211\000\211\000\211\000\211\000\211\000\210\000\209\000\209\000\208\000\208\000\208\000\207\000\207\000\206\000\206\000\206\000\205\000\205\000\204\000\204\000\204\000\203\000\202\000\201\000\201\000\200\000\200\000\199\000\199\000\198\000\198\000\197\000\197\000\196\000\195\000\194\000\194\000\193\000\193\000\192\000\191\000\191\000\191\000\191\000\190\000\189\000\188\000\188\000\187\000\186\000\186\000\185\000\185\000\185\000\185\000\185\000\184\000\184\000\184\000\184\000\183\000\183\000\183\000\183\000\182\000\182\000\182\000\182\000\181\000\180\000\180\000\179\000\179\000\179\000\178\000\177\000\177\000\177\000\177\000\176\000\175\000\175\000\175\000\175\000\174\000\174\000\174\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\173\000\172\000\172\000\171\000\171\000\170\000\170\000\169\000\169\000\168\000\168\000\168\000\168\000\167\000\167\000\167\000\167\000\166\000\166\000\166\000\166\000\166\000\165\000\164\000\164\000\164\000\163\000\162\000\162\000\161\000\161\000\160\000\160\000\159\000\159\000\158\000\158\000\157\000\157\000\156\000\156\000\156\000\156\000\156\000\156\000\156\000\155\000\154\000\153\000\153\000\152\000\152\000\151\000\151\000\150\000\150\000\149\000\149\000\148\000\148\000\147\000\147\000\146\000\146\000\145\000\145\000\144\000\144\000\143\000\143\000\142\000\142\000\141\000\141\000\140\000\140\000\139\000\139\000\138\000\138\000\137\000\137\000\136\000\136\000\135\000\135\000\134\000\134\000\133\000\133\000\132\000\132\000\131\000\131\000\130\000\130\000\129\000\129\000\128\000\128\000\127\000\127\000~\000~\000}\000}\000|\000|\000{\000{\000z\000z\000y\000y\000x\000w\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000v\000u\000t\000s\000r\000q\000p\000o\000n\000m\000l\000l\000l\000k\000k\000k\000j\000j\000j\000j\000i\000h\000g\000f\000e\000d\000c\000c\000c\000b\000b\000b\000a\000a\000`\000`\000`\000_\000_\000^\000]\000]\000]\000\\\000[\000[\000Z\000Z\000Y\000Y\000X\000X\000W\000W\000V\000V\000U\000U\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000T\000S\000S\000R\000R\000Q\000Q\000P\000P\000P\000P\000P\000O\000O\000N\000N\000N\000N\000M\000L\000K\000K\000K\000J\000J\000J\000I\000I\000I\000I\000I\000I\000H\000H\000H\000H\000H\000G\000G\000G\000G\000G\000G\000G\000F\000F\000F\000F\000F\000F\000F\000E\000E\000E\000E\000E\000E\000E\000D\000D\000D\000D\000D\000D\000D\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000B\000B\000B\000B\000B\000B\000B\000B\000B\000B\000B\000B\000B\000A\000A\000A\000A\000A\000A\000A\000A\000A\000A\000A\000A\000A\000@\000@\000@\000@\000@\000@\000@\000@\000@\000@\000@\000@\000@\000?\000?\000?\000?\000?\000>\000=\000=\000=\000=\000=\000=\000<\000;\000:\0009\0008\0008\0007\0006\0006\0006\0006\0006\0006\0006\0005\0005\0005\0005\0005\0005\0004\0003\0003\0002\0002\0001\0001\0000\0000\000/\000/\000.\000.\000-\000-\000,\000,\000+\000+\000*\000*\000)\000)\000(\000(\000'\000'\000&\000&\000%\000%\000$\000$\000$\000$\000$\000$\000$\000$\000$\000$\000$\000$\000$\000$\000$\000$\000$\000#\000#\000#\000\"\000\"\000\"\000\"\000!\000!\000!\000!\000!\000 \000\031\000\031\000\031\000\030\000\030\000\029\000\028\000\027\000\027\000\027\000\027\000\026\000\026\000\026\000\025\000\025\000\024\000\024\000\024\000\023\000\023\000\023\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\021\000\021\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\019\000\019\000\019\000\019\000\019\000\019\000\019\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\017\000\017\000\017\000\017\000\017\000\017\000\017\000\016\000\016\000\016\000\016\000\016\000\015\000\015\000\014\000\013\000\013\000\013\000\013\000\013") + (16, "\000\012\000\011\000\n\000\t\000\008\000\007\000\006\000\005\000\004\000\003\000\002\000\001\000\000\001\004\001\004\001\004\001\003\001\003\001\003\001\003\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\255\000\254\000\254\000\254\000\254\000\253\000\252\000\252\000\252\000\251\000\251\000\251\000\250\000\250\000\250\000\249\000\249\000\249\000\248\000\247\000\246\000\245\000\245\000\244\000\244\000\243\000\243\000\242\000\242\000\241\000\241\000\240\000\239\000\239\000\238\000\238\000\237\000\237\000\237\000\236\000\236\000\235\000\234\000\233\000\232\000\231\000\230\000\229\000\228\000\227\000\226\000\225\000\224\000\223\000\223\000\222\000\222\000\221\000\221\000\220\000\220\000\219\000\219\000\219\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\218\000\217\000\216\000\216\000\216\000\216\000\215\000\215\000\214\000\214\000\213\000\213\000\212\000\212\000\212\000\211\000\211\000\211\000\210\000\210\000\210\000\210\000\209\000\209\000\209\000\209\000\208\000\208\000\208\000\208\000\208\000\208\000\208\000\208\000\208\000\208\000\208\000\208\000\208\000\208\000\208\000\208\000\208\000\208\000\208\000\208\000\207\000\206\000\206\000\205\000\205\000\205\000\204\000\204\000\203\000\203\000\203\000\202\000\202\000\201\000\201\000\201\000\200\000\199\000\198\000\198\000\197\000\197\000\196\000\196\000\195\000\195\000\194\000\194\000\193\000\192\000\191\000\191\000\190\000\190\000\189\000\189\000\189\000\188\000\187\000\186\000\186\000\185\000\184\000\184\000\184\000\184\000\184\000\183\000\183\000\183\000\183\000\182\000\182\000\182\000\182\000\181\000\181\000\181\000\181\000\180\000\179\000\179\000\178\000\178\000\178\000\177\000\176\000\176\000\176\000\176\000\175\000\174\000\174\000\173\000\173\000\172\000\172\000\171\000\171\000\171\000\170\000\170\000\169\000\169\000\169\000\169\000\168\000\168\000\168\000\168\000\167\000\167\000\167\000\167\000\167\000\166\000\165\000\165\000\165\000\164\000\163\000\163\000\162\000\162\000\161\000\161\000\160\000\160\000\159\000\159\000\158\000\158\000\157\000\157\000\157\000\157\000\157\000\157\000\157\000\156\000\155\000\154\000\154\000\153\000\153\000\152\000\152\000\151\000\151\000\150\000\150\000\149\000\149\000\148\000\148\000\147\000\147\000\146\000\146\000\145\000\145\000\144\000\144\000\143\000\143\000\142\000\142\000\141\000\141\000\140\000\140\000\139\000\139\000\138\000\138\000\137\000\137\000\136\000\136\000\135\000\135\000\134\000\134\000\133\000\133\000\132\000\132\000\131\000\131\000\130\000\130\000\129\000\129\000\128\000\128\000\127\000\127\000~\000~\000}\000}\000|\000|\000{\000{\000z\000y\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000x\000w\000v\000u\000t\000s\000r\000q\000p\000o\000n\000n\000n\000m\000m\000m\000l\000l\000l\000l\000k\000j\000i\000h\000g\000f\000e\000e\000d\000d\000d\000c\000c\000b\000b\000b\000a\000a\000`\000_\000_\000_\000^\000]\000]\000\\\000\\\000[\000[\000Z\000Z\000Y\000Y\000X\000X\000W\000W\000V\000V\000V\000V\000V\000V\000V\000V\000V\000V\000V\000V\000V\000V\000V\000V\000V\000V\000V\000U\000U\000T\000T\000S\000S\000R\000R\000R\000R\000R\000Q\000Q\000P\000P\000P\000P\000O\000N\000M\000M\000M\000L\000L\000L\000K\000K\000K\000K\000K\000K\000J\000J\000J\000J\000J\000I\000I\000I\000I\000I\000I\000I\000H\000H\000H\000H\000H\000H\000H\000G\000G\000G\000G\000G\000G\000G\000F\000F\000F\000F\000F\000F\000F\000E\000E\000E\000E\000E\000E\000E\000E\000E\000E\000E\000E\000E\000D\000D\000D\000D\000D\000D\000D\000D\000D\000D\000D\000D\000D\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000C\000B\000B\000B\000B\000B\000B\000B\000B\000B\000B\000B\000B\000B\000A\000A\000A\000A\000A\000@\000?\000?\000?\000?\000?\000?\000?\000?\000?\000?\000?\000?\000?\000?\000?\000?\000?\000?\000?\000?\000?\000?\000?\000?\000>\000=\000<\000;\000:\000:\0009\0008\0008\0008\0008\0008\0008\0008\0007\0007\0007\0007\0007\0007\0006\0005\0005\0005\0004\0004\0003\0003\0002\0002\0001\0001\0000\0000\000/\000/\000.\000.\000-\000-\000,\000,\000+\000+\000*\000*\000)\000)\000(\000(\000'\000'\000&\000&\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000%\000$\000$\000$\000#\000#\000#\000#\000\"\000\"\000\"\000\"\000\"\000!\000 \000 \000 \000\031\000\031\000\030\000\029\000\028\000\028\000\028\000\028\000\027\000\027\000\027\000\026\000\026\000\025\000\025\000\025\000\024\000\024\000\024\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\021\000\021\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\019\000\019\000\019\000\019\000\019\000\019\000\019\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\017\000\017\000\017\000\017\000\017\000\017\000\017\000\016\000\016\000\016\000\016\000\016\000\015\000\015\000\014\000\013\000\013\000\013\000\013\000\013") let goto = - ((16, "\001.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\209\000\000\000\159\002\206\000\000\000\179\000u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000[\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\224\000\000\000\011\000\179\000u\000\000\000\000\000\000\000\000\000\000\012\226\000\128\006\208\000\000\000\000\000\000\004\232\000\000\0004\001!\0024\000\000\000\000\015\168\000\000\003\244\000\000\000B\013\"\018('x&\138\005\028'\156\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000'\012'x\000\000\000\0000$\000\0004\200\000\000\t\216\000\000\000\000\000\000\000\000\001r\000\000\"\014\000\000\000\000\000\236\000\000\n\152\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018T\000\000\020L\000\000\020\244\000\000\021\178\000\000\024R\000\000\026J\000\000\028B\000\000\028\212\000\000\030\204\000\000\",\000\000\007\178\000\000\011\166\000\000\000\000\000\000\000\000\000\0009\170\000\0009\176\000\000:\128\000\000\"z\000\000\000\000\"\162\000\000\000\000\000#\000u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004F\000Z\000\000\000\230\000\000\000\000%\176\000\0004N\000\000\000\000\000\000\001\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0006\000\000\000\000\000\000\000\000\000\000\000\000\003\254'\156\000\000\n\186\000\000\018\160\005n\000\000\000\000\000\000\002\026\000\000\"\160\000\000\000\0004n\000\000\000\000\000\000\002.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\012\000\0008 \000\000\000\000\000\000\000\000\0006\000\000\000\0004\198\000\000\000\000\000\000\tz\000\248\000\000\000\000\000\000\000\000\000\000\000\000\016&\000\000\021\232\000\000\022\188\000\000\023\224\000\000\026\128\000\000\027T\000\000\027\208\000\000\029 \000\000\029L\000\000\031\024\000\000\023h\000\000\005V\000\000\031D\000\000%\250\000\000(b\000\000\000\000\000\000\000\000\000\000\000\1314\240\000\000\000\006\000\000\000\000\000C\003@\000\000\002@\000\000\000\000\000\000\013N\000\000\000\000\000\000'\236\000\000\000\000\000\000\000\000\000\000(`\000\000\000\000\000\000\000\000\000\000\000\000\000F\000\000\000\000\000\000\0014\000\000\000\000\000\000\000\168\000\000\000\000\0004\000\179\000\000\000\000\001\023\008\208\000\000\000\000\000\000\000\000\000\000\002\164\000\000\007j\000\000\0064\000\000\000\000\003x\000\000\000\000\000\000\000\000\000\000\000\000)\\\000\000\000\000\000\000\0008\000\000\000\000\000\000\000\000\008\244\012\212\000\000\002P\000\000\000\000\004\212\003\006\000\000\000\000\000\000\000\000\014\190\000\000\000\000\000\000\000\000\000\000\000\000\001\132\003\134\000\000\005D\000\000\000\000\000\000\002*\000\000\011\152\000-\000\000.\016\000\000\000\000\000\000\000\182\002$\000\000\000\000\000\000\001\210\000\000\000\000\002\030\000\000\002j\000\000\000\000\000\000\000\000\000\"\002\170\000\000\003\"\000\000\000\000\000\000\000\000\000\000\000\0005\016\000\000)\008\000\0005:\000\000\000\000\002\194\000\000\006\172\000\000\007\252\018\204)N\000\000\000\000\000\000\000&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\130)N\000\000\020\028\000\000\023:\nL\000\000\000\000\000\000\003\218\000\000#\\\000\000\000\0005>\000\000\000\000\000\000\004\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0008,\000\0008\180\000\000\000\000\000\000\002\164\000\000\000\000\000\000\000\000\000\000\000\000\012\180\000\000\019t\000\000\022\146\000\000\022\234\000\000\029\202\000\000 \136\000\000#\030\000\000$l\000\000(\154\000\000+\n\000\000\025`\000\000\000f\000\000+\164\000\000/\016\000\0001\206\000\000)\158\000\000\000\000\000\0005\232\000\000\000\000\000\000\000\017\000\0006\030\000\000\000\000\000\0006\"\000\000\000\000\000]\000\000\0244\000!\000\007\000\000\003\150\000\000\012\166\001\234\007B\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0006h\000\000)\246&\252\004<\000\000\000\000\000\000 \030\000\000.L\000\000.z\000\000*F*\154\000V\002\176\004~\000\000\000\000\000\000\004\168\000\000\000\000\0001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0006\212\000\000\000\000\000\000\000\000\000\000#\238\000\000+2\000\000\000\000\000\000\000\000\000\000\000\000\013f\000\000\005\148\000\000\000\000\000\000\000\000\004\140\000\025\000\0006B\000\000\000\000\000\000\006\138\000\000\000\000\001v\003z\000\000\014X.\242\000\000\000\000+B\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \208+B\000\000$\254\000\000)4\008\168+`\000\000\027\022\000\000\000\000\000\000\004\186\000\000$\128\000\000\000\0006\252\000\000\000\000\000\000\005N\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0007\002\000\0007\026\000\000\000\000\000\000.\026\000\000\000\000\016D\000\000\000\000\000\000\000\000\005\160\000\000\000\000\000\000&X\000\000\000\0007\236\000\000\003l\000\000\000\000\000\000\002x\000\000\024\154\000\000\025\216\000\000\025\234\000\000 b\000\000\"\234\000\000%\144\000\000&\222\000\000-F\000\0000\018\000\0008\218\000\0009\166\000\000:^\000\000\000\000\000\000\000\000\000\000/n\000\000\013\160\000\000/|%\n\000\000/\244\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\012\000\000\000\000\000\000\000\000\000\000\000\000\003\160\000\000\000\0008\176\000\000\000\000\000\000.\202\000\000\000\000\003\002\000\000\000\000\000\0008\238\000\000\000\000\000\000\000\000/\220\000\000\000\000\000\000\000\000\0050\nZ\000\0000j\000\000\000\000\000\000\000\000\024\220\000&\000\000\025\132\000\000\000\000\0128\000\0000\170\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\226\000\000\000\0009\024\000\000\000\000\000\0000\192\000\000\000\000\004\220\000\000\000\000\013\238\000\000\026,\000\000\000\000%<\000\000\000\000\000\000\000C\000\000\000\00098\000\000\000\000\000\000\000\0000\234\000\000\000\000\000\000\000\000\t\190\0146\000\0001x\000\000\000\000\000\000\000\000\000\000\000\000\014\174\000\000\000\000\006\000\000\000\0156\000\000\000C\000\000\000\000\005^-\174\000\000\005\134\000\000\000\000\000\000\000\000\002\164\000\000,*\000\000\026\212\002D\027|\000\000\004&\000\000\015\180\000\000\016<\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006d\028$\002\164\028\204\000\000\000\000\000\000\003\020\000\000\016\252\000\000\006\178\000\000\000\000\000C\005\"\029t\000\000\005\150\000\000\017\164\030\028\000\000\000\000\018L\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\184\007\246\000\000\006\216\000\000\000\000\000\000\000\000\006\208\000\000\018\244\000\000\000\000\000\000!\"7\182\000\000\000\000\000\000 \252\000\000\000\000\000\000\000\000\014\004\004\248\000\000\000\0001\154\000\000\000\000\000\000\000\000\005\006\000\000\000\0009\164\000\000\000\000\000\0001\160\000\000\000\000\000m\000\000\000\0002x\000\000\000\000\011b\006\246\000\000\000\0002~\000\000\000\000\0078!\184\000\000\0072\000\000\000\0002\150\000\000\000\000\000\000\000\000\000\000\000\000\007j\000\000\000\0009\186\000\000\000\000\000\0002\190\000\000\000\000\000\000\000\000\000\000%\206\000\000\000\000\000\000\001f\000\000\000\000\000\0003<\000\000\000\000\013\188\t\004\000\000\000\0003n\000\000\000\000\007B\000\000\000\000\000\000\000\000\002\164\001f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000d\000\000\019\156\000\000\000\000\000\0008\002\000\000\008t\000\000\000\000\000\000\0040\000\000\000\000\005:\020D\000\000\020\236\000\000\000\000\000\000\005\226\000\000!\232\006^\"\204\000\000#\204\000\000\000\000\000\000\006\220\000\000,\194\007\014-\022\000\000-6\000\000\000\000\000\000\007L\000\000'\234\007\164\000\000\000\000\005\008\0128\007\174\012\030\000\000 :\000\000\000\000\000\000\007\178\000\000,\002\007\222\000\000\000\000\000\000\003\200\000\000\000\000\000\000\004Z\000\000\000\000\000\000\004n\000\000\000\000\000\000\000\000\000\000\000^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\014\000\000\000\000\005J\000\000\002\168\000\000\000\000\007\\\000\000\006\192\005:\003J\000\000\000\000\004J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\224\000Q\000\000\000\000\002\172\000\000\000\000\000\000\008\\\000\000\000\000\t\148\n\166\000\000\000\000\000\000\000\000\011v\012\248\002\156\000\000\015,\000\000\000\000\000\000\000\000\000\000\000\000\015\236\000\000\000\000\0150\000\000\000\000\005*\000\000\000\000\007\226\000\000\000\000\tj\000\000\007\208\006\012\003\004\000\000\000\000\008\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\022\015\134\000\000\000\000\000\000\000\000\015\190\000\000\000\000\017\004\000\000\000\000\019\n\000\000\000\000\000\000\0188\004\216\000\000\020\188\000\000\000\000\000\000\000\000\000\000\000\000\000=\000\000\008d\006\008\003\248\000\000\000\000\000\000\000\000\002d\000\000\000\000\000\000\000\000\000\000\000\000\000\007\000\000\000\000\003\150\000\000\t$\006:\007\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\026\000\000\000\000\021\170\020\216\000\000\000\000\000\000\000\000\0202\000\000\004n\000\000\002\196\000\000\000\000\000\000\000\000\000\000\000\000\019\138\008\140\000\000\000\000\011 \000\000\000\000\000\000\000\000\000\222\000\000\014\000\000\000\000\000\000\000\000\000\0000\000\000\000\000\000\000\000\191\000\000\000\000\002z\000\000\000\000\000\000\000\000\000\000\000\000\000\0003\150\004\008\000\000\000\000\000\000\008\234\000\000\000\000\017F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\189\000\000\000\000\000\000\000\000\000\000\000`\012\012\000\179\012J\021\164\005\150\000\000\000\000\005R\007\n\007\136\008\030\000\000\000\000\000\000\000\000\000\000\000\000\006t\021\148\000\000\030\196\007\138\000\000\000\000\007\142\000\000\022<\000\000.\156\000\000\000\000\007x\022\228\000\000\031l\000\000\008\008 \020\000\000\000\000\000\000\006>\005R\000\000\004<\000\000\000\000\000\000\001\158\000\000\016Z\000\000\005\184\013\022\000\000\000\000\000\000\000\000\002\164\000\000\003x\000\000\005\222\000\000\000\000\005\138\000\000\000\000\000\000\000\000\tB\000\000\000\000\005R\008\236\000\000\023\140\000\000\000C\006h\000\000\000\000\000\000\000\000\000\000\001\226\000\000\000\000\000\000\000\000\000\0004 \008\130\000\000\005\016\000\000\000\000\000\000\000\000\000\000\000\230\000\000\n\002\008\160\n\138\000\000\002p\011\016\000\000\t\016\000\000\002\238\000\000\003\188\000\000\004\172\000\000\000\000\000\000\000\000\000\000\008\150\000\000\005z\000\000\t(\000\000\005\248\000\000\000C\006\194\000\000\003n\000\000\006\198\006B\000\000\004\024\000\000\008\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\136\000\000\t\144\000\000\000\000\000\000\000\000\000\000\000\000\007p\000\000\000\000\006\190\000\000\000\000\007\018\008\216\008n\000\000\008t\000\000\000\000\008\014\t\218\000\000\007\248\000\000\000\000\000\000\000\000\008\174\000\000\000\000\000\000\000\000\000\000\000\000\t\140\000\000\000\000\000\000\008\174\008\162\t\006\t<\008\196\t\004\000\000\000\000\008\184\t\014\t^\008\230\t,\000\000\000\000\t`\000\000\000\000\000\000\000\000\t\250\000\000\000\000"), (16, "\001\200\001\223\000\017\004\135\004\013\002!\002\"\001?\003\007\001g\002!\002\"\004\216\005<\000>\002u\005=\000*\002m\003n\003V\004\136\004d\005!\005\"\000>\000@\001~\000C\003\007\004\214\004\217\004d\000\016\005A\001\200\001\201\004\232\000*\001%\000j\000\n\004\213\000\210\003\029\000\211\003!\000>\001\202\000\210\000j\0016\001\203\004\232\003\030\004\233\000>\000E\004\236\004d\004\214\004\217\004d\0009\001\200\001\223\000\t\001\200\001\201\000\017\005i\004\233\001+\001'\004\236\004d\005j\004P\000>\000\017\004e\000j\005k\001\202\003 \004`\005\029\001\203\000*\000j\004e\004\231\000\212\005:\0008\000j\000\213\003\157\000\212\001\228\004\018\001 \000\213\004^\001h\000*\001-\001%\004a\004d\003!\001Y\001\202\000j\001@\001\202\001\203\004e\000F\001\203\004e\000>\000\226\003\008\004\019\001S\000*\000+\000\226\002$\0009\001\200\001\223\004e\000h\000\166\000\175\002\\\000s\000F\0009\001&\000>\005\167\003C\000>\000*\001\216\002H\005k\005\168\003 \002a\004\213\005m\001\139\002b\000\163\001D\003(\000\247\001\217\003\159\003|\004k\002o\003\203\004e\000\163\001D\003)\004\214\004\217\004d\003j\005n\001i\003!\005\031\001\202\000j\001F\001\216\001\203\002J\000k\001A\003H\005\186\000l\001\162\002f\001m\004\139\004\014\003W\001\217\003v\000F\000\163\001D\002\\\003<\000h\000\227\003L\003\141\000q\003N\001\232\000\227\001\216\001T\000u\001\216\002H\002a\001p\004\016\001s\002b\000\163\001D\003(\005p\001\217\000\248\004\244\001\217\001 \001\233\004e\004\246\005q\005\139\001\234\001x\005\187\005\140\001\235\001_\003\007\001j\004\249\001\236\001\\\001B\000*\001]\000j\000\173\002K\002L\002N\000k\002f\000F\000\250\000l\0037\005\142\001\200\001\223\000>\001\152\001\222\003<\000\177\002\\\000j\005\144\001h\003N\001\232\000\232\000>\002\004\000*\001\216\002m\003n\003V\000u\002a\001+\000\163\000\164\002b\000\163\001D\003(\005\189\001\217\001@\001\233\000v\000\005\001\233\000h\001\234\005q\005\139\000q\001\235\001I\005\191\001E\003!\001\236\001\202\002\245\001\236\001\154\001\203\004\016\001\159\005\152\005\153\001-\000w\000\008\000\t\002f\000\248\000*\003p\0037\005\193\001\200\001\223\001\156\000*\002\143\003<\001(\002\147\000\173\005\195\001\133\003N\001\232\000*\000>\005\026\000j\000x\005k\005\173\003V\000k\001\150\000F\004\225\000l\002\242\001\135\003C\000n\000*\003}\001\228\001\233\001 \001=\000v\001\146\001\234\000y\004\222\005\157\001\235\001\158\000\160\003\130\003!\001\236\001\202\000u\000j\004q\001\203\000{\002\148\002\183\005s\004\138\002\149\000\186\000w\000>\005\183\001\200\001\223\001+\004\232\004\153\004d\004r\002\\\003\247\000*\004u\004d\004\136\004d\000>\000\163\000\164\001\216\005k\005\173\003V\004\233\002a\000\149\004\236\004d\002b\000\163\001D\003(\001\136\001\217\001\153\003\127\005&\005'\001,\005:\003\130\004\178\003)\001\161\002u\000F\003j\000y\003!\001\135\001\202\000\150\000\215\001%\001\203\000\151\005+\000>\003\007\004\179\000*\000{\000\224\002f\005\178\004e\001(\003W\000\173\003v\000v\004e\002\143\004e\003<\002\147\002\\\004x\003\141\000F\003N\001\232\003x\002!\002\"\004e\001\216\001\231\004\223\000\148\002\162\002a\000>\002\246\000w\002b\000\163\001D\003(\005\179\001\217\002E\001\233\005\254\002\163\001\200\001\223\001\234\005q\005\139\004\235\001\235\005\255\002d\004\027\005:\001\236\000*\002[\000>\000\149\001b\002\148\005k\005\173\003V\002\149\001q\004\233\003\132\002f\004\236\004d\000\210\003W\000\233\005\181\000*\000\210\002\\\000\231\003<\000y\000\163\000\164\003A\000\150\003N\001\232\001\216\000\151\003!\004y\001\202\002a\002F\000{\001\203\002b\000\163\001D\003(\005\179\001\217\001\163\004\221\000*\005\180\000F\001\233\000F\005q\005\139\003\008\001\234\002\195\002d\003p\001\235\000j\004\129\004\222\000\212\001\236\000j\003\135\000\213\000\212\000>\002\198\004e\000\213\001\128\002f\000\173\005\006\002\194\003W\000*\005\181\000\163\000\164\002#\002\187\003<\004{\004]\005\212\003A\000\238\003N\001\232\000\226\004i\004\029\000*\003\013\000\226\001u\002\162\002\223\002\240\002\226\000>\004^\001\200\001\223\001^\002\190\004a\004d\004\182\001\233\002\163\003\017\000\163\000\164\001\234\006\007\000>\004Z\001\235\002\\\005k\005\173\003V\001\236\000F\000*\001*\004j\000\173\001\216\002\193\002\229\002t\0057\002a\0036\000>\002\193\002b\000\163\001D\003(\005\179\001\217\004|\003\030\000>\000D\003!\000C\001\202\005q\005\139\001\205\001\203\000*\002d\004y\000\210\005o\000\233\001\130\000>\000\173\005\182\004e\002m\004\223\001t\004\207\004d\000\227\002\252\002f\004\030\000*\000\227\003W\000E\005\181\003\143\002\195\000>\0017\003<\001\214\000*\000\210\003A\000\211\003N\001\232\000>\000*\004B\002\196\0058\000\241\004\133\000\210\003s\000\211\0025\005L\000j\001\200\001\223\000\212\000\163\000\176\005\161\000\213\001\233\005\162\003\020\002!\002\"\001\234\005\219\000>\000\251\001\235\0058\005k\005\173\003V\001\236\000>\004e\000*\002G\004k\004\226\000j\000\238\002D\000\212\000\226\003\143\002\\\000\213\000\252\003\153\000\163\001D\000j\000\253\004p\000\212\001\216\000\254\003!\000\213\001\202\002a\000\255\002\249\001\203\002b\000\163\001D\003(\005\179\001\217\005\166\002\151\000\226\005\190\001\200\001\223\000*\005q\005\139\004f\004\029\003e\002d\004~\000\226\000\163\000\176\003\\\000>\005\130\002F\000F\005k\005\173\003V\000\163\001D\003\030\003\005\002f\003\019\003e\000F\003W\004%\005\181\003\146\004\168\001F\000F\003<\000\163\001D\003(\003A\003g\003N\001\232\000>\001m\003!\004'\001\202\000>\003)\000\227\001\203\005E\004\222\005:\004\184\000\163\000\176\002!\002\"\003f\005\194\000\239\001\233\003,\002i\000\163\000\164\001\234\001p\002\160\001s\001\235\002\\\004C\003\185\000\241\001\236\004\241\000\227\002t\003<\003\193\001\216\005P\003A\005G\003N\002a\001\200\001\223\000\227\002b\000\163\001D\003(\005\179\001\217\001Y\000\251\005\127\000\163\001D\000>\002u\005q\005\139\002m\003n\003V\002d\002\185\001S\004(\005z\001\132\003\168\000\173\000*\005\129\000\252\000>\000@\000A\000C\000\253\003\030\002f\001\023\000\254\004'\003W\005\150\005\181\000\255\003!\002\\\001\202\003<\005\197\003\138\001\203\003A\005\132\003N\001\232\001\216\005}\005\201\000\252\005~\002a\000\173\000E\005L\002b\000\163\001D\003(\005\179\001\217\000\228\004\228\000\255\001\200\001\223\001\233\004\178\005q\005\139\004\127\001\234\000*\002d\003\140\001\235\004/\005T\000>\003\138\001\236\003\162\002m\003n\003V\004\179\000\163\001D\002!\002\"\002f\000\163\001D\0041\003W\005\128\005\181\003\162\000>\001T\004t\003<\000*\005H\005l\003A\004\128\003N\001\232\005X\003!\005[\001\202\003\139\005\128\003\164\001\203\005L\004r\003\030\000h\003\030\004u\004d\000q\005\220\002\\\001[\000F\001\233\000*\003\163\001\\\005\224\001\234\001]\001\216\000\173\001\235\0042\003\005\002a\003\019\001\236\004\003\002b\000\163\001D\003(\004\003\001\217\004\022\003|\001Y\001\200\001\223\0041\001\200\002\014\003)\002!\002\"\0049\002d\000\163\001D\000j\001S\000>\004\171\005\229\000k\002m\003n\003V\000l\002v\001F\004\005\004;\002f\004e\000F\004\004\003W\000\145\003v\004\172\001m\004\175\004d\003<\005L\004<\002\247\003A\004\181\003N\001\232\000u\003!\002\\\001\202\000j\005O\001\202\001\203\005b\004\185\001\203\004;\001\216\000F\001p\004\179\001s\002a\001\200\001\223\001\233\002b\000\163\001D\003(\001\234\001\217\003z\003|\001\235\005\230\003\210\000>\004\135\001\236\003)\002m\003n\003V\002d\004?\000F\000\163\001D\002\143\004\186\004H\002\147\004K\004e\005\235\004\136\004d\005\234\004\232\001T\002f\0041\004\239\005\170\003W\003\219\003v\004J\003!\004J\001\202\003<\005N\004N\001\203\003A\004\233\003N\001\232\004\236\004d\000\210\000>\000\233\005g\005\239\000v\001_\004\229\001`\0041\005\141\001\\\003\229\000j\001]\002\\\000\173\002\148\001\233\000>\003\030\002\149\001n\001\234\000\148\001\216\005\184\001\235\001\216\000w\002a\0051\001\236\004e\002b\000\163\001D\003(\005\170\001\217\003\161\003|\001\217\004\230\001\200\001\223\000j\004\171\003)\000\212\005\170\000E\002d\000\213\005\244\000\149\001R\004e\000>\000*\005\212\005\159\002m\003n\003V\004\172\005M\004\175\004d\002f\001S\005\188\000\210\003W\000\233\003v\005\248\000y\002\\\000\226\003<\000\150\005\176\004\187\003A\000\151\003N\001\232\001\216\004\174\003!\000{\001\202\002a\005\192\006\015\001\203\002b\000\163\001D\003(\004\242\001\217\004\026\003|\006\016\005\236\004\172\001\233\004\175\004d\003)\004\135\001\234\002\162\002d\005\246\001\235\000j\000h\000>\000\212\001\236\000i\0058\000\213\004e\005\252\002\163\006\002\004\136\004d\002f\006\t\0058\005\212\003W\004\243\003v\005\212\001\200\001\223\006\000\003<\000\163\001D\004\142\003A\005\238\003N\001\232\000\226\003O\006\001\000>\006\003\006\004\001T\005k\006\005\003 \000\227\000\163\001D\006\008\000j\004\179\005\014\004e\000F\000k\001\233\006\n\006\011\000l\001F\001\234\001\200\001\201\006\012\001\235\002\\\006\020\000\000\000\000\001\236\003!\0052\001\202\004e\001\\\001\216\001\203\001]\005\213\000\173\002a\000\000\000u\002\165\002b\000\163\001D\003(\005\185\001\217\005\137\003|\001\200\001\223\000\251\001p\001w\001s\003)\000h\002u\003\254\002d\000s\005\249\0055\000>\000j\000\000\001\202\005k\005\248\003 \001\203\000*\000\252\000\210\000\227\000\230\002f\000\253\004\193\000\000\003W\000\254\003v\000\000\005\249\005\248\000\255\003<\005\249\000\000\004\135\003A\000\000\003N\001\232\003!\000\000\001\202\000\000\000\000\000\249\001\203\000j\000\000\000\163\000\176\000>\000k\004\136\004d\005\215\000l\000\000\005\171\005\217\001\233\001\200\001\223\002\\\000j\001\234\000v\000\212\000\251\001\235\000\000\000\213\000\000\001\216\001\236\000>\000\000\000\000\002a\005k\000u\003 \002b\000\163\001D\003(\005\172\001\217\004\148\000\252\000w\000\000\000\000\004\232\000\253\005q\005\139\000\226\000\254\000\000\005\175\000\000\000\000\000\255\005\011\000\000\000\000\003!\000\000\001\202\001\216\004\233\004e\001\203\004\236\004d\000>\002f\000\000\000\000\000\000\0037\005\177\000\000\001\217\005\174\000F\000\000\003<\001\200\001\223\002\\\003A\000\000\003N\001\232\000h\000\000\000\188\004\135\000i\001\216\005\021\000>\000\000\000\000\002a\002m\003\209\003 \002b\000\163\001D\003(\005\172\001\217\001\233\004\136\004d\000\000\000\000\001\234\000v\005q\005\139\001\235\000\000\000\000\005\175\000\000\001\236\000\000\000\000\004e\003\021\003!\000\000\001\202\000\000\000\227\000\000\001\203\000j\000\000\000\000\002f\000w\000k\000\000\0037\005\177\000l\003\025\001\218\000\163\000\164\003<\000\000\002\\\000\000\003A\000>\003N\001\232\000\000\005E\000\000\004 \001\216\000\000\000>\003\156\000x\002a\002m\000u\004e\002b\000\163\001D\003(\005\172\001\217\000\000\001\233\004\146\000\000\000\000\000\000\001\234\005q\005\139\000>\001\235\000y\005\175\005E\000\000\001\236\000z\000\000\002u\004B\005\008\000\000\000\173\001\200\001\221\000{\000\000\000\000\000\000\002f\000\000\000\000\000*\0037\005\177\000\000\000\163\000\176\000\000\000\000\003<\001\200\001\223\002\\\003A\000\000\003N\001\232\001\200\001\201\000\000\000\000\000\000\001\216\000\000\000>\000\000\000\000\002a\002m\005\017\003 \002b\000\163\001D\003(\000\000\001\217\001\233\000j\000\000\001\202\000\000\001\234\000v\001\203\003)\001\235\000>\001o\003\145\000C\001\236\000\000\000\000\000>\000\000\003!\001|\001\202\000\000\000\000\000\000\001\203\000j\000\000\001\202\002f\000w\000\000\001\203\0037\003\147\000h\000\000\000\000\004\159\000q\003<\004\135\000E\000>\003A\000\000\003N\001\232\000\000\000E\000\000\003\154\000\000\000\163\005F\003\156\000\147\000h\000\000\004\136\004d\000i\000\163\001D\003(\005R\005I\000\000\001\233\001\200\001\223\000\000\000\000\001\234\000F\003)\002k\001\235\000y\000\000\000\000\000j\001\236\000>\000\163\005F\000k\002m\003\027\003 \000l\000\000\000{\000\000\000\000\000\000\005Q\005I\002\143\005y\004E\002\147\001\216\000j\000\000\000\000\000\000\003<\000k\000\000\002\\\003A\000l\003N\000u\003!\001\217\001\202\004e\000\000\001\216\001\203\003\"\000\000\000\000\002a\000>\001\216\000\000\002b\000\163\001D\003(\000\000\001\217\0011\000u\001\200\001\223\000\000\003&\001\217\000\000\003)\002[\0039\000\000\003\145\002\148\000\000\000\000\000>\002\149\000\163\001D\002m\003:\003V\003\253\000\000\000\163\001D\000>\000\000\002f\000\000\001F\000\000\0037\003\147\004\232\000\000\000\000\001F\000\000\003<\000\000\001m\000\000\003A\000\000\003N\001\232\003!\000\000\001\202\000\163\001D\004\233\001\203\002\143\004\236\004d\002\169\003\184\000\000\000v\000\000\000\000\005z\000\000\000\000\001p\001\233\001s\002u\002\\\000\000\001\234\001p\001\233\001s\001\235\000\000\000\000\001\"\001\216\001\236\000v\000*\000w\002a\000\000\000\000\001\238\002b\000\163\001D\003(\002\187\001\217\004\157\005}\001\200\001\223\005~\000j\000\173\000\000\003)\002\148\003Y\000w\003[\002\149\002\162\000\149\000>\002\230\000\000\004e\002m\003:\003V\002\190\000>\000@\001z\000C\002\163\002f\000\000\000\000\000\000\0037\003]\000\000\000\000\000y\000\163\000\176\003<\000\150\000\000\002\\\003_\000\151\003N\001\232\003!\002\232\001\202\000{\000\000\001\216\001\203\002\193\000E\000\000\002a\0010\000\000\000\000\002b\000\163\001D\003(\000\000\001\217\001\233\000\000\001\200\001\223\000\000\001\234\000\163\001D\003)\001\235\003^\000\000\002d\000>\001\236\000\000\000>\000\000\000\000\003\190\002m\003:\003V\000\000\004\135\002\238\000\000\000\000\000\000\002f\000F\002\195\004\165\003W\000\000\003X\000\000\000\000\002\162\000\000\003<\000\000\004\136\004d\003A\002\196\003N\001\232\003!\000\000\001\202\000\000\002\163\000\000\001\203\003\202\000\000\003\208\000\000\000h\000\000\005\024\000\000\001<\000\000\001\200\001\223\000\000\001\233\004\135\000\000\002\\\000\000\001\234\000\000\000\000\000\000\001\235\003P\000>\000\000\001\216\001\236\002m\003n\003V\002a\004\136\004d\000\000\002b\000\163\001D\003(\000\000\001\217\003T\004\135\000\000\000\163\001D\004e\000\000\000\000\003)\000j\000\000\000>\002d\000\000\000k\003!\001F\001\202\000l\004\136\004d\001\203\000\000\000\000\000\000\000\000\000\210\001m\000\211\002f\004\162\000\000\000\000\003W\000\000\003X\000\000\001\200\001\223\000\000\003<\000h\000u\002\\\003A\000q\003N\001\232\000\000\000\000\004e\000>\001p\001\216\001s\002m\003n\003V\002a\000\000\000\163\000\164\002b\000\163\001D\003(\000>\001\217\001\233\000\000\000\000\000\000\000j\001\234\000\000\000\212\003)\001\235\004e\000\213\002d\000\000\001\236\003!\000\000\001\202\000\000\000j\000\000\001\203\000\000\000\000\000k\000\000\000\000\000\000\000l\002f\000\000\000\000\000\000\003W\000\000\003X\000\000\000\226\002\\\000\000\003<\004\163\000\000\000\173\003A\000\000\003N\001\232\001\216\000\000\004\155\000\000\000u\002a\005\130\000\000\000v\002b\000\163\001D\003(\000\000\001\217\000\000\003u\001\200\001\223\000\000\001\233\000\000\000\000\003)\000\000\001\234\000\000\002d\000\000\001\235\000\000\000>\000w\000\000\001\236\002m\003n\003V\000\163\000\164\000\000\000\000\000\000\000\000\002f\000\000\004\171\004\191\003W\000\000\003v\000\000\000\000\000\000\000\210\003<\000\233\000\000\002\\\003A\000\000\003N\001\232\003!\004\172\001\202\004\175\004d\001\216\001\203\000\000\000\227\000\000\002a\000\000\004\196\002\181\002b\000\163\001D\003(\000\000\001\217\001\233\003w\0054\000v\004\163\001\234\000\173\000\000\003)\001\235\000\163\001D\002d\000\000\001\236\000\000\000\000\000j\001\200\001\223\000\212\004\166\002\183\005z\000\213\000\000\000\000\000w\000\000\002f\000\000\000\000\000>\003W\000\000\003v\002m\003\148\003V\000\000\003<\000\000\004e\000\000\003A\000\000\003N\001\232\000\000\000\000\000\226\000\000\005\133\000\149\005\134\000\000\005}\000\000\000\252\005~\000\000\000\173\000\000\000\000\003!\000\000\001\202\000\000\001\233\000\000\001\203\002\\\001\001\001\234\000\000\000y\000\000\001\235\000\000\000\150\000\000\001\216\001\236\000\151\000h\000\000\002a\000\000\000q\000{\002b\000\163\001D\003(\000\000\001\217\000\000\003\137\003\150\000\000\000\000\000\000\001\200\001\223\003)\000\000\000h\000\000\002d\000\000\000i\000\000\000\000\000\000\000\000\000\000\000>\000\000\000\000\004\135\002m\003\148\003V\000\000\000\000\002f\000\000\000\000\000\000\003W\000j\003v\000\227\000\000\000\000\000k\003<\004\136\004d\000l\003A\000\000\003N\001\232\000\210\000\000\000\229\000\000\003!\000\000\001\202\000\000\000j\004\199\001\203\002\\\000\000\000k\0052\000\000\000\000\000l\000\000\000u\001\233\001\216\001\200\001\223\000\000\001\234\002a\000\000\000\000\001\235\002b\000\163\001D\003(\001\236\001\217\000\000\000\251\003\152\000\000\001\030\000u\001\200\001\223\003)\000\000\000j\000\000\002d\000\212\003\170\000\000\004e\000\213\000\000\000\000\000>\000\000\000\252\000\000\002m\003:\003V\000\253\000\000\002f\000\000\000\254\000j\003W\001\202\003\151\000\255\000\000\001\203\000\000\003<\000\000\004\171\000\226\003A\000\000\003N\001\232\000\000\000\000\000\000\000\000\003!\000\000\001\202\000\000\000\000\000\000\001\203\002\\\004\172\000\000\004\175\004d\000\000\000v\000\000\000\000\001\233\001\216\001\200\001\201\000\000\001\234\002a\000\000\000\000\001\235\002b\000\163\001D\003(\001\236\001\217\001\"\001\228\000\000\000v\000\000\000w\001\200\001\223\003)\000\000\000\000\000>\002d\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000>\004\232\000\000\000\000\002m\000\000\003 \000w\000\000\002f\000\000\000\149\000j\003W\001\202\003\151\000\000\004e\001\203\004\233\003<\000\227\004\236\004d\003A\004\211\003N\001\232\000\000\001\216\000\000\000\000\003!\000y\001\202\000\000\000\000\000\150\001\203\002\\\000\000\000\151\000\000\001\217\000\000\000\000\000\000\000{\001\233\001\216\001\200\001\220\005\013\001\234\002a\000y\001\230\001\235\002b\000\163\001D\003(\001\236\001\217\004\020\000\000\000\000\000\000\003\156\000}\001\200\001\223\003)\000\000\000h\000>\002d\000\000\000i\000\000\000\000\004e\005\016\000\000\000>\004\232\000\000\000\000\002m\000\000\003 \001\232\000\000\002f\000\000\000\000\000j\003W\001\202\003X\000\000\000\000\001\203\004\233\003<\000\000\004\236\004d\003A\000\000\003N\001\232\001\233\001\216\000\000\000\000\003!\001\234\001\202\000\000\000j\001\235\001\203\002\\\000\000\000k\001\236\001\217\004\202\000l\000\000\000\000\001\233\001\216\000\163\000\164\000\000\001\234\002a\000\000\000\000\001\235\002b\000\163\001D\003(\001\236\001\217\004\"\000\000\000\000\000\000\003\156\000u\001\200\001\223\003)\004\135\000h\000\000\003\145\000\000\000i\000\000\000\000\004e\005\005\000\000\000>\000\000\000\000\004\135\002m\000\000\003 \004\136\004d\002f\000\000\000\000\000\000\0037\003\147\005\008\000\000\000\173\000\000\000\000\003<\004\136\004d\005\019\003A\000\000\003N\001\232\001\233\001\216\000\000\000\000\003!\000\000\001\202\000\000\000j\000\000\001\203\002\\\000\000\000k\001\240\001\217\000\000\000l\000\000\000\000\001\233\001\216\000\163\000\164\000\000\001\234\002a\000\000\000\000\001\235\002b\000\163\001D\003(\001\236\001\217\004$\000\000\004e\000v\003\156\000u\001\200\001\223\003)\000\000\000\000\000\000\003\145\000\000\000\000\000\000\004e\000\000\000\000\000\000\000>\000h\000\000\000\000\002m\000i\003 \000w\000>\002f\000\000\000\000\005E\0037\003\147\005\008\000\000\000\173\000\000\000\000\003<\000\000\004\171\005\t\003A\000\000\003N\001\232\000\210\000\000\000\211\000\000\003!\000\000\001\202\000\000\000\000\000\000\001\203\002\\\004\172\000\000\004\175\004d\000\000\000\000\000\000\000j\001\233\001\216\000\000\000\000\000k\001\234\002a\000y\000l\001\235\002b\000\163\001D\003(\001\236\001\217\005U\000\000\000\000\000v\003\156\000\127\001\200\001\223\003)\000\000\000j\000\000\003\145\000\212\005]\000\000\000u\000\213\000\000\000\000\000>\000\000\000\000\000\000\002m\003:\003V\000w\000\000\002f\000\000\004\209\000\000\0037\003\147\000\000\000\000\004e\000\000\000\000\003<\000\000\000\000\000\226\003A\004\253\003N\001\232\000\000\001\200\001\201\000\000\003!\000\000\001\202\000\000\000\000\000\000\001\203\002\\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\233\001\216\000\210\000\000\000\211\001\234\002a\000y\000\000\001\235\002b\000\163\001D\003(\001\236\001\217\000\000\000\000\000\000\000\163\005F\000\129\001\200\001\223\003)\001\200\001\201\000j\003\145\001\202\000v\005H\005I\001\203\000\000\000\000\000>\000\000\000\000\000\000\002m\000\000\003 \000\000\000\000\002f\000\000\000\000\000j\0037\003\147\000\212\000\000\000\000\000w\000\213\003<\000\227\000\000\000\000\003A\000\000\003N\001\232\000\000\001\200\001\219\000\000\003!\000\000\001\202\000j\000\000\001\202\001\203\002\\\000\000\001\203\000\000\000\000\004\255\000\226\000\000\000\000\001\233\001\216\000\000\000\000\000h\001\234\002a\000\000\000q\001\235\002b\000\163\001D\003(\001\236\001\217\005c\000\000\000y\000\000\003\156\000\000\001\200\001\223\003)\000\000\000\000\000j\002d\001\202\005\143\000\000\000\131\001\203\000\000\000\000\000>\000\000\000\000\000\000\002m\003:\003V\000\252\001\216\002f\000\000\000\000\000\000\003W\000j\003X\000\000\000\000\000\000\000k\003<\001\003\001\217\000l\003A\000\000\003N\001\232\000\210\000\000\000\211\000\000\003!\001\021\001\202\000\000\000\000\000\000\001\203\002\\\000\000\000\000\000\000\000\227\000\000\000\000\000\000\000u\001\233\001\216\000\000\000\000\001\216\001\234\002a\000\000\000\000\001\235\002b\000\163\001D\003(\001\236\001\217\000\000\000\000\001\217\000\000\000\000\003\165\001\200\001\223\003)\000\000\000j\000\000\003\145\000\212\000\000\000\000\000\000\000\213\000\000\000\000\000>\000h\000\000\000\000\002m\000i\003V\001\233\001\216\002f\000\000\000\000\000\000\0037\003\147\000\000\000\000\000\000\000\000\000\000\003<\001\242\001\217\000\226\003A\000\000\003N\001\232\000\000\000\252\000\000\000\000\003!\000\000\001\202\000\000\000\000\002\143\001\203\002\\\002\147\000\000\000\000\001\005\000\000\000v\000\000\000j\001\233\001\216\000\000\001\233\000k\001\234\002a\000\000\000l\001\235\002b\000\163\001D\003(\001\236\001\217\000\148\001\244\000\000\000\000\000\000\000w\001\200\001\223\003)\000\000\000\000\000\000\002d\000\000\000\000\000\000\000u\003Z\000\000\000j\000>\000\000\000\000\002\148\002m\000\000\003 \002\149\000\000\002f\000\000\000\149\000\000\003W\000\000\003X\000\000\000\000\000\000\000\000\003<\000\227\000\000\000\000\003A\000\000\003N\001\232\000\000\000\000\000\000\000\000\003!\000y\001\202\000\000\000\000\000\150\001\203\002\\\000\000\000\151\000\000\000\000\000\000\000\000\000\000\000{\001\233\001\216\000\000\000\000\000h\001\234\002a\000\000\000q\001\235\002b\000\163\001D\003(\001\236\001\217\000\000\000\000\000\000\000\000\000\000\000\000\001\200\001\223\003)\000\000\000\000\000\000\003\167\000\000\000v\000\000\000\000\003\031\000\000\000\000\000>\000\000\000\000\000\000\002m\000\000\003 \000\252\000\000\002f\000\000\000\000\000\000\003W\000j\003\169\002\162\000\000\000w\000k\003<\001\007\000\000\000l\003A\000\000\003N\001\232\002\143\000\000\002\163\002\147\003!\002\002\001\202\000\000\000\000\002\143\001\203\002\\\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000u\001\233\001\216\000\000\000\000\000\000\001\234\002a\000\000\000\000\001\235\002b\000\163\001D\003(\001\236\001\217\000\000\000\000\000y\000\000\000\000\000\000\001\200\001\223\003)\000\000\000j\000\000\0035\000\000\002\148\000\000\000\133\003;\002\149\000j\000>\000h\000\000\002\148\002m\000i\003 \002\149\000\000\002f\000\000\000\000\000\000\0037\0038\000\000\000\000\002\195\000\000\000\000\003<\000\000\000\000\000\000\003A\000\000\003N\001\232\000\210\000\000\000\211\002\200\003!\000\000\001\202\000\000\000\000\000\000\001\203\002\\\000\000\000\000\000\000\000\000\000\000\000v\000\000\000j\001\233\001\216\000\000\000\000\000k\001\234\002a\000\000\000l\001\235\002b\000\163\001D\003(\001\236\001\217\000\148\000\000\000\000\000\000\000\000\000w\001\200\001\223\003)\000\000\000j\000\000\0035\000\212\000\000\000\000\000u\000\213\000\000\000\000\000>\000\000\000\000\000\000\002m\000\000\003 \002\162\000\000\002f\000\000\000\149\000\000\0037\0038\000\000\002\162\000\000\000\000\002\143\003<\002\163\002\147\000\226\003A\000\000\003N\001\232\000\000\000\000\002\163\000\000\003!\000y\001\202\000\000\000\000\000\150\001\203\002\\\000\000\000\151\000\000\000\000\000\000\000\000\000\000\000{\001\233\001\216\000\210\000\000\000\211\001\234\002a\000\000\000\000\001\235\002b\000\163\001D\003(\001\236\001\217\000\000\000j\000\000\000\000\000\000\002\148\001\200\001\223\003)\002\149\000\000\000\000\0035\000\000\000v\000\000\000\000\000\000\000\000\000\000\000>\000\000\000\000\000\000\002m\000\000\003 \000\000\002\195\002f\000\000\000\000\000j\0037\0038\000\212\000\000\002\195\000w\000\213\003<\000\227\002\202\000\000\003A\000\000\003N\001\232\000\210\000\000\000\211\002\204\003!\000\000\001\202\000\000\000\000\000\000\001\203\002\\\000\000\000\000\000\000\000\000\000\000\000\226\000\000\000\000\001\233\001\216\000\000\000\000\000\000\001\234\002a\000\000\000\000\001\235\002b\000\163\001D\003(\001\236\001\217\000\000\000\000\000y\000\000\000\000\003y\001\200\001\223\003)\000\000\000j\000\000\003r\000\212\000\000\000\000\000\135\000\213\002\162\000\000\000>\000h\000\000\000\000\002m\000i\003 \000\252\000\000\002f\000\000\000\000\002\163\0037\003t\000\000\000\000\000\000\000\000\000\000\003<\001\t\000\000\000\226\003A\000\000\003N\001\232\000\000\000\000\000\000\000\000\003!\000\000\001\202\000\000\000\000\000\000\001\203\002\\\000\000\000\000\000\000\000\227\000\000\000\000\000\000\000j\001\233\001\216\000\000\000\000\000k\001\234\002a\000\000\000l\001\235\002b\000\163\001D\003(\001\236\001\217\000\000\000\000\000\000\000\000\000\000\003q\001\200\001\223\003)\000\000\000h\000\000\003r\000\000\000i\000\000\000u\000\000\000\000\002\164\000>\000\000\000\000\000\000\002m\000\000\003 \000\000\000\000\002f\000\000\000\000\000\000\0037\003t\000\000\000\000\000\000\000\000\000\000\003<\000\227\000\000\000\000\003A\000\000\003N\001\232\000\210\000\252\000\211\000\000\003!\000\000\001\202\000\000\000j\000\000\001\203\002\\\000\000\000k\000\000\001\011\000\000\000l\000\000\000\000\001\233\001\216\000\210\000\000\000\211\001\234\002a\000\000\000\000\001\235\002b\000\163\001D\003(\001\236\001\217\000\000\000\000\000\000\000\000\003\133\000u\001\200\001\223\003)\000\000\000j\000\000\003\134\000\212\000v\000\000\000\000\000\213\000\000\000\000\000>\000\000\000\000\000\000\002m\000\000\003 \000\252\000\000\002f\000\000\000\000\000j\0037\003\136\000\212\000\000\000\000\000w\000\213\003<\001\013\000\000\000\226\003A\000\000\003N\001\232\000\000\001\200\001\201\000\000\003!\000\000\001\202\000\000\000\000\000\000\001\203\002\\\000\000\000\000\000\000\000\000\000\000\000\226\000\000\000\000\001\233\001\216\000\000\000\000\000\000\001\234\002a\000\000\000\000\001\235\002b\000\163\001D\003(\001\236\001\217\000\000\000\000\000y\000v\003\144\003\131\001\200\001\223\003)\000\000\000\000\000j\003r\001\202\000\000\000\000\000\137\001\203\000\000\000\000\000>\000\000\000\000\000\000\002m\000\000\003 \000w\000\000\002f\000\000\000\000\000\000\0037\003t\000\000\000\000\000\000\000\000\000\000\003<\000\227\000\000\000\000\003A\000\000\003N\001\232\000\000\000\000\000\000\000\000\003!\000\000\001\202\000\000\000\000\000\000\001\203\002\\\000\000\000\000\000\000\000\227\000\000\000\000\000\000\000\000\001\233\001\216\000\000\000\000\000\000\001\234\002a\000y\000\000\001\235\002b\000\163\001D\003(\001\236\001\217\000\000\000\000\000\000\000\000\003\149\000\139\001\200\001\223\003)\000\000\000h\000\000\003\145\000\000\000i\000\000\005Y\000\000\000\000\000\000\000>\000\000\000\000\000\000\002m\000\000\003 \000\252\001\216\002f\000\000\000\000\000\000\0037\003\147\000\000\000\000\000\000\000\000\000\000\003<\001\015\001\217\000\000\003A\000\000\003N\001\232\000\210\000\252\000\211\000\000\003!\000\000\001\202\000\000\000j\000\000\001\203\002\\\000\000\000k\000\000\001\017\000\000\000l\000\000\000\000\001\233\001\216\000\210\000\000\000\211\001\234\002a\000\000\000\000\001\235\002b\000\163\001D\003(\001\236\001\217\000\000\000\000\000\000\000\000\000\000\000u\001\200\001\223\003)\000\000\000j\000\000\003\145\000\212\000\000\000\000\005e\000\213\000\000\000\000\000>\000\000\000\000\000\000\002m\000\000\003 \001\233\000\000\002f\000\000\000\000\000j\0037\003\147\000\212\000\000\000\000\000\000\000\213\003<\001\246\000\000\000\226\003A\000\000\003N\001\232\000\000\000\000\000\000\000\000\003!\000\000\001\202\000\000\000\000\000\000\001\203\002\\\000\000\000\000\000\000\000\000\000\000\000\226\000\000\000\000\001\233\001\216\000\000\000\000\000\000\001\234\002a\000\000\000\000\001\235\002b\000\163\001D\003(\001\236\001\217\000\000\000\000\000\000\000v\000\000\000\000\001\200\001\223\003)\000\000\000\000\000h\005Z\000\000\000\000\000q\005h\000\000\000\000\000\000\000>\000\000\000\000\000\000\002m\000\000\003 \000w\000\000\002f\000\000\000\000\000\000\0037\005\\\000\000\000\000\000\000\000\000\000>\003<\000\227\000\000\002m\003A\002\143\003N\001\232\002\147\000\000\000\000\000\000\003!\000\000\001\202\000\000\000\000\000j\001\203\002\\\000\000\000\000\000k\000\227\001\200\001\201\000l\000\000\001\233\001\216\000\000\004B\000\000\001\234\002a\000y\0029\001\235\002b\000\163\001D\003(\001\236\001\217\000\000\000\000\000\000\000\000\000\000\000\141\000u\000j\003)\000\000\000\000\002\148\005Z\000\000\000\000\002\149\002\143\000\000\000\000\002\168\000\000\000\000\000\000\000\000\000\000\000\000\000j\000\252\001\202\002f\000\000\000\000\001\203\0037\005\\\000\000\000\000\000\000\001\200\001\223\003<\001\019\000\000\000\000\003A\000\000\003N\001\232\000\000\000\252\000\000\000\000\000>\000\000\000\000\000\000\003\183\001\200\001\223\002\\\000\000\000\000\000j\001\025\000\000\000\000\002\148\000\000\001\233\001\216\002\149\000>\000\000\001\234\002a\003\183\003\215\001\235\002b\000\163\001D\003(\001\236\001\217\003\218\000\000\001\202\000\000\000v\000\000\001\203\000\000\003)\000\000\000\000\004\n\005Z\000\000\000\163\001D\003(\000\000\000\000\003\218\000\000\001\202\003\224\000\148\002\162\001\203\000\000\003)\000w\002f\000\000\000\000\000\000\0037\005\\\000\000\000\000\000\000\002\163\000\000\003<\003\224\000\000\001\216\003A\000\000\003N\001\232\001\200\001\223\004\006\000\000\004G\001\228\000\149\001 \000\000\001\217\000\000\003<\000\000\000\000\000>\003A\000\000\003N\003\183\000\000\001\233\000\000\000\000\000\000\000\210\001\234\000\233\000\000\000y\001\235\000\000\002\162\000\150\000\000\001\236\000\000\000\151\000\000\003\217\000\000\000\000\000\000\000{\000h\000\000\002\163\003\218\000q\001\202\000\000\000\000\000\000\001\203\001\216\000\000\000\000\000\000\000>\000h\000\000\000\000\002\195\000i\000\163\001D\003\225\000\000\001\217\003\224\000\000\000j\000\000\001\216\000\212\000\000\002\206\003\226\000\213\001\233\000\000\004\008\000\000\000\163\001D\003\225\000\000\001\217\000\000\000\000\000j\000\000\000\000\001\248\000\000\000k\003\226\000\000\000h\000l\003\238\000\000\000s\000\000\000\226\000j\000\000\000\000\000\000\003\240\000k\000\000\000\000\004\t\000l\003\252\001\232\000h\000h\000\000\000\000\000q\000s\000u\000\000\000\000\000\000\000\000\003\240\000\000\000\000\000>\003\245\000\000\003\252\001\232\000\000\001\233\000u\000\210\000\000\000\233\001\234\000\000\000j\000\000\001\235\000\000\001\216\000k\000\000\001\236\000\000\000l\002\143\000\000\001\233\002\147\000\163\001D\003\225\001\234\001\217\000j\000j\001\235\000\000\000\000\000k\000k\001\236\003\226\000l\000l\000\000\003\238\000\000\000u\000\000\000\000\001\200\001\201\000\000\000\000\000\000\000j\000\227\000\000\000\212\000\000\000\000\000\000\000\213\000\000\000\000\000\000\000u\000u\000\000\000\000\000j\000\163\000\164\003\240\002\148\000v\000\000\003\245\002\149\003\252\001\232\000h\004*\000\000\000\000\000q\000\000\000\000\000\226\000\000\000v\000\167\000\168\000\170\000\171\000>\000j\000\000\001\202\000w\000\000\001\233\001\203\000\000\000\000\000\251\001\234\000\000\000\000\000\000\001\235\000\000\000\000\000\000\000w\001\236\000\000\000\000\000\000\000\000\000\172\000\000\000\173\000\000\000\000\000\149\000\252\000j\000\000\000v\000\000\000\253\000k\000\000\000\000\000\254\000l\000\210\000\000\000\233\000\255\000\000\000\000\000\000\000\163\000\164\000\000\000y\000v\000v\000\000\000\150\000\000\000w\000h\000\151\000\000\000\000\000q\000\000\000u\000{\000y\000\178\000\167\000\217\000\170\000\171\000>\000\000\000\227\002\162\000w\000w\000\000\000\000\000\143\000\000\000\000\000x\000\000\000\000\000\000\000j\000\000\002\163\000\212\000\000\000\000\000\000\000\213\000\000\000\000\000\172\000\000\000\173\004,\001\216\000\149\000x\000j\000y\000\000\000\000\000\000\000k\000\159\000\000\000\000\000l\000\000\001\217\000\000\000\000\000\000\000{\000\226\001\200\001\201\000\251\000y\000y\000\000\000\000\000\150\000\000\000\162\000h\000\151\000\000\000\000\000q\000\000\000u\000{\000{\000\178\000\000\000\163\000\164\000\252\000>\000v\000\000\000\000\000\253\000\000\000\000\000\000\000\254\000\000\000\000\000\000\000\000\000\255\000\000\002\195\000\000\000\167\001\207\000\170\000\171\000\000\000j\000\000\001\202\000w\000\000\000\000\001\203\002\208\000\000\000\000\000j\000\000\000\000\000\000\000\000\000k\000\000\001\233\000\000\000l\000\000\000\000\000\000\000\000\000\172\000\000\000\173\002\143\000\000\000\149\002\167\001\250\000\000\002\143\000\000\000\227\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000u\000\000\000\000\000\000\000\000\000\163\000\164\000\000\000y\000v\000\000\000\000\000\150\000\000\000\000\000h\000\151\000\000\004.\000q\000\000\000\000\000{\000\000\000\178\000\167\002^\000\170\000\171\000>\000j\000\000\000\000\000w\002\148\000\000\002[\000\000\002\149\000\000\002\148\000\251\000\000\000\000\002\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\172\000\000\000\173\002\143\001\216\000\149\002\147\000j\000\252\000\000\000\000\000\000\000k\000\253\000\000\000\000\000l\000\254\001\217\000h\000\000\000\000\000\255\000q\000\163\000\164\000\000\000y\000v\000\000\000\000\000\150\000\000\000>\000h\000\151\000\000\000\000\000q\000\000\000u\000{\000\000\000\178\000\167\002\153\000\170\000\171\000>\000j\000\000\000\000\000w\002\148\000\000\000\000\000\210\002\149\000\211\000\000\000\000\000\000\000\000\000\000\000\000\000j\000\000\002\187\000\000\000\000\000k\000\000\000\000\000\172\000l\000\173\000\000\002\162\000\149\000\000\000j\000\000\000\000\002\162\000\000\000k\002\233\001\233\000\000\000l\000\000\002\163\002\190\000\000\000\000\000\000\000\000\002\163\000u\000\000\000y\001\252\000j\002\143\000\150\000\212\002\147\000\000\000\151\000\213\000\000\000\000\000\000\000u\000{\000\000\000\178\000\000\000\163\000\164\000\000\000\000\000v\000\000\002\193\000\000\000\000\000\000\000h\000\000\000\000\000\000\000q\000\000\000\000\000\226\000\000\000\000\000\167\003>\000\170\000\171\000>\000\000\000\000\000\000\000w\000\000\000\000\002[\002\162\000\000\000\000\002\148\000\000\000\000\000\000\002\149\000\000\000\000\000\000\002\236\000\000\000\000\002\163\000\000\000\000\000\172\002\195\000\173\002\143\000\000\000\149\002\147\000j\000\000\000\163\000\164\000\000\000k\000v\000\000\002\196\000l\000\000\001\200\001\223\000\000\000\000\000\000\000\000\000\163\000\164\000h\000y\000v\000\180\000\193\000\150\000\171\000\000\000\000\000\151\000\000\000w\003b\000\000\000u\000{\000\000\000\178\000\167\003\242\000\170\000\171\000\000\000j\000\227\000\000\000w\002\148\000\000\000\000\000\000\002\149\000\172\000\000\000\173\001\030\001 \000\149\002[\000\000\001\202\002\187\002\195\000\000\001\203\000\000\000j\000\172\000\000\000\173\000\000\000k\000\149\000\000\000h\000l\002\210\002\162\000q\000y\002\189\000\000\000\000\000\150\000\000\000\000\002\190\000\151\000>\000\000\000\000\002\163\000h\000{\000y\000\178\000q\000\000\000\150\000u\000\000\000\000\000\151\000\000\000\000\000\000\000>\003h\000{\000\000\000\178\001\228\000\163\000\164\000\252\000\000\000v\000\000\002\193\000\000\000j\000\000\000\000\000\000\000\000\000k\000\000\000\000\001\027\000l\000\000\000\210\000h\000\233\000\000\001\"\000q\000\000\000j\000\000\000w\000\000\000\000\000k\002\162\000\000\000>\000l\000\000\002\\\000\000\000\000\000\000\000u\000\000\000\000\000\000\000\000\002\163\001\216\000\000\001(\002\195\000\173\002a\000\000\000\149\000\000\002b\000\000\000\000\000u\000\000\001\217\000\000\000\000\002\196\000j\000j\000\000\000\212\000v\000\000\000k\000\213\000\000\003j\000l\000y\000\000\000h\000\210\000\150\000\211\000q\000\000\000\151\000\000\000\000\000\000\000\000\000\000\000{\002f\000>\000w\000\000\000\000\000\000\000\000\000\226\000u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\200\001\201\001\232\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\195\000\000\000\163\000\164\000\000\000\000\000v\000j\000j\000\000\000\000\000\212\000k\001\233\002\212\000\213\000l\000\000\001\234\000\000\000\163\000\164\001\235\000\000\000v\000\191\000\000\001\236\000\000\000\000\000w\000\000\000\000\000\000\000\000\000\000\000j\000\000\001\202\000\000\000u\000\226\001\203\000\194\000\000\001\200\001\223\000\000\000w\000\000\000\000\001.\000\000\000\173\000\000\000\000\000\149\000\000\000\000\000\000\000\163\000\164\000\000\000\227\000v\002T\004\031\002\143\000\000\000\196\002\166\000\173\000\000\000\000\000\149\000\000\000\000\000\000\000y\000\000\000h\000\000\000\150\000\194\000q\000\000\000\151\000\000\000w\004>\000\000\002[\000{\001\202\000>\000\000\000y\001\203\000\000\000\000\000\150\000>\000\000\000\000\000\151\000\000\000\000\000\000\000\000\0014\000{\000\173\000\251\000j\000\149\000\000\000\000\002\148\000\163\000\164\000h\002\149\000v\000\227\000q\000\000\000j\000\000\000\000\000\000\000\000\000k\000\000\000\252\000>\000l\000y\001\216\000\253\000\000\000\150\000\191\000\254\000\000\000\151\000\000\000w\000\255\000\000\000\000\000{\001\217\000\000\000\000\000\000\000\000\001Y\000\000\000\000\000u\000\000\000\000\000\000\000\000\001\200\001\223\000j\001:\000\000\000\173\001S\000k\000\149\000\000\000\000\000l\000\000\000\000\000\000\000\000\000\000\000\000\002\\\000\000\002T\003k\000\000\000\000\000\000\000\000\000\000\000\000\001\216\000\252\000y\000\000\000\000\002a\000\150\000u\000\000\002b\000\151\000\000\001\200\001\223\001\217\001\029\000{\000\000\002[\000\000\001\202\000\000\002\162\000\000\001\203\000\000\000\000\002d\001\233\000\000\000\000\000\000\002T\003a\000\000\000\000\002\163\000\000\000\000\000\000\000\000\000\000\001\254\000\000\002f\000\163\000\164\000\000\000\000\000v\000\000\000\000\000\163\001D\001\200\001\223\000\000\000\000\002[\000\000\001\202\000\000\001\232\000\000\001\203\001T\000\000\000\000\001\183\000\000\000\000\000\000\000\000\000w\002T\002U\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\233\000\000\000\163\000\164\000\000\001\234\000v\000\000\000\000\001\235\001_\001\185\001e\000\173\001\236\001\\\000\149\002[\001]\001\202\000\173\000\000\000\000\001\203\000\000\001\183\002\\\001\200\001\201\000\000\000w\000\000\000\000\000\000\000\000\000\000\001\216\000\000\000y\000\000\000\000\002a\000\150\000\000\000\000\002b\000\151\001\200\001\223\000\000\001\217\002\012\000{\000\173\000\000\000h\000\149\000\000\000\000\000q\000\000\000\000\000\000\002d\000\000\000\000\002\\\002T\002`\000>\000h\000\000\000\000\000j\000q\001\202\001\216\000\000\000y\001\203\002f\002a\000\150\000\000\000>\002b\000\151\000\000\000\000\000\000\001\217\000\000\000{\002[\000\000\001\202\000\000\000\000\001\232\001\203\000\000\000j\000\000\002d\001\200\001\201\000k\000\000\002\\\000\000\000l\000\000\000\000\000\000\000\000\000\000\000j\000\000\001\216\001\233\002f\000k\000\000\002a\001\234\000l\000\000\002b\001\235\000\000\000\000\000\000\001\217\001\236\000u\000\000\000\000\000\000\001\232\000\000\000\000\000\000\000\000\000\000\000\000\002d\000\000\000\000\000\000\000u\000j\000\210\001\202\000\233\000\000\000\000\001\203\000\000\000\000\001\233\000\000\000\000\002f\000\000\001\234\000\000\000\000\000\000\001\235\000\000\000\000\001\200\001\223\001\236\001\216\000\000\000\000\000\000\000\000\000\000\001\232\000\000\000\000\000\000\002\\\000\000\000\000\000\000\001\217\000\000\000\000\002T\003m\000\000\001\216\000\000\000\000\000j\000\000\002a\000\212\001\233\000\000\002b\000\213\000\000\001\234\000\000\001\217\000\000\001\235\000\000\000\163\000\164\000\000\001\236\000v\002[\000\000\001\202\000\000\002d\000\000\001\203\000\000\000\000\000\000\000\163\000\164\000\000\000\226\000v\000\000\000\000\000\000\002\127\000\000\000\000\002f\000\000\000w\000\000\000\000\000\000\000\000\000\000\000\000\001\200\001\223\000\000\002\127\001\216\000\000\000\000\000\000\000w\001\232\001\233\000\000\000\000\000\000\002\129\000\000\000\173\000\000\001\217\000\149\002T\0044\000\000\000\000\002\000\000\000\000\000\000\000\000\000\002\145\001\233\000\173\000\000\000\000\000\149\001\234\000\000\000\000\000\000\001\235\000\000\000y\001\200\001\223\001\236\000\150\002[\000\000\001\202\000\151\000\000\000\000\001\203\000\000\000\000\000{\000y\000\000\001\200\001\223\000\150\002\\\002T\0046\000\151\000\227\002\143\000\000\000\000\002\147\000{\001\216\000\000\000\000\000\000\000\000\002a\000\000\002T\0048\002b\000\000\000\000\000\000\000\000\001\217\000\000\001\233\002[\000\000\001\202\004M\000\000\000\000\001\203\000\000\000\000\000\000\002d\000\000\000\000\002\006\000\000\000\000\002[\000\000\001\202\000\000\000\000\000\000\001\203\000\000\000j\000\000\000\251\002f\002\148\000\000\001\200\001\223\002\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\232\000\000\000\252\000\000\002\\\003d\000\000\000\253\000\000\000\000\000\000\000\254\000\000\000\000\001\216\000\000\000\255\000\000\000\000\002a\000\000\001\233\000\000\002b\000\000\000\000\001\234\000\000\001\217\000\000\001\235\002[\000\000\001\202\000\000\001\236\000\000\001\203\000\000\002\143\000\000\002d\002\147\000\000\000\000\000\000\002\\\000\000\000>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\216\000\000\002f\000\000\000\000\002a\002\\\000\000\000h\002b\000\000\000\000\000q\000\000\001\217\000\000\001\216\000\000\000\000\000\000\001\232\002a\000\000\000\000\002\162\002b\000\000\002d\000\000\002[\001\217\000h\000\000\002\148\000\000\000q\000\000\002\149\002\163\000\000\000\000\001\233\000\000\002d\002f\000\000\001\234\001Y\002\143\000\000\001\235\002\147\000\000\000\000\000j\001\236\000\000\000\000\000\000\000k\002f\001S\001\232\000l\000\000\000\000\002\\\000\000\000\000\000\000\000\000\000h\000\000\002;\000\000\000q\001\216\000j\001\232\000\000\000\000\002a\000k\001\233\000\000\002b\000l\000u\001\234\000\000\001\217\000h\001\235\000\000\002[\000q\002=\001\236\002\148\001\233\000\000\000\000\002\149\002d\001\234\000\000\001\200\001\201\001\235\002\195\000u\000\000\000\000\001\236\002\187\000\000\000\000\000j\000\000\000\000\002f\000\000\000k\002\214\000\000\000\000\000l\000\000\000\000\000\000\002\162\002\223\002\224\002\226\000\000\000\163\001D\000j\001\232\002\190\000\000\000\000\000k\000\000\002\163\000\000\000l\000\000\001T\000\000\000u\000\000\000j\002\143\001\202\000\000\002\147\000\000\001\203\001\233\002\143\000\000\000\000\002\147\001\234\002\229\000\000\000\000\001\235\000v\000u\002\193\000\000\001\236\000\000\000\000\001_\000\000\001\141\002\187\000\000\001\\\000\000\000\000\001]\000\000\000\173\000\000\000\148\000\000\000\000\002|\000v\000w\000\000\002\162\002\223\005_\002\226\002[\000\000\000\000\000\000\002\148\002\190\000\000\002[\002\149\000h\002\163\002\148\000\148\000q\000\000\002\149\002\195\000w\000\000\000\000\000\149\002\143\000\000\003\003\002\147\000\000\000\000\000\000\000\000\000\000\002\196\002\229\000\000\000v\000\000\000\000\002\143\002\193\000\000\002\147\000\000\000\000\000y\000\149\000\000\000h\000\150\000\000\000\000\000\190\000\151\000\000\002\183\000v\001\216\000j\000{\000w\000\000\000\000\000k\000\000\000\000\000\000\000l\000y\000\000\002[\001\217\000\150\000\000\002\148\001\"\000\151\000\000\002\149\000\000\000w\000\000\000{\000h\002\195\000j\000\149\000q\002\187\002\148\000\000\000u\000\000\002\149\000j\002\187\000\000\000\000\002\196\000k\000\000\000\000\000\000\000l\002\162\002\228\000\149\002\226\000y\000\000\000\000\002\162\000\150\002\190\002\230\000h\000\151\000\000\002\163\000q\002\190\000\000\000{\000\000\000\000\002\163\000h\000u\000y\000j\000q\000\000\000\150\000\000\000k\000\000\000\151\000\000\000l\002\229\001\233\000\000\000{\000\000\000\000\002\193\002\232\000h\000\000\000\000\000\000\000q\002\193\000\000\002\008\002\187\000\000\000\000\000\000\000\000\000\000\000j\000u\003\015\000\000\000\000\000k\000\000\000\000\000\000\000l\002\162\000j\000v\002\230\000\000\000\000\000k\000\000\000\000\002\190\000l\000\000\000\000\000\000\002\163\002\162\000\000\000\000\002\195\002\237\000\000\002\183\000j\000u\000\000\002\195\000w\000k\000\000\002\163\000\000\000l\002\196\000\000\000u\002\232\000\000\000\000\000v\002\196\000\000\002\193\000\000\000\000\000\000\000\000\000\000\000h\000\000\000\000\000\000\000q\000\149\000\000\000\000\000u\000\000\000\000\000\000\000\000\000\000\000\000\000w\003\023\000h\000\000\000\000\000h\000q\000\000\000\000\000q\000\000\000v\000y\000\000\000\000\000\000\000\150\002\235\000\000\000\000\000\151\000\000\000\000\002\195\000\000\000\000\000{\000\000\001\200\001\201\002\183\000j\000\000\003$\000\000\000w\000k\002\196\002\195\000\000\000l\000\000\000\000\000v\0033\000\000\000\000\000\000\000j\000\000\000\000\000j\002\216\000k\000v\000\000\000k\000l\000\000\000h\000l\000\149\002\183\000s\000u\003J\000\000\000w\000\000\000\000\000\000\000\000\000\000\002\183\000j\000v\001\202\000\000\000w\000\000\001\203\000u\000\000\000y\000u\000\000\000\000\000\150\000\000\000\000\000\000\000\151\000\000\000\149\002\183\000\000\000\000\000{\000\000\000w\000\000\000\000\000\000\000\000\000\149\000j\000\000\000\000\000\000\000\000\000k\000\000\000\000\000h\000l\000y\000h\000q\000\000\000\150\000q\000\000\000\000\000\151\000\000\000\149\000y\000\000\000h\000{\000\150\000\000\000q\000\000\000\151\000\000\003R\000\000\000u\000\000\000{\000\000\000\000\000\000\000\000\000\000\000v\000y\000h\000\000\000\000\000\150\000q\003\188\000\000\000\151\003\200\000\000\000\000\000j\000\000\000{\000j\000v\000k\002\183\000v\000k\000l\000\000\000w\000l\000\000\000\000\000j\001\216\000\000\000\000\000\000\000k\000\000\000\000\002\183\000l\000\000\002\183\000\000\000w\000\000\001\217\000w\000\000\000u\000\000\000j\000u\000\149\000\000\000\000\000k\000\000\000\000\000\000\000l\000\000\000\000\000\000\000u\000\000\000\000\000\000\000h\000\000\000\149\000\000\000q\000\149\000\000\000y\000\000\000v\000\000\000\150\000\000\000\000\000\000\000\151\000u\000\000\000\000\000\000\000\000\000{\000\000\000\000\000y\000h\000\000\000y\000\150\000q\000\000\000\150\000\151\000w\000\000\000\151\000\000\000\000\000{\000\000\000\000\000{\000\000\000\000\000\000\000h\000j\001\233\000\000\000q\000\000\000k\000\000\003\206\000\000\000l\003\213\000\000\005,\000x\000\000\002\n\000\000\000v\000\000\000\000\000v\000\000\003\222\000\000\000\000\000j\000\000\000\000\000\000\000\000\000k\000\000\000v\000u\000l\000y\002\183\000\000\000\000\002\183\000\235\000w\003\236\000\000\000w\000j\000\000\000\000\000\000\000{\000k\002\183\000v\000\000\000l\000\000\000w\000\000\000u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\149\000h\000\000\000\149\002\183\000q\000\000\000\000\000\000\000w\000\000\000u\000\000\000\000\005\158\000\149\000\000\000\000\000\000\000\000\000\000\000\000\000y\000\000\000h\000y\000\150\000\000\000q\000\150\000\151\000\000\000\000\000\151\000\000\000\149\000{\000y\003\250\000{\000h\000\150\000\000\000\000\000q\000\151\000\000\000j\000v\000\000\000\000\000{\000k\000\000\000\000\000\000\000l\000y\000\000\000\000\000\000\000\150\000\000\004\001\000\000\000\151\000\000\002\183\000\000\000\000\000j\000{\000w\000v\000\000\000k\000\000\000\000\000\000\000l\000u\000\000\000\000\000\000\000h\000h\000j\000\000\000q\000\189\000\000\000k\002\183\000v\000\000\000l\000\000\000w\000\149\000\000\000\000\000\000\000\000\000u\000\000\000h\000\000\000\000\000\000\000q\000\000\000\000\0059\000\000\000\000\000\000\000\000\000w\000\000\000u\000y\000h\000\000\000\149\000\150\000q\000\000\000\000\000\151\000\000\000j\000j\000\000\000\000\000{\000k\000k\000\000\000\000\000l\000l\000\000\000h\000\149\000h\000y\000q\000\000\000q\000\150\000\000\000j\000\000\000\151\000\000\000\000\000k\000\000\000\000\000{\000l\000\000\000v\000u\000u\000y\000\000\000j\000\000\000\150\000\000\000\000\000k\000\151\000\000\000\000\000l\000\000\000\000\000{\000\000\0059\000\000\000\000\000u\000v\000w\000\000\000j\000\000\000j\000\000\000\000\000k\000\000\000k\000\000\000l\000\000\000l\000u\000v\000\000\000\000\000\182\000\000\000\000\000\000\000\000\000w\000\000\000\000\000\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\220\000u\000\000\000u\000\000\000w\000\000\000\000\000\000\000h\000\000\000\000\000\000\000q\000y\000\149\000\000\000\000\000\150\000\000\000\000\000\000\000\151\000\000\000\000\000v\000v\000\000\000{\000\000\000\000\000\149\000\000\000\000\000\000\000\000\000h\000y\000h\000\000\000q\000\150\000q\000\000\000\245\000\151\000v\000\000\000\000\000w\000w\000{\000\000\000y\000\000\000j\000\000\000\150\000\000\000\000\000k\000\151\000v\000\000\000l\001$\000\000\000{\000>\000\000\000w\000\000\000\000\000h\000\000\000\149\000\000\000q\000\000\000\000\000\000\001\170\000j\000v\000j\000v\000w\000k\000u\000k\000\000\000l\000\000\000l\000\000\000\000\000\149\000y\000\000\000\000\000\000\000\150\001\174\000\000\001\210\000\151\000\000\000w\000\000\000w\000\000\000{\000\149\000\000\000\000\000u\000\000\000u\000y\000j\000\000\000\000\000\150\001Y\000k\000\000\000\151\000h\000l\000\000\000\000\000q\000{\000\149\000y\000\149\000\000\001S\000\150\000\000\000\000\000\000\000\151\000\000\000\000\000\000\000\000\000h\000{\000\000\000h\000q\000u\000\000\000q\000y\000\000\000y\000\000\000\150\000\000\000\150\000h\000\151\000\000\000\151\000q\000\000\000\000\000{\000v\000{\000\000\000j\000\000\000\000\000\000\000\000\000k\000\000\000\000\000\000\000l\000\000\000\000\000\000\000\000\000\000\000\000\002\017\000\000\000\000\000\000\000j\000w\000\000\000j\000v\000k\000v\000\000\000k\000l\000\000\000\000\000l\000u\000\000\000j\000\000\000\000\000\163\001D\000k\000\000\000\000\002\022\000l\002\026\000\000\000\149\000w\000\000\000w\001T\000\000\000u\000\000\000\000\000u\000\000\000\000\000\000\000\000\000v\000\000\000\000\000\000\000\000\000\000\000h\000u\000y\000\000\000q\000\000\000\150\000\149\000\000\000\149\000\151\000\000\001_\0021\002q\000\000\000{\001\\\000w\000\000\001]\000\000\000\173\000\000\000\000\000\000\000\000\002\143\000\000\000y\002\147\000y\000\000\000\150\000\000\000\150\000\000\000\151\000h\000\151\000\000\000\000\000q\000{\000\149\000{\000j\000\000\000v\000\000\000\000\000k\000\000\000h\000\000\000l\000\000\000s\000\000\000h\000\000\000\000\000\000\000s\000\000\000\000\000y\002X\000v\000\000\000\150\000v\000w\002[\000\151\000\000\000\000\002\148\000\000\000u\000{\002\149\000\000\000v\000j\000\000\000\000\002\156\000\000\000k\002\171\000\000\000w\000l\000\000\000w\000\000\000\000\000\149\000j\000\000\000\000\002\173\000\000\000k\000j\000\000\000w\000l\000\000\000k\000\000\000\000\000\000\000l\000\000\000\000\000u\000\149\000\000\000y\000\149\000\000\000\000\000\150\000\000\000\000\000h\000\151\000\000\000\000\000s\000u\000\149\000{\000\000\000\000\000\000\000u\000>\000y\000\000\000\000\000y\000\150\000\000\002\143\000\150\000\151\002\147\000\000\000\151\000\000\000\000\000{\000y\000\000\000{\002\187\000\150\000\000\000v\000\000\000\151\000\000\000\000\000\000\000\000\000\000\000{\000>\000\000\000\000\000j\002\162\000\000\000\000\002\192\000k\000\000\003\176\000\000\000l\002\190\000\000\000w\000\000\000\000\002\163\000\000\000\000\000>\000j\000\000\001Y\000\000\002\148\000\000\000\000\000v\002\149\000\000\000\000\000\000\000\000\000\000\000u\000>\001S\000\000\000\000\000\149\000\000\000\000\000v\002\193\000\000\000\000\004\024\000\000\000v\000\000\000\000\000w\000\000\001Y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000y\000\000\000\000\000\000\000\150\000w\001S\000\000\000\151\000\000\000\000\000w\000\000\001Y\000{\002\143\000\149\000h\002\147\000\000\000h\000i\000\000\000\000\000i\000\000\002\195\001S\000>\001Y\000\000\000x\000\000\000\000\000\000\000\000\000\000\000x\000y\000>\002\196\000\000\000\150\001S\000\000\000\000\000\151\000\000\000\000\000\163\001D\000\000\000{\000y\000\000\000v\000\000\000\000\000\237\000y\002\162\000j\001T\000j\001\225\002\148\000j\000{\000k\002\149\000\000\000k\000l\000{\002\163\000l\000\000\000\000\000\000\000w\000\163\001D\000\000\001Y\000\000\000\000\000\000\000\000\000\000\000\000\001_\000\000\002\255\001T\001Y\001\\\000u\001S\001]\000u\000\173\000\163\001D\000\000\000\000\000x\000\000\002\143\001S\000\000\002\147\000\000\000\000\000\000\001T\000\000\000\000\000\163\001D\000\000\000\000\001_\000\000\003\n\000h\000\000\001\\\000y\000i\001]\001T\000\173\001\227\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000{\001_\000\000\003/\002\195\000\000\001\\\000\000\000\000\001]\000\000\000\173\000j\000\000\000\000\000\000\002\148\001_\002\218\003E\002\149\002\162\001\\\000\000\000\000\001]\000\000\000\173\000\000\000j\000\163\001D\000\000\000\000\000k\002\163\000\000\000v\000l\000\000\000v\000\163\001D\001T\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001T\000\000\000\000\000\000\000\000\000\000\000\000\000w\000u\000\000\000w\000\000\000\000\000\000\000\000\000\000\000\000\001_\000\000\003\196\000\000\000\000\001\\\000\000\000\000\001]\000\000\000\173\001_\000\000\003\232\000\000\000\000\001\\\000\000\000\000\001]\000\000\000\173\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\195\000\000\000\000\000y\000\000\000\000\000y\002\162\000\000\000\000\000\000\000\000\000\000\000\000\002\220\000\000\000\000\000\153\000\000\000\000\000\155\002\163\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000w\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\195\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\222\000\000\000\000\000\000\000y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\157")) + ((16, "\001\023\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\t\000\000\001#\001r\000\000\001\003\000\195\000\000\000\000\000\000\000\171\000\000\000\002\001\014\000\000\000\000\001D\000\000\002&\000\000\000\000\000\000\002\200\000\000\003\182\000\000\000\000\000\000\000\000\003\188\000\000\004\006\004\020\000\000\000\000\004^\000\000\004\178\000\000\000\000\000\000\005\200\000\000\006\030\000\000\006j\000\000\006\128\007L\000\000\000\000\007V\000\000\007b\000\000\000=\000\000\000\000\000\000\007\150\000\000\007\236\000\000\000\000\008J\000\000\008j\000\000\000\000\000\000\008\144\000\000\003\166\008\244\002@\000\000\000\000\000\000\002H\0009\t\000\000\000\000\000\t\004\000\000\023\178\000\000\005\006\001\029\002L\000\000\000\000\003\150\000\000\0000\000\000\000\025\006L\004\030\0276\004\030\002\162(\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\000\0276\000\000\000\000\019\146\000\000\022\002\000\000\003\146\000\000\000\000\000\000\000\000\000j\000\000\000\226\000\000\000\000\000\023\000\000\0058\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\190\000\000\013,\000\000\015\014\000\000\022\244\000\000\023z\000\000%D\000\000'\014\000\000.\164\000\0004@\000\0004\190\000\000\004\170\000\000\nP\000\000\000\000\000\000\000\000\000\0005\004\000\0005\008\000\0005N\000\000\007l\000\000\000\000\n\246\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\164\t6\000\000\000\000\tT\000\000\t\148\t\188\000\000\000\000\t\242\000\000\n\002\000\000\000\000\000\000\n2\000\000\n4\000\000\000\000\n6\000\000\nj\np\000\000\000\000\nr\000\000\nv\000\000\000\000\000\000\n\136\000\000\n\152\000\000\n\154\000\000\n\176\n\200\000\000\000\000\n\208\000\000\n\222\000\000\000\190\n\232\000\000\n\234\000\000\n\240\000\000\011\000\000\000\000\000\000\000\011\002\000\000\011\004\011\024\000\000\011\022\000\000\000/\024\190\000\000\006\030\000\000\006$\000\000\000\000\008&\000\000\000\000\001\011\001\196\000\000\000\000\000\000\000\000\001`\000\000\002N\000\000\019\188\000\000\019.\000\000\000\000\000\000\000\000\000\000\000\000\019\232\000\000\000\000\000\000\000\000\001\007\000\000\000\000\000\000\000\000\000\000\000\000\000\164\002\150\013\192\000\000\011\024\000\000\011\026\024$\000\000\011*\000\000\000\000\006\134\000\000\000\000\000\000\000\000\000\000$\174\000\0000z\000\000\000\000\000\000\003L\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017`\000\000\000\000\000\000\000\000\000\000\000\000\003\236(\014\000\000\007j\000\000\018F \008\000\000\000\000\000\000\003~\000\000\017(\000\000\000\0000\248\000\000\000\000\000\000\003\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\216\000\000\013\200\000\000\000\000\000\000\000\000\000\014\000\000\000\0001\014\000\000\000\000\000\000\000\014\001\212\000\000\000\000\000\000\000\000\000\000\000\000\007\016\000\000\016\144\000\000\018\234\000\000\019|\000\000\027|\000\000\029\016\000\000\030~\000\000\031\140\000\000 \000\000\"&\000\000\020\024\000\000\008V\000\000$4\000\000&\230\000\000*@\000\000\000\000\000\000\000\000\000\000\000R1&\000\000\002\028\000\000\000\000\002(\006\002\000\000\0024\000\000\000\000\000\000\004 \000\000\000\000\000\000(\174\000\000\000\000\000\000\000\000\000\000(\246\000\000\000\000\000\000\000\000\000\000\000\000\000\168\000\000\000\000\000\000\011,\026\166\000\000\011.\000\000\000\000\000\000\000\000\000\000\0112\000\000\000\000\000\008\006\230\000\000\007H\000\000\000\000\000\000\000\198\000\000\012t\000F\011>\000\000\000\000\011D\000\000\011L\011V\000\000\000\000\011f\000\000\011z\000\000\000\000\000\000\011|\000\000\011~\000\000\000\000\011\132\000\000\011\134\011\142\000\000\000\000\011\164\000\000\011\166\000\000\000\000\000\000\011\168\000\000\011\170\000\000\011\176\000\000\011\202\011\204\000\000\000\000\011\210\000\000\011\212\000\000\004L\011\214\000\000\011\218\000\000\011\220\000\000\011\222\000\000\000\000\000\000\011\224\000\000\004\242\000\000\000\000\011\230\"\132\000\000\011\234\000\000\000\000\002$\000\000\000\000\000\000\000\000\004N$ \000\000\011\240\000\000\011\242-\"\000\000\012\024\000\000\000\000\013\024\012(\000\000\000\000\012*\000\000\012,\0120\000\000\000\000\0126\000\000\012:\000\000\000\000\000\000\012D\000\000\012F\000\000\000\000\012H\000\000\012L\012N\000\000\000\000\012R\000\000\012X\000\000\000\000\000\000\012Z\000\000\012h\000\000\012l\000\000\012r\012\130\000\000\000\000\012\134\000\000\012\146\000\000\004t\012\150\000\000\012\166\000\000\012\168\000\000\012\174\000\000\000\000\000\000\012\178\000\000\012\180-\176\000\000\012\184\000\000\000\000\0054/0\000\000\012\192\000\000\012\194/>\000\000\012\196\000\000\000\000\000\000\000\000\000\000\000\000\000\0001L\000\000\021\142\000\0001\204\000\000\000\000\000\128\000\000\007Z\000\000\005j\018z)@\000\000\000\000\000\000\008\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\164)@\000\000\019\206\000\000\022\128\020\250\000\000\000\000\000\000\005Z\000\000 \236\000\000\000\0002\020\000\000\000\000\000\000\006\138\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0144\000\000!\154\000\000\000\000\000\000\002X\000\000\000\000\000\000\000\000\000\000\000\000\002h\000\000\006\200\000\000\008\234\000\000\t\022\000\000\015\244\000\000\017\212\000\000\018,\000\000\023\248\000\000\025&\000\000\028&\000\000\026.\000\000\0028\000\000\028\244\000\000\0294\000\000 \152\000\000)\188\000\000\000\000\000\0002b\000\000\000\000\000\000\000<\000\0002\144\000\000\000\000\000\0002\224\000\000\000\000\000b\000\000\025\016\000!\002\026\000\000\004\154\000\000\013R\0022\008\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0003\030\000\000$\200$Z\006\194\000\000\000\000\000\000%\128\000\000(\028\000\000*\132\000\000%\160&x\000K\002\174\006\220\000\000\000\000\000\000\002\208\000\000\000\000\002,\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\00036\000\000\000\000\000\000\000\000\000\000!\128\000\000&\142\000\000\000\000\000\000\000\000\000\000\000\000\014\004\000\000\005H\000\000\000\000\000\000\000\000\004f\001\136\000\000\000\000\022\212!8\000\000\022\136+\004\000\000\000\000)\190\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\025V)\190\000\000\026\002\000\000\027\n\000\206*\006\000\000\019V\000\000\000\000\000\000\007F\000\000!\254\000\000\000\0003l\000\000\000\000\000\000\007\252\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0003\180\000\0003\186\000\000\000\000\000\000$6\000\000\000\000+\180\000\000\000\000\000\000\000\000\008$\000\000\000\000\000\000$P\000\000\000\000*\204\000\000\000\017\000\000\000\000\000\000\002\136\000\000\005\144\000\000\013\"\000\000\014N\000\000&N\000\000),\000\000,~\000\000,\152\000\0000\134\000\0000\178\000\0002\160\000\0003\234\000\0004\218\000\000\000\000\000\000\000\000\000\000!\206\000\000\n\226\000\000 \212\012\208\000\000*\208\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000I\000\000\000\000\000\000\000\000\006\154\000\000\007\192\000\000\000\000\021\136\000\000\000\000\000\000+\202\000\000\000\000\000\000\000\000\000\000\030\186\000\000\000\000\000\000\000\000,\028\000\000\000\000\000\000\000\000\0034\004\022\000\000,J\000\000\000\000\000\000\000\000\025~\000\196\000\000\025\244\000\000\000\000\008b\000\000,P\000\000\000\000\000\000\000\000\000\000\003V\000\000\000\000\014\154\000\000\026\192\000\000\000\000\"\144\000\000\000\000\000\000\006\166\000\000\000\000\008X\000\000\000\000\"~\000\000\000\000\000\000,\156\000\000\000\000\000\000%\186\000\000\000\000\000\000\000\000,\202\000\000\000\000\000\000\000\000\004\178\nl\000\000-\156\000\000\000\000\000\000\000\000\000\000\000\000\015(\000\000\000\000\004\026\000\000\015\230\000\000\006\166\000\000\000\000\004:(\144\000\000\004X\000\000\000\000\000\000\000\000\002X\000\000&\202\000\000\0278\0016\027\176\000\000\003\154\000\000\016p\000\000\017*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0052\028F\004\150\028\190\000\000\000\000\000\000\005|\000\000\017\246\000\000\005x\000\000\000\000\007\194\000P\029\138\000\000\002\140\000\000\018t\030\000\000\000\000\000\019@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\142\008\160\000\000\006b\000\000\000\000\000\000\000\000\005f\000\000\019\254\000\000\000\000\000\000#R44\000\000\000\000\000\000 T\000\000\000\000\000\000\000\000\006\222\t\018\000\000\000\000-\234\000\000\000\000\000B\000\000\tX\000\000\000\0000f\000\000\000\000\000\000.R\000\000\000\000\000\000\000\000.p\000\000\000\000\007\212\t\156\000\000\000\000.v\000\000\000\000\007\152#\186\000\000\t\194\000\000\000\000.\144\000\000\000\000\000\000\000\000\000\000\000\000\000\000#r\000\000\000\000\000\000\002\174\000\000\000\000\t\210\000\000\000\0000\144\000\000\000\000\000\000.\198\000\000\000\000\000\000\000\000/v\000\000\000\000\t`\t\220\000\000\000\000/\142\000\000\000\000\008\222\000\000\000\000\000\000\000\000\002X\004\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\254\000\000\020\140\000\000\000\000\000\0004r\000\000\tF\000\000\000\000\000\000\001x\000\000\000\000\005\216\021\004\000\000\022\018\000\000\000\000\000\000\006\164\000\000\013 \007\028\016\028\000\000\017@\000\000\000\000\000\000\008\176\000\000'\006\008\208'\172\000\000'\244\000\000\000\000\000\000\008\222\000\000\022\190\t\012\000\000\000\000\008\016\008b\t\154\014&\000\000\015J\000\000\000\000\000\000\n\n\000\000\029\166\nP\000\000\000\000\000\000\000C\000\000\000\000\000\000\000|\000\000\000\000\000\000\000\000\000\000\000\000\013z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\184\000\000\000\000\000\020\000\000\000\000\013|\000\000\000\000\000\000\000\000\005$\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\132\000\000\000\000\013b\000\000\000\012\000\000\000\000\001\164\000\000\006\160\013\028\001h\000\000\000\000\006\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003D\002\130\000\000\000\000\t\228\000\000\000\000\000\000\003^\000\000\000\000\005\242\006\n\000\000\000\000\000\000\000\000\008\134\008\204\002\018\000\000\t\200\000\000\000\000\000\000\000\000\000\000\000\000\0048\000\000\000\000\002\212\000\000\000\000\012\234\000\000\000\000\0005\000\000\000\000\012&\000\000\006\206\013\160\006\228\000\000\000\000\004\210\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000:\n\134\000\000\000\000\000\000\000\000\n\162\000\000\000\000\011,\000\000\000\000\013\020\000\000\000\000\t*\014\030\002\200\000\000\014\194\000\000\000\000\000\000\000\000\013x\000\000\000\000\000\000\000(\000\000\0070\006\206\005\"\000\000\000\000\000\000\000\000\004\154\000\000\000\000\000\000\000\000\000\000\000\000\000h\000\000\000\000\006B\000\000\007\182\013\182\007\\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\170\000\000\000\000\015\224\019\002\000\000\000\000\000\000\000\000\000\134\000\000\013z\011\224\000\000\016n\000\000\000\000\000\000\000\000\000\000\004\128\021v\000\000\000\000\022l\000\000\000\000\000\000\000\000\012F\000\000\024H\000\000\000\000\000\000\000\000\004\248\000\000\000\000\000\000\000\151\000\000\000\000\000\217\000\000\000\000\000\000\000\000\000\000\000\000\000\0000:\000\000\000\000\000\000\000\159\000\000\000\000\000\000\000\000\000\000\000X\n^\011~\011\154\000\000\006\154\tB\t\160\t\208\000\000\000\000\000\000\000\000\000\000\000\000\008F\022\138\000\000\030\142\008\206\000\000\000\000\n,\000\000\023V\000\000*P\000\000\000\000\008\210\023\204\000\000\031P\000\000\nb\031\218\000\000\000\000\000\000\005\246\006\154\000\000\000\000\000\000\000\000\008\176\000\000\003\016\000\000\004\168\006\210\000\000\000\000\000\000\001`\000\000\002N\000\000\008^\000\000\000\000\001\236\000\000\000\000\000\000\000\000\t\230\000\000\000\000\011\008\000\000\024\152\000\000\nT\013z\000\000\000\000\000\000\000\000\000\000\001\172\000\000\000\000\000\000\000\000\000\0000b\000\000\000e\000\000\000\000\000\000\000\000\000\000\001\156\000\000\n\140\002\008\0112\000\000\003\"\011\206\000\000\005\186\000\000\003\228\000\000\004\202\000\000\005t\000\000\nT\000\000\000\000\000\000\000\000\000\000\006\016\000\000\n&\000\000\006\186\000\000\nT\013\200\000\000\000\242\000\000\013\188\012\170\000\000\002D\000\000\008\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\\\000\000\n\146\000\000\000\000\000\000\000\000\000\000\000\000\013\196\000\000\000\000\012\210\000\000\000\000\012\188\007\022\013\240\000\000\013\246\000\000\000\000\004\198\nd\000\000\012\236\000\000\000\000\013*\000\000\000\000\000\000\000\000\000\000\000\000\013\246\000\000\000\000\000\000\013\006\012\232\n\200\005`\013\004\013H\000\000\000\000\012\254\n\238\n\248\013\026\013P\000\000\000\000\011\136\000\000\000\000\000\000\000\000\014\024\000\000\000\000"), (16, "\002\175\002\198\006\031\006 \001a\000\132\001\197\000\006\000Y\000\143\001\206\001\007\005-\003\214\000\011\000Y\001(\005\162\001*\003T\004M\0045\006$\001a\000\018\001x\006\135\000D\000D\006\136\006)\000\t\000\n\006*\000D\005\163\000D\005\166\005[\000\n\001a\000a\001x\003\008\003\t\006\026\006\027\005h\004\001\005W\002\177\006.\000\134\000\134\002\178\001c\000\017\002.\000\135\001d\002\175\002\198\000\136\005X\005\209\005i\0023\006S\000\021\005l\005[\000\134\005\162\006T\001c\000Y\004n\006'\001d\006U\006\140\004\000\005\207\005\210\005[\001q\000\145\005`\000\134\005\254\005\163\001c\005\166\005[\005\225\001d\005\\\003\231\0023\004|\004\234\002\203\005L\001\175\001q\001)\006'\001)\004\001\005\225\002\177\001\207\005\226\0011\002\178\005\229\005[\000D\001}\003p\005M\001q\003t\005a\003\253\005P\005[\005\226\005\\\000\132\005\229\005[\005O\000\141\003\254\006'\003/\000b\003C\004x\003\163\001\134\005\\\000E\000Y\001\211\001<\001\180\002\191\001\228\005M\005\\\006W\003H\000\025\005P\005[\003I\004\008\000D\002\192\004~\004[\004\240\001r\000\146\001\230\000\134\0032\0033\0035\003u\004I\006X\005\\\003v\006\226\000\134\004\239\005b\001\182\003\215\000\135\001r\005\\\006\227\000\136\000\147\003M\005\\\005\255\004O\0046\003\162\004U\001\t\001?\0010\003C\004\016\001r\005\178\004l\001\135\004-\002\207\000b\001\136\002\191\003\232\000\145\001\198\000\148\003H\005\\\004\248\000Y\003I\004\008\006Y\002\192\005b\002\175\002\198\001\128\002\208\000\138\005o\006Z\001\138\002\209\005x\006s\000\149\002\210\006\141\001\208\000Y\000\188\002\211\000D\006U\006\142\004\000\001\231\003V\001\138\000\151\003M\001\139\004\169\005k\004\011\006u\001\140\002>\005\184\000Y\001\141\004\016\000D\001\230\006w\001\142\004-\002\207\001\139\003\131\000\245\005i\004\001\001\140\002\177\005l\005[\001\141\002\178\000Y\005\237\003\132\001\142\006\161\003\008\003\t\004\235\002\208\005]\002>\000\024\000\146\002\209\006\127\006\128\006\002\002\210\0020\006\144\002\175\002\198\002\211\002\175\002\176\005p\000\191\000\192\000\194\000\195\006\235\004\237\004\250\000\132\000\147\000Y\001\020\000\141\000\027\003T\004M\0045\000Y\000[\001\219\000_\000Y\002\175\002\176\001\217\001\021\005\144\005[\006\162\000\196\005\\\000\197\006j\004W\000\177\001\207\0022\004\251\003p\006\159\000D\003t\006\132\004\001\003\134\002\177\000\134\001'\002\177\002\178\000a\001a\002\178\001x\000a\000\149\000\134\000D\003C\000\178\004n\000\135\006\186\000\179\005~\000\136\001\137\000b\002\191\000\151\000\134\001A\002\177\003H\001\180\001\204\002\178\003I\004\008\006\163\002\192\001\186\005\127\005[\004\237\005\\\000\134\001\186\006Z\000\145\003u\000Y\006\165\000D\003v\004\\\002\203\006'\001\175\000\134\003\011\001\223\001c\000\197\001\180\003\231\001d\001\181\003M\005s\005\156\003W\004\011\006\167\001\188\002\175\002\198\005\198\005[\004\016\001\187\000Y\006\169\004q\004-\002\207\000\029\003\216\001\135\001}\000Y\004\250\001q\003C\006U\006\147\0045\002\206\005\254\0011\001\022\005\\\001\023\002\191\000\197\002\208\002\191\0023\003H\003/\002\209\004\n\003I\004\008\002\210\002\192\006l\004^\002\192\002\211\006c\003\254\006d\004\001\000\197\002\177\001\"\004I\000\146\002\178\002\191\000\132\003\244\000\132\005~\000\133\005\\\001\203\006j\006\158\001\006\0031\002\192\003M\000D\000\176\003\131\0046\003,\004U\000\147\006\193\005\127\005[\004\016\004O\000Y\004l\003\132\004-\002\207\006\004\0016\002\235\001\t\003.\0010\000!\001\t\000D\0010\001r\002\175\002\198\000b\000\177\001a\004\"\001v\000\134\002\208\000\134\001~\002\208\000\135\002\209\000\135\000Y\000\136\002\210\000\136\006U\006\147\0045\002\211\001\128\000\149\002\211\003-\006\014\000\178\000\132\000\132\000D\000\179\000\141\000\133\002\208\005\130\004;\000\151\005\\\000\145\003C\000\145\003-\000Y\001\138\004\212\003\254\004\001\002\213\002\177\002\191\000\134\003\164\002\178\001c\003H\000Y\003V\001d\003I\004\008\006\153\002\192\006\152\001\139\005\154\003\167\000\197\003\231\001\140\006Z\001\175\000D\001\141\003K\005\153\000\134\000\134\001\142\000Y\001I\000\135\000\135\005\254\001q\000\136\000\136\003\008\003\t\006m\003M\006n\0023\006c\0046\006d\006\155\000\197\000\132\000D\000D\004\016\000\141\005\225\006\157\001f\004-\002\207\004a\000\145\000\145\001\186\003U\000#\002\175\002\198\000(\0011\000\146\000D\000\146\005\226\005\218\002>\005\229\005[\004R\002\208\004D\000Y\001\173\001\175\002\209\006U\006\147\0045\002\210\003C\005\215\001o\000\147\002\211\000\147\004D\001\188\005\133\000\134\002\191\005\172\000Y\004.\000\135\003H\000,\006\006\000\136\003I\004\008\006\153\002\192\000+\004F\004\001\001r\002\177\000\173\005\170\006Z\002\178\000\132\001\183\003K\000\197\000\143\003\008\003\t\004E\000b\006\154\000\145\004\"\000b\005Z\005\\\006\t\006\022\001K\003M\000\146\000\146\005\214\0046\000D\006\155\002\175\002\245\005X\000.\004\016\002\175\002\198\006\157\004\135\004-\002\207\001\177\005\215\003\n\002\025\0028\000\147\000\147\003\254\003p\000Y\000D\003t\000\134\006U\006\147\0045\004\212\000\135\004a\002\208\003\245\000\136\006\213\002n\002\209\001\183\006g\000\197\002\210\000D\000\177\000\132\002&\002\211\0000\000\133\003\249\000\134\005\154\002\177\000\197\005\216\004\001\002\178\002\177\000\145\004c\003C\002\178\006\144\004i\000\149\001\191\000\146\005\157\000\178\000\134\002\191\006\156\000\179\003u\003\218\003H\003\243\003v\000\151\003I\004\008\006\153\002\192\000\176\006\024\002\175\002\198\000Y\000\147\002>\006Z\0061\000\134\000Y\003K\006\012\004k\000\135\004i\005~\000Y\000\136\003P\006\220\006U\006\147\0045\006\150\004\129\000b\003M\005~\006\231\000\177\0046\000\132\006\155\005\127\005[\000\141\003U\004\016\005\216\005r\006\157\000\145\004-\002\207\006h\005\127\005[\004j\002\133\004\001\000\149\002\177\005\228\000\146\000\178\002\178\000D\004\131\000\179\000D\001\183\003C\000\197\002\208\000\151\006\164\002\191\002\180\002\209\001\209\005\226\002\191\002\210\005\229\005[\000\147\003H\002\211\002\192\000\134\003I\004\008\006\153\002\192\000\135\003\131\002\175\002\198\000\136\0066\004f\006Z\005\\\002\175\002\176\003K\006\220\003\132\005\219\005\002\000\148\000Y\0004\003V\005\\\006U\006\147\0045\000D\003V\000D\003M\000\145\000Y\005p\0046\005\004\006\155\003\231\000Y\000\146\000\149\004\016\000Y\003\231\006\157\000\150\004-\002\207\001a\004\129\001b\005\\\001\192\004\001\000\151\002\177\005\169\000D\003C\002\178\000\134\000\147\002\177\005\215\0006\005v\002\178\002\208\002\191\006\168\000D\004\151\002\209\003H\005\170\0062\002\210\003I\004\008\006\153\002\192\002\211\004\130\003\164\000b\002\175\002\198\000b\006Z\006b\005\176\000Y\003K\001a\000\132\001u\000\134\003\169\000\143\001c\000Y\005w\0008\001d\003T\004M\0045\000\149\003M\006V\000\146\003\243\0046\000<\006\155\001\185\005\169\000\197\005\139\004\016\005\005\000\153\006\157\000D\004-\002\207\005\177\001\177\001.\001q\005\137\001\012\000\147\004\001\005\170\002\177\000b\005\004\002\189\002\178\005\222\000\134\000\134\003C\001c\002\208\000b\000\135\001d\003\232\002\209\000\136\000b\002\191\002\210\004\"\006:\000\177\003H\002\211\002\191\0011\003I\004\008\006\153\002\192\003\028\006\210\002\175\002\198\003V\005\221\002\192\006Z\001q\000\145\005\223\003K\000\149\003+\001=\005\012\000\178\000Y\000D\003\231\000\179\003T\004M\0045\003\237\000Y\000\151\003M\004\175\003T\004'\0046\005\014\006\155\003\008\003\t\000Y\004\224\004\016\005\235\003\241\006\157\001r\004-\002\207\001a\004+\001b\000D\000;\004\001\006c\002\177\006d\000>\000\197\002\178\003C\005\031\004\157\000@\004\174\001\186\001\225\002\208\000\197\003x\002\191\000D\002\209\004\226\002\208\003H\002\210\005\173\005\236\003I\004\008\002\211\002\192\004\243\004[\002\175\002\198\003V\002\215\000F\001r\000\146\002\175\002\176\003K\001\028\000\134\000D\001\188\001c\000Y\005~\000D\001d\003T\004M\0045\003\008\003\t\001\021\003M\001\139\006\221\000\147\0046\001\227\004U\000\197\006B\005\127\005[\004\016\002\175\002\176\004\021\001\144\004-\002\207\003\254\001q\000b\000b\000H\004\001\004\"\002\177\005~\005\232\000\148\002\178\000\134\000\134\002\177\003C\002\175\002\176\002\178\002\208\000Y\000[\000\\\000_\002\209\002\191\005\127\005[\002\210\006>\003H\000\149\003\129\002\211\003I\004\008\000\187\002\192\004Y\004[\002\175\002\198\000\134\004\008\002\177\000\151\003\221\004'\002\178\003K\005\\\000K\003\154\000a\005\206\000Y\006\186\0066\006i\003T\004M\0045\000D\004+\000\134\003M\002\177\000M\0011\0046\002\178\004U\005\207\005\210\005[\004\224\004\016\005 \000b\004\021\001r\004-\002\207\000b\004\016\005\\\000Q\004\021\004\001\004-\002\177\001\031\005\015\001+\002\178\003C\001\022\000D\001\023\006L\000\197\004\218\002\208\005\224\0066\002\191\005\022\002\209\004\225\005\014\003H\002\210\002\191\005\025\003I\004\008\002\211\002\192\004\128\004[\002\175\002\198\004\025\005\024\002\192\006\\\001\166\004\002\0066\003K\005\024\000D\005\\\000\132\005~\000Y\001\222\001P\005\028\003T\004M\0045\002\191\004\006\000^\003M\001\139\006h\005\129\0046\000D\004U\005\127\005[\002\192\005\014\004\016\005\150\000D\004\021\001\142\004-\002\207\000D\002\191\006E\005\127\005[\004\001\000\199\002\177\000b\006\144\000\132\002\178\003\254\002\192\000\133\003C\003\008\003\t\000\134\002\208\001\006\000\202\006\187\000\135\002\209\002\191\002\197\000\136\002\210\005\148\003H\0066\000Y\002\211\003I\004\008\0061\002\192\004\247\004[\002\175\002\198\0069\000b\001\t\003V\0010\005%\005\\\003K\006\212\000\145\004\152\000\206\006\166\000Y\002\208\003V\000\134\006U\003\231\004\000\005\\\000\135\005'\003M\005~\000\136\005\170\0046\002\217\004U\000D\000\205\006\186\005\239\004\016\000b\002\208\004\021\005~\004-\002\207\003p\005\127\005[\003t\004\160\004\001\0068\002\177\000\145\002\219\000\132\002\178\003C\000b\000\143\005\127\005[\000\208\006\186\002\208\005(\000b\002\191\006\160\002\209\000\210\000b\003H\002\210\006t\0067\003I\004\008\002\211\002\192\006q\004[\005'\004\176\003\254\002\175\002\198\000Y\000[\001\003\000_\003K\000\146\003B\000\214\000\216\000\219\003u\006Q\005+\000Y\003v\004\185\000\134\006U\005\\\004\000\003M\000\135\005\162\004\203\0046\000\136\004U\000\147\004\219\005\014\005\146\004\016\005\\\000a\004\021\000\223\004-\002\207\000\222\000\225\005\163\000\227\005\166\005[\000b\000\146\004\001\004\"\002\177\000\145\000\231\000Y\002\178\003C\006:\0061\000b\002\208\000\233\000\235\006<\006\230\002\209\002\191\006\145\000Y\002\210\000\147\003H\0061\000\239\002\211\003I\004\008\006\146\002\192\002\175\002\198\006\189\006\243\006\237\000\132\000\238\006Z\006\238\000\143\000\241\006\149\004'\006\244\003\156\000Y\000\175\000\243\0063\006U\000\197\004\000\000\246\000\248\004/\005\\\000\250\003M\004+\006\191\003\131\004\011\006\151\003\199\000\252\001\000\001@\000\149\004\016\003\159\0043\006\157\003\132\004-\002\207\001\005\0015\001;\004\001\005\182\002\177\000\151\000\146\000\134\002\178\001:\001\216\001\215\000\135\001\221\003C\003\201\000\136\005\187\002\208\001\235\006\148\003\162\001\238\002\209\002\191\005\165\001\242\002\210\000\147\003H\006\220\001\241\002\211\003I\004\008\006\146\002\192\002\175\002\198\001\244\000\145\001\006\005\206\005\163\006Z\005\166\005[\006\221\006\149\001\246\001\250\001\252\000Y\000\148\001\255\002\003\003T\003\207\004\000\002\002\005\207\005\210\005[\003\164\003M\001\t\006\221\0010\004\011\006\151\002\005\002\007\002\011\002\013\000\149\004\016\002\015\003\165\006\157\000\190\004-\002\207\006;\003p\005\190\004\001\003t\002\177\000\151\002\019\002\018\002\178\003C\002\021\002\023\002\026\0062\002\028\002\030\002 \002$\002\208\002\191\002-\005\\\002,\002\209\003H\0027\002=\002\210\003I\004\008\006\146\002\192\002\211\0063\004\253\000\197\000\146\005\\\004{\006Z\001a\003p\001x\006\149\003t\002<\000\132\0063\003B\000\197\000\133\002\128\003u\002@\002C\002G\003v\002F\000\147\003M\002I\005\162\002K\004\011\006\151\002\175\002\198\002O\002Q\002T\004\016\002X\002W\006\157\002Z\004-\002\207\002\\\002`\005\163\000Y\005\166\005[\000\148\003T\002b\004\000\002d\000\134\000\134\002h\001c\003C\003u\000\134\001d\002\208\003v\002g\000\135\002j\002\209\002\191\000\136\000\149\002\210\002l\003H\002o\001z\002\211\003I\004\008\004\001\002\192\002\177\002q\002s\000\151\002\178\002u\001q\002y\002\127\000\132\002~\004p\000\145\000\143\002\132\002\138\002\137\003\156\005:\005U\000Y\000[\0013\000_\005|\005\\\005g\003M\006\019\005u\004y\004\011\004r\003\131\004{\005\159\003\202\005\175\004\016\002\175\002\198\004\021\003\159\004-\002\207\003\132\005\205\003R\005\234\006}\006\171\006\175\006\194\000a\000Y\006\198\006\203\000\134\003T\003\251\004\000\006\204\000\135\000\132\002\208\006\209\000\136\000\143\006\208\002\209\003\162\000Y\006\216\002\210\003\131\003T\003p\006\218\002\211\003t\006\224\005~\006\228\006\229\006\232\001r\003\132\004\001\003C\002\177\000\145\000\146\006\233\002\178\006\236\006\239\006\240\006\248\002\191\005\127\005[\000\000\000\000\003H\005\031\003\205\000\000\003I\004\008\005\007\002\192\000\134\003\164\000\147\002\175\002\198\000\135\000\000\000\000\000\000\000\136\000\000\004p\004\013\000\134\000\000\003\165\000\000\003u\000Y\005\193\001\138\003v\003T\004\014\0045\000\000\000\000\003M\000\000\000\000\000\000\004\011\004r\000\145\000\000\000\000\000\000\000\000\004\016\000\000\001\139\004\021\003\164\004-\002\207\001\140\000\000\005\\\000\149\001\141\000\000\004\001\005~\002\177\001\142\000\000\003\171\002\178\000\146\000\000\000\000\000\132\000\155\000\000\002\208\000\133\003C\000\000\000\000\002\209\005\127\005[\001\006\002\210\002\175\002\198\002\191\000\000\002\211\000\000\000\147\003H\000\000\0048\000\000\003I\004\008\000\000\002\192\000Y\000\000\000\000\000\000\003T\004\014\0045\001\t\000\000\0010\000\000\004:\000\000\000\000\004\008\000\000\000\148\000Y\000\000\000\000\000\134\003T\000\000\000\146\003\131\000\135\000\000\003M\000\000\000\136\000\000\004\011\004<\004\001\000\000\002\177\003\132\000\149\004\016\002\178\005\\\004>\001|\004-\002\207\000\147\000\000\000\000\005\"\000\000\005\031\000\151\003C\000\145\000\000\004\016\000\000\000\000\004\021\000\000\004-\000\000\002\191\000\000\002\208\005\202\000\000\003H\000\000\002\209\000\148\003I\004\008\002\210\002\192\000\000\005\225\000\000\002\211\000\000\002\175\002\198\000\000\000\000\000\000\000\000\003K\002\175\002\176\004=\000\000\000\149\000\000\000\000\005\226\000Y\002\200\005\229\005[\003T\004\014\0045\003M\003\164\005\162\000\151\0046\001a\0047\001x\000\000\000\000\000\000\004\016\000\000\000\000\004\021\003\173\004-\002\207\000\000\000\000\005\163\003C\005\166\005[\000\000\000\000\004\001\000\000\002\177\000\000\000\146\002\191\002\178\000\134\000\000\002\177\003H\002\208\000\000\002\178\003I\004\008\002\209\002\192\000\000\005\200\002\210\002\175\002\198\000\000\000\000\002\211\000\147\000\134\005\\\003K\001c\000\000\004\008\000\000\001d\000\000\000Y\001a\000\000\001b\003T\004M\0045\000\000\000\000\003M\005\225\002\175\002\196\0046\000\000\0047\000\000\000\000\000\000\005\\\004\016\000\000\000\000\004\021\001q\004-\002\207\000\000\005\226\000\000\005$\005\229\005[\004\001\000\000\002\177\000\149\004\016\000\000\002\178\004\021\000\000\004-\000\000\000\000\000\000\002\208\000\000\000\000\000\134\000\157\002\209\001c\000\000\003C\002\210\001d\000\000\000\000\000\134\002\211\002\177\000\000\000\000\002\191\002\178\000\000\000\000\000\000\003H\000\000\002\191\000\000\003I\004\008\000\000\002\192\000\132\002\175\002\198\000\000\000\141\001q\002\192\000\000\000\000\000\000\000\000\003K\001a\005\\\001x\000Y\000Y\000\000\000\000\005\242\003T\004M\0045\000\000\000\000\000\000\001r\003M\001a\000\000\001b\0046\000\000\0047\000\000\000\000\000\000\000\000\004\016\000\000\000\000\004\021\000\000\004-\002\207\000\000\003C\005\248\000\134\004\001\005\t\002\177\000\000\000\135\000\000\002\178\002\191\000\136\000\000\000\000\000\134\003H\000\000\001c\002\208\003I\004\008\001d\002\192\002\209\004T\002\208\001\138\002\210\000\000\000\000\000\134\000\000\002\211\001c\003K\000\145\002\191\001d\001r\002\221\002\175\002\176\000\000\000\000\000\000\000\000\001\139\001q\002\192\000\000\003M\001\140\000\000\000\000\0046\001\141\004U\002\175\002\198\000\000\001\142\004\016\000\000\001q\004\021\000\000\004-\002\207\000\000\000\000\000\000\006\000\000Y\000\000\000\000\000\000\003T\004M\0045\000\000\000\000\000\000\000\000\000\000\002\175\002\176\000\000\002\208\000\134\000\000\002\177\000\000\002\209\003C\002\178\000\000\002\210\001a\000\000\001t\000\000\002\211\000\000\002\191\001\139\004\001\000\000\002\177\003H\000\000\000\000\002\178\003I\004\008\000\146\002\192\000\000\004V\001\146\000\000\002\175\002\198\000\000\002\175\002\198\000\000\001r\003K\000\191\001h\000\194\000\195\000\134\000\000\002\177\000Y\000\147\000\000\002\178\003T\004s\0045\001r\003M\000\000\000\134\000\000\0046\001c\004U\005\011\000\000\001d\000\000\004\016\000\000\000\196\004\021\000\197\004-\002\207\000\177\000\000\000\000\000\000\000\000\000\000\000\000\004\001\000\000\002\177\000\134\001\138\002\177\002\178\000\000\000\000\002\178\001q\001a\002\208\001b\000\149\000\000\000\000\002\209\000\178\000\000\002\191\002\210\000\179\000\000\001\139\000\000\002\211\003C\000\151\001\140\001A\000\000\002\192\001\141\004u\000\000\000\000\002\191\001\142\000\000\001w\000\000\003H\000\000\000\000\000\000\003I\004\008\000\000\002\192\000\000\004h\005~\000\000\002\175\002\198\002\203\000\000\000\000\000\134\000Y\003K\001c\000\000\002\191\003p\001d\000\000\003t\000Y\005\127\005[\000\000\003T\004s\0045\002\192\003M\000\000\000\000\000\000\0046\000\000\004U\001a\000\000\001b\000\000\004\016\001r\003C\004\021\001q\004-\002\207\000\132\000\000\002\208\000\000\001M\002\191\000\000\004\001\002\191\002\177\003H\000\000\000\000\002\178\003I\004\008\002\223\002\192\000\134\002\208\002\192\001\028\003u\000\000\002\209\000\000\003v\000\000\002\210\003K\002\175\002\195\002\205\002\211\005\\\001\021\000Y\000\134\000\000\000\000\001c\004w\000\000\000\000\001d\003M\002\208\000\000\000\134\0046\000\000\004v\000\000\000\135\002\175\002\198\004\016\000\136\000Y\004\021\002\225\004-\002\207\004\137\000\000\002\207\000\000\000\132\000\000\000Y\001q\000\141\000\000\003T\004\014\0045\001r\000\000\000\134\000\000\002\177\000\145\002\208\000\000\002\178\002\208\000\000\002\209\000\000\000\000\002\209\002\210\001\028\000\000\002\210\000\000\002\211\003C\000\000\002\211\000\000\000\000\004\001\000\000\002\177\000\000\001\021\002\191\002\178\000\000\000\000\000\000\003H\000\000\001\028\000\134\003I\004\008\003\131\002\192\000\135\000\000\000\000\000\000\000\136\002\175\002\198\000\000\001\021\000\000\003\132\003K\000\000\000\000\001\164\000\000\000\000\000\000\000\000\000\000\000Y\005\246\001\139\000\000\003T\001\030\004\000\003M\000\145\001r\001\022\0046\001\023\004v\000\197\000\000\001\148\000\000\004\016\000\000\000\146\004\021\000\000\004-\002\207\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\001\000\000\002\177\000\000\000\000\002\191\002\178\002\175\002\176\000\147\000\000\002\208\002\175\002\198\000\000\000\000\002\209\002\192\000\000\003C\002\210\000\000\000\000\000\000\003\133\002\211\000\000\000Y\000\000\002\191\000\000\003T\004\241\004\000\003H\000\000\004{\000\000\003I\004\008\000\000\002\192\001\139\001\031\000\000\001 \000\000\000\000\001\022\000\000\001\023\000\000\000\197\003K\000\146\000\134\001\150\002\177\000\000\000\000\004\001\002\178\002\177\000\000\000\000\001\031\002\178\001%\000\000\003M\001\022\000\176\001\023\0046\000\197\0047\000\147\000\000\000\000\000\000\004\016\002\175\002\198\004\021\000\000\004-\002\207\000\000\000\000\000\000\003C\000\000\004\255\000Y\000\000\005\225\004{\000\000\000\000\000\000\002\191\000\177\003;\004\252\000\000\003H\002\208\000\000\000\000\003I\004\008\002\209\002\192\005\226\000\000\002\210\005\229\005[\000\000\000\000\002\211\000\000\000\149\000\000\004p\000\000\000\178\000\000\000\000\003B\000\179\002\177\000\000\000\000\000\000\002\178\000\151\000\000\000\000\000\132\003M\000\000\000\000\001L\004\011\004r\000\000\002\175\002\198\001\028\003C\004\016\000\000\000\000\004\021\002\191\004-\002\207\000\000\000\000\002\191\000\000\000Y\001\021\000\000\003H\003T\002\192\004\000\003I\004\008\000\000\002\192\000\000\000\000\005\\\000\000\002\208\000\000\000\000\000\000\000\000\002\209\000\000\004p\000\000\002\210\000\134\000\000\000\000\000\000\002\211\000\135\000\000\000\000\004\001\000\136\002\177\000\000\000\000\003M\002\178\002\175\002\194\004\011\004r\003p\002\175\002\198\003\138\000\000\004\016\000\000\000\000\004\021\000\000\004-\002\207\005\225\003C\000\145\000\000\000Y\000\000\000\000\000\000\003T\005\001\004\000\002\191\000\000\004{\002\193\001a\003H\001x\005\226\002\208\003I\005\229\005[\002\192\002\209\000\000\000\132\000\000\002\210\000\000\000\141\000\000\000\134\002\211\002\177\003K\000\134\004\001\002\178\002\177\003u\000\000\000\132\002\178\003v\000\000\000\133\000\000\000\000\000\000\000\000\003M\000\000\000\000\000\000\001\031\000\000\003\224\000\000\000\000\001\022\006\007\001\023\000\134\000\197\000\000\001c\003C\002\207\006?\001d\000\000\000\000\004{\000\134\000\000\000\000\002\191\000\000\000\135\005\\\000\146\003H\000\136\000\000\000\000\003I\004\008\002\208\002\192\000\134\002\175\002\198\002\209\000\000\000\135\001q\002\210\000\000\000\136\006G\004p\002\211\000\147\000\000\000\000\000Y\000\145\000\000\000\132\003T\004\014\0045\000\133\000\000\000\000\000\000\003M\000\000\000\000\000\000\004\011\004r\000\145\000\000\000\000\000\000\003C\004\016\000\000\000\000\004\021\002\191\004-\002\207\000\000\003\131\002\191\000\000\004\001\000\000\002\177\003H\000\000\002\192\002\178\003I\004\008\003\132\002\192\002\175\002\198\000Y\000`\002\208\000_\000\000\000\134\000\000\002\209\000\000\004p\000\135\002\210\000\000\000Y\000\136\000\000\002\211\003T\000\000\004\000\002\175\002\176\000\000\001r\000\000\003M\003\211\000\000\000\000\004\011\004r\000\000\006\n\000a\000\146\000\000\004\016\000\000\000\145\004\021\000\000\004-\002\207\000\000\000\000\000\000\004\001\005\027\002\177\000\000\000\146\003\152\002\178\000\000\000\000\000\000\000\147\000Y\000[\0018\000_\000\000\002\208\000\000\000\000\000\000\000\000\002\209\000\134\001\138\002\177\002\210\000\147\000\000\002\178\000\000\002\211\003C\006M\000\000\000\000\000\177\004{\000\000\000\000\000\000\005\225\002\191\000\000\001\139\000a\000\000\003H\000\000\001\140\000\000\003I\004\008\001\141\002\192\002\175\002\198\000\149\001\142\005\226\000\000\000\178\005\229\005[\006v\000\179\003K\000\000\000\000\000\000\000Y\000\151\000\146\000\149\003T\004\014\0045\000\000\000\000\000\000\000\000\000\000\003M\000\000\000\000\000\000\0046\000\159\0047\000Y\001\008\003C\000_\004\016\000\147\000\000\004\021\000\000\004-\002\207\000\000\002\191\000\000\004\001\000\000\002\177\003H\000\000\000\000\002\178\003I\004\008\000\000\002\192\004\132\002\175\002\198\000\000\001\006\002\208\000\000\005\\\000a\002\191\002\209\004p\002\175\002\176\002\210\000\000\000Y\000\000\000\000\002\211\003T\002\192\0045\000\000\000\000\000\000\000\149\003M\001\t\000\000\0010\004\011\004r\000\000\000\000\000\000\003p\000\000\004\016\003\137\000\161\004\021\000\000\004-\002\207\000\000\000\000\000\000\000\000\004\001\000\000\002\177\000\000\000\000\000\000\002\178\002\175\002\198\000\000\000\000\000\134\001\006\002\177\000\000\002\208\000\000\002\178\000\000\0049\002\209\000\000\000Y\000\000\002\210\000\000\003T\000\000\004\000\002\211\003C\000\000\000\000\000\000\000\000\000\134\001\t\002\208\0010\003u\002\191\000\000\000\000\003v\000\000\003H\000\000\000\000\000\000\003I\004\008\002\227\002\192\000\000\000\000\004\001\000\000\002\177\000\000\000\000\000\000\002\178\006\017\000\000\003K\000\000\002\175\002\198\000\000\000\000\000\000\000\000\000\000\003p\000\000\000\000\003\136\000\000\003\255\000\000\003M\000Y\000\000\000\000\0046\003T\0047\004\000\000\000\001\006\003C\004\016\000\000\000\000\004\021\000\132\004-\002\207\000\000\000\141\002\191\000\000\000\000\000\000\000\000\003H\000\000\000\000\000\000\003I\004\008\002\191\002\192\001\t\004\001\0010\002\177\002\208\000\000\000\000\002\178\000\134\002\209\002\192\004\134\003u\002\210\000\000\000\000\003v\000\000\002\211\000\000\000\000\000\000\003\131\000\000\000\000\000\000\000\000\003M\000\000\000\000\000\134\0046\003C\004\136\003\132\000\135\000\000\000\000\004\016\000\136\000\000\004\021\002\191\004-\002\207\000\000\000\000\003H\000\000\002\233\000\000\003I\004\008\000\000\002\192\002\175\002\198\000Y\000[\001\213\000_\000\000\000\000\000\145\002\208\000\000\004\t\004\015\000\000\002\209\000Y\000\000\000\000\002\210\003T\002\208\004\000\000\000\002\211\000\000\000\000\000\000\003M\000\000\000\000\000\000\004\011\004\012\000\000\002\229\000a\003C\003p\004\016\000\000\003\135\004\021\000\000\004-\002\207\000\000\002\191\000\000\004\001\000\000\002\177\003H\000\000\003\131\002\178\003I\004\008\000\000\002\192\000\132\002\175\002\198\000\000\000\141\002\208\003\132\000\000\000\000\000\000\002\209\004\t\000\000\000\000\002\210\000Y\000Y\000\000\000\000\002\211\003T\000\000\004\000\000\000\000\000\000\000\000\134\003M\000\146\000\000\003u\004\011\004\012\000\000\003v\001a\000\000\001b\004\016\000\000\000\000\004\021\000\000\004-\002\207\000\176\000\000\000\000\000\134\004\001\000\147\002\177\000\000\000\135\000\000\002\178\000\000\000\136\000\000\000\000\000\000\002\175\002\198\000\000\002\208\000\000\000\000\000\000\000\000\002\209\000\000\000\000\000\000\002\210\000\000\000\177\000Y\000\000\002\211\003C\003T\000\145\004\000\000\134\000\000\000\000\001c\000\000\000\000\002\191\001d\000\000\000\000\000\000\003H\000\000\000\149\000\000\003I\004\008\000\178\002\192\000\000\000\000\000\179\000\000\001\006\000\000\000\000\004\001\000\151\002\177\000\000\004\t\000\000\002\178\001q\000\000\000\000\000\000\002\175\002\176\000\000\000\000\000\000\000\000\003\131\000\000\000\000\003M\001\t\000\000\0010\004\011\004\012\000\000\002\175\002\198\003\132\003C\004\016\000\000\000\000\004\021\000\000\004-\002\207\000\000\000\000\002\191\000\000\000Y\000\000\000\000\003H\003T\000\000\004\000\003I\004\008\000\146\002\192\000\000\000\000\000\000\000\000\002\208\004X\000\134\000\000\002\177\002\209\000\000\004Q\002\178\002\210\000\000\001N\000\000\000\000\002\211\000\000\000\147\000\000\004\001\000\000\002\177\000\000\000\000\003M\002\178\000\000\000\000\004\011\004S\001r\002\175\002\198\000\000\003C\004\016\000\000\001\189\004\021\000\197\004-\002\207\000\177\000\000\002\191\000\000\000Y\000\000\000\000\003H\003T\000\000\004\000\003I\004\008\000\000\002\192\000\000\002\175\002\176\000\000\002\208\004P\000\149\000\000\000\000\002\209\000\178\004Q\000\000\002\210\000\179\001a\000\000\001b\002\211\000\000\000\151\000\000\004\001\000\000\002\177\000\000\000\000\003M\002\178\000\000\000\000\004\011\004S\002\175\002\176\000\000\000\000\000\000\004\016\001\139\000\000\004\021\000\000\004-\002\207\000\000\002\191\000\000\000\000\000\134\000\000\002\177\003C\001\152\000\000\002\178\000\000\000\000\002\192\000\000\000\000\000\000\002\191\000\134\002\208\000\000\001c\003H\000\000\002\209\001d\003I\004\008\002\210\002\192\000\000\002\175\002\198\002\211\004d\000\000\000\134\000\000\002\177\000\000\000\000\004e\002\178\000\000\000\000\001a\000Y\001x\000\000\000\000\003T\001q\004\000\000\000\000\000\000\000\000\000\003M\000\000\000\000\000\000\004\011\004g\000\000\000\000\000\000\000\000\003C\004\016\000\000\000\000\004\021\000\000\004-\002\207\000\000\000\000\002\191\002\208\004\001\000\000\002\177\003H\000\000\000\000\002\178\003I\004\008\000\000\002\192\002\175\002\198\002\231\000\134\002\208\004b\001c\000\000\000\000\002\209\001d\004Q\000\000\002\210\002\191\000Y\000\000\000\000\002\211\003T\000\000\004\000\000\000\000\000\000\000\004o\002\192\003M\000\000\000\000\000\000\004\011\004S\000\000\000\000\000\000\001q\000\000\004\016\000\000\001r\004\021\000\000\004-\002\207\000\000\002\191\000\000\004\001\000\000\002\177\000\000\000\000\000\000\002\178\000\000\000\000\000\000\002\192\000\000\000\000\000\000\000\000\001a\002\208\001b\000\000\000\000\000\000\002\209\000\000\002\175\002\198\002\210\000\000\000\000\000\000\000\000\002\211\003C\000\000\000\000\006C\000\000\004t\000\000\000Y\000\000\000\000\002\191\003T\002\208\004\000\000\000\003H\000\000\000\000\000\000\003I\004\008\000\000\002\192\000\000\000\000\000\000\002\237\001\139\000\000\000Y\000\000\000\000\000\134\000\000\004p\001c\001r\000\000\000\000\001d\004\001\001\154\002\177\000\000\002\208\000\000\002\178\000\000\000\000\000\000\003M\000\000\000\000\000\000\004\011\004r\000\000\000\000\002\239\003C\005*\004\016\000\000\000\000\004\021\001q\004-\002\207\000\000\002\191\000\000\000\000\000\000\000\000\003H\000\000\000\000\000\000\003I\004\008\000\000\002\192\001\138\000\000\000\000\001\028\000\000\002\208\000\000\002\175\002\198\000\000\002\209\004p\000\000\000\000\002\210\000\000\000\000\001\021\006O\002\211\001\139\000\000\000Y\000\000\000\000\001\140\003T\003M\004\000\001\141\000\000\004\011\004r\000\000\001\142\000\000\000\000\001a\004\016\001b\000\000\004\021\000\000\004-\002\207\000\000\000\000\000\000\003C\000\000\000\000\000\000\000\000\000\000\000\000\004\001\000\000\002\177\002\191\000\000\000\000\002\178\001r\003H\002\208\000\000\000\000\003I\004\008\002\209\002\192\000\000\000\000\002\210\000\000\000\000\002\175\002\198\002\211\000\000\000\000\000\000\006D\000\000\000\000\000\134\000\000\006R\001c\000\000\000\000\000Y\001d\000\000\000\000\003T\000\000\004\000\003M\001a\000\000\001b\004\011\006F\000\000\000\000\000\000\000\000\000\000\004\016\000\000\001a\004\021\001b\004-\002\207\000\000\000\000\001q\000\000\000\000\000\000\000\000\000\000\004\001\000\000\002\177\001\031\001\139\003\234\002\178\000\000\001\022\000\000\001\023\002\208\000\197\002\175\002\198\000\000\002\209\000\000\001\156\000\000\002\210\003C\000\000\000\134\000\000\002\211\001c\000\000\000Y\000\000\001d\002\191\004\150\000\000\000\000\000\134\003H\000\000\001c\000\000\003I\004\008\001d\002\192\000\000\000\000\000\000\002\175\002\176\000\000\000\000\000\000\000\000\004\181\000\000\006D\001q\000\000\000\000\000\000\000\000\004\184\000\000\002\177\000\000\000\000\000\000\002\178\001q\000\000\000\000\003M\000\000\001r\000\000\004\011\006F\003p\000\000\000\000\003t\000\000\004\016\004\190\000\000\004\021\000\000\004-\002\207\000\132\003C\000\000\000\000\000\141\000\000\000\134\000\000\002\177\000\000\000\000\002\191\002\178\000\000\000\000\000Y\003H\000\000\000\000\002\208\003I\004\008\004\227\002\192\002\209\002\203\000\000\001\175\002\210\000\000\000\000\000\000\000\000\002\211\000\000\006D\003B\000\000\003p\000\000\003u\003t\000\000\000\000\003v\000\000\001r\000\000\000\134\000\000\001\139\003M\000\000\000\135\000\000\004\011\006F\000\136\001r\000\000\000\000\000\000\004\016\000\000\001\158\004\021\000\000\004-\002\207\000\000\000\000\000\000\002\191\000\000\000\132\000\000\000\000\000\000\000\141\000\000\000\000\000\145\004\191\000\000\002\192\000\000\003B\000\132\002\208\000Y\003u\000\143\000\000\002\209\003v\000\000\004\229\002\210\000\000\000\000\000\000\000\000\002\211\000\000\000\000\000\000\002\191\000\000\000\000\000\000\000\000\000\000\001s\003p\000\000\000\000\003t\000\000\002\192\000\000\003\156\000\000\000\134\004\194\001\139\000\000\004\230\000\135\004\217\002\207\000\000\000\136\000\000\000\000\000\000\000\134\003\131\000\132\001\160\003\199\000\135\000\141\000\000\000\000\000\136\003\159\000\000\000\000\003\132\002\208\000\000\000\000\000Y\000\000\002\209\000\145\000\000\001a\002\210\001b\000\146\003B\000\000\002\211\000\000\003u\000\000\003\201\000\145\003v\003\156\000\000\000\000\003\162\000\191\002\182\000\194\000\195\000\000\000\000\000\000\000\000\000\147\002\208\000\000\000\134\003\131\003\192\003\209\003\195\000\135\000\000\000\000\000\000\000\136\003\159\000\000\002\241\003\132\000\000\000\000\000\000\000\196\000\000\000\197\000\134\000\000\000\177\001c\003\206\000\132\000\000\001d\000\000\000\141\003\164\000Y\003\198\000\145\000Y\000[\002*\000_\003\162\000\000\000Y\000\000\000\000\000\149\003\165\000\000\000\000\000\178\000\000\000\146\000\000\000\179\000\000\001q\000\000\000\000\000\000\000\151\000\000\001A\003\156\000\000\000\146\000\191\003E\000\194\000\195\000a\000\000\000\000\000\000\000\147\000\000\000\134\000\000\000\000\003\131\003\197\000\135\003\195\003\164\000\000\000\136\000\000\000\147\003\159\000\000\001\028\003\132\000\000\000\000\000\196\000\000\000\197\003\165\000\000\000\177\000\000\000\000\000\000\000\000\001\021\000\000\000\000\000\000\000\000\000\145\003\198\000\000\000\148\000\000\000\000\000\146\003\162\000\000\000\000\000\000\000\149\000\000\000\000\000\000\000\178\002\175\002\198\000\000\000\179\000\191\003z\000\194\000\195\000\149\000\151\001r\001A\000\147\002\202\000\000\000Y\000\132\000\000\000\000\004\150\000\141\000\000\000\151\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000Y\000\196\003\164\000\197\000\000\000\000\000\177\000\000\000\000\004\231\000\000\000\000\000\000\000\000\000\000\000\000\003\165\004\184\000\000\002\177\000\000\002\175\002\198\002\178\000\000\000\000\000\000\000\149\000\000\000\000\000\000\000\178\000\146\000\134\000\000\000\179\000Y\000\000\000\135\004\190\004\150\000\151\000\136\001A\001\006\001\139\000\191\004\018\000\194\000\195\000\000\000\000\000\000\000\000\000\147\000\000\000\000\000\000\001\031\001\162\004\028\004\183\000\000\001\022\000\000\001\023\000\145\000\197\001\t\004\184\0010\002\177\000\000\000\000\000\196\002\178\000\197\000\000\000\000\000\177\000\000\000\000\001a\003p\001b\000\000\003t\000Y\000[\0025\000_\004\190\000\000\000\000\000\000\000\000\003p\000\000\000\000\003t\000\149\002\175\002\198\000\000\000\178\000\000\000\000\000\000\000\179\000\000\000\000\000\000\000\000\000\000\000\151\000\000\001A\002\191\000\000\000\000\000a\000\000\004A\000\000\000\000\000\000\000\000\004\191\000\000\002\192\000\134\003B\000\000\001c\000\000\003u\000\000\001d\000\000\003v\000\000\004\192\000\000\000\132\003B\000\146\000\000\000\141\003u\003B\000\000\002\177\003v\000\000\000\000\002\178\002\175\002\198\000Y\000\191\004\196\000\194\000\195\001q\000\000\000\000\000\000\000\147\004\194\002\191\000\000\004\199\000\000\004\217\002\207\000\000\000\000\003;\004J\004\191\000\000\002\192\000\000\000\000\000\000\000\000\000\000\000\196\000\000\000\197\000\000\000\134\000\177\004\192\002\208\000\000\000\135\000\000\004G\002\209\000\136\000\000\002\203\002\210\003B\000\000\002\177\000\000\002\211\000\000\002\178\000\000\000\000\000\149\000\000\003\156\000\000\000\178\000\132\000\000\004\194\000\179\000\133\004\199\000\145\004\217\002\207\000\151\003\156\001A\000\000\003\131\003\192\003\193\003\195\000\000\000\000\000\000\000\000\003C\003\159\000\000\001r\003\132\003\131\000\000\002\208\003\158\000\132\002\191\001\006\002\209\000\141\003\159\003H\002\210\003\132\000\000\003I\000\000\002\211\002\192\003\198\000\000\002\175\002\198\000\134\000\000\003\162\000\000\000\000\000\135\000\000\004I\001\t\000\136\0010\000\000\000\000\000\000\000\000\003\162\000\000\000\000\000\000\003;\004@\000\000\000\000\003M\000\000\000\000\000Y\000\000\003C\000\000\000\134\000\000\000\000\000\145\000\000\000\135\000\000\000\146\002\191\000\136\002\207\000\000\001\139\003H\003\164\000\000\003B\003I\002\177\003 \002\192\001C\002\178\000\000\000\195\000\000\001\168\003\164\003\165\000\147\002\208\000\000\003K\000\145\000\000\002\209\000\000\000\000\000\000\002\210\000\000\003\165\000\000\000\000\002\211\000\000\000\000\000\000\003M\000\196\000\000\000\197\001\028\000\000\000\177\003p\000\000\000\000\003t\000\000\000\000\000\000\000\000\000\000\000\000\002\207\001\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\149\002\175\002\198\000\000\000\178\000\000\000\000\000\146\000\179\000\000\002\208\000\000\002\175\002\198\000\151\002\209\001A\000\000\000\000\002\210\000\000\000\000\003;\003<\002\211\000\000\000\000\000\000\000\134\000\147\000\000\003C\003u\003;\003G\000\000\003v\000\146\000\000\000\000\000\000\002\191\002\175\002\198\000\000\000\000\003H\000\000\000\000\003B\003I\002\177\000\000\002\192\000\176\002\178\001a\000\000\001b\000\147\003B\000\000\002\177\003;\004L\003K\002\178\000\000\000\000\000\000\000\000\000\000\002\175\002\198\000\000\000\149\000\132\000\000\000\000\000\000\000\133\003M\000\000\000\000\000\177\000\000\000\000\000\000\000\000\000\163\003B\000\000\002\177\003;\005\017\000\000\002\178\000\000\002\207\000\000\000\000\001\031\000\000\004$\000\134\000\149\001\022\001c\001\023\000\178\000\197\001d\000\000\000\179\000\000\000\000\000\000\000\000\002\208\000\151\003B\000\000\002\177\002\209\000\134\000\000\002\178\002\210\003\131\000\135\000\000\000\000\002\211\000\136\000\000\000\000\000\000\001q\000\000\003C\003\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\191\003C\000\000\000\000\000\000\003H\002\175\002\198\000\145\003I\000\000\002\191\002\192\000\000\000\000\000\000\003H\000\000\000\000\000\000\003I\000\000\000\000\002\192\003K\000\000\000\000\003;\005\019\000\000\000\000\003C\000\000\000\000\000\000\003K\000\000\000\000\000\000\000\000\003M\002\191\002\175\002\198\000\000\000\000\003H\000\000\000\000\000\000\003I\003M\000\000\002\192\003B\000\132\002\177\002\207\003\164\000\141\002\178\003C\000\132\003;\005\021\003K\000\141\001r\002\207\000\000\000Y\002\191\003\175\000\000\000\000\000\000\003H\002\208\000\000\000\000\003I\003M\002\209\002\192\000\000\000\000\002\210\000\146\002\208\000\000\003B\002\211\002\177\002\209\000\000\003K\002\178\002\210\002\207\000\000\000\000\000\000\002\211\000\134\000\000\000\000\000\000\000\000\000\135\000\147\000\134\003M\000\136\000\000\000\000\000\135\000\000\000\000\002\208\000\136\002\175\002\198\000\000\002\209\000\000\000\000\000\000\002\210\002\207\003\"\000\000\000\000\002\211\001\139\000\000\000\132\000\145\000\000\000\000\000\141\000\000\004C\000\000\000\145\003C\000\000\000\000\001\170\002\208\000\000\000Y\000\000\000\000\002\209\002\191\000\149\000\000\002\210\000\000\003H\000\000\000\000\002\211\003I\000\000\000\000\002\192\000\000\003B\000\165\002\177\000\132\000\000\000\000\002\178\000\141\000\000\000\000\003K\000\000\003C\000\000\000\000\000\134\000\000\000\000\000Y\000\000\000\135\000\000\002\191\000\000\000\136\000\000\003M\003H\000\000\000\000\003p\003I\000\000\003t\002\192\000\000\000\000\000\000\000\000\000\000\000\132\000\000\000\000\002\207\000\141\000\000\003K\000\146\000\145\000\000\000\000\000\134\000\000\000\000\000\146\000Y\000\135\000\000\000\000\000\000\000\136\000\000\003M\002\208\001Q\000\000\000\000\000\000\002\209\000\147\000\000\000\176\002\210\000\000\000\000\000\000\000\147\002\211\000\134\002\207\000\000\000\000\003u\000\000\000\145\000\000\003v\000\000\000\134\001S\003C\000\197\000\000\000\135\000\177\000\000\000\000\000\136\000\000\002\208\002\191\000\177\000\132\000\132\002\209\003H\000\141\000\141\002\210\003I\000\000\000\000\002\192\002\211\000\000\000\149\000\000\000Y\000Y\000\178\000\000\000\145\000\149\000\179\003K\000\000\000\178\000\146\000\000\000\151\000\179\000\000\000\000\000\000\000\000\000\000\000\151\000\000\000\000\000\132\003M\000\000\000\000\000\141\001Q\000\000\000\000\000\000\000\000\000\147\000\134\000\134\000\000\000\000\000Y\000\135\000\135\002\207\000\000\000\136\000\136\000\000\000\000\000\146\000\000\000\000\000\000\000\000\001a\001\195\001b\000\197\000\000\000\000\000\177\000\000\003p\002\208\003\131\003t\001N\000\000\002\209\000\145\000\145\000\147\002\210\000\134\000\000\000\000\003\132\002\211\000\135\000\000\000\000\000\149\000\136\000\000\000\000\000\178\000\146\000\000\000\132\000\179\000\000\001\201\000\141\000\197\000\000\000\151\000\177\000\000\000\000\000\000\000\000\000\000\000\134\002\158\000\000\001c\000\145\000\000\000\147\001d\003B\000\000\000\000\000\000\003u\000\000\000\000\000\149\003v\000\000\000\000\000\178\000\000\000\000\003p\000\179\003p\003t\002\160\003t\000\197\000\151\000\000\000\177\000\000\001q\000\134\000\000\000\000\000\000\000\000\000\135\000\000\003\164\000\000\000\136\000\000\000\000\000\146\000\146\000\000\000\000\000\132\000\000\000\149\003$\000\141\003\177\000\178\000\000\000\000\000\000\000\179\000\000\000\000\002\158\003`\000\000\000\151\000\145\000\147\000\147\003B\000\000\003B\000\000\003u\000\000\003u\000\000\003v\000\000\003v\000\000\000\000\000\146\000\000\000\000\000\000\000\000\002\243\003b\000\197\000\197\003\156\000\177\000\177\000\000\000\000\000\000\000\134\000\000\003`\000\000\000\000\000\135\000\000\000\147\000\000\000\136\003\131\003\192\006I\003\195\001r\000\000\000\149\000\149\000\000\003\159\000\178\000\178\003\132\000\000\000\179\000\179\000\000\003r\000\000\000\197\000\151\000\151\000\177\000\145\000\000\000\000\000\000\000\000\000\000\000\000\000\132\003\198\000\000\000\000\000\141\000\000\000\000\003\162\000\146\000\000\000\000\000\132\000\000\000\149\003]\000\141\003\156\000\178\003\156\000\000\000\000\000\179\000\000\000\000\000\000\000\176\000\000\000\151\000\000\000\000\000\147\000\000\003\131\000\000\003\131\003\161\000\000\003\199\000\000\000\000\001\139\003\159\000\000\003\159\003\132\000\000\003\132\000\000\000\134\003\164\000\000\000\000\000\132\000\135\001\172\000\177\000\141\000\136\000\000\000\134\000\000\000\000\000\000\003\165\000\135\003\201\000\000\000\000\000\136\003\162\000\000\003\162\000\146\000\000\000\000\000\132\000\149\000\000\000\132\000\141\000\178\000\145\000\141\000\000\000\179\000\000\000\000\000\000\000\000\001\177\000\151\000\000\000\145\000\000\000\147\000\000\000\000\000\000\000\000\000\000\000\134\003p\000\000\000\000\003t\000\135\000\000\003\204\000\000\000\136\000\000\003\164\000\000\003\164\003p\000\000\000\132\003t\000\000\000\177\000\141\000\000\000\000\000\134\000\000\003\165\000\134\003\165\000\135\000\000\000\000\000\135\000\136\000\145\000\000\000\136\000\000\000\000\000\000\000\132\000\149\000\000\000\000\000\141\000\178\000\000\000\000\000\000\000\179\000\134\000\000\000\000\003\150\003u\000\151\000\000\000\145\003v\000\000\000\145\000\146\000\000\000\134\003\228\000\134\000\000\003u\000\000\000\000\000\135\003v\000\146\000\000\000\136\000\000\000\000\000\000\003\152\000\000\000\000\000\000\000\000\000\147\000\000\000\000\000\000\000\000\000\134\003\152\000\000\000\000\000\000\000\135\000\147\000\000\000\000\000\136\000\145\000Y\000[\002:\000_\000\000\000\000\003\239\000\000\000\000\000\177\000\000\000\000\000\000\000\000\000\146\000\000\000\000\000\000\000\000\000\000\000\177\000\000\000\145\000\000\000\000\000\000\000\000\000\000\000\000\003\247\000\149\003\152\004\004\000a\000\178\000\000\000\147\000\146\000\179\000\000\000\146\000\149\000\000\000\000\000\151\000\178\000\132\000\000\000\000\000\179\000\141\003\131\000\000\000\000\003\152\000\151\000\000\003\152\000\000\000\147\000\000\000\177\000\147\003\132\003\131\000\000\000\000\000\000\000\000\000\000\004 \000Y\000[\002|\000_\000\000\003\132\000\000\000\146\000\000\000\000\000\000\000\149\000\000\000\177\000\132\000\178\000\177\000\000\000\141\000\179\000\000\000\000\004)\000\134\003\152\000\151\000\000\000\000\000\135\000\147\000\146\000\000\000\136\000a\000\149\000\000\000\000\000\149\000\178\000\000\000\000\000\178\000\179\000\000\000\000\000\179\000\000\003\152\000\151\000\000\000\000\000\151\000\147\000\000\000\177\000\000\000\145\000\000\000\000\003\164\000\000\000\000\000\134\000\000\000\000\000\000\000\132\000\135\000\000\000\000\000\141\000\136\003\164\003\179\000\000\000\149\000\000\000\177\000\000\000\178\000\000\000\132\000\000\000\179\000\132\000\141\003\181\000\000\000\141\000\151\000\000\000\000\001\006\000\000\000\000\000\145\000\000\000\132\000\149\000\000\000\000\000\141\000\178\000\000\000\000\000\000\000\179\000\132\000\000\000\000\000\000\000\133\000\151\000\000\000\134\000\000\001\t\000\000\0010\000\135\000\000\000\000\000\000\000\136\000\132\000\000\000\000\0041\000\141\000\134\000\000\000\000\000\134\000\000\000\135\000\146\000\000\000\135\000\136\000\000\000\000\000\136\000\000\000\000\000\000\000\134\000\000\000\145\000\000\000\000\000\135\000\000\003\152\000\000\000\136\000\134\000\000\000\147\000\000\000\000\000\135\000\000\000\145\001\006\000\136\000\145\004\155\000\000\000\000\000\000\000\000\000\000\000\134\000\000\000\146\000\000\000\000\000\135\000\145\000\000\000\000\000\136\000\177\000\000\000\000\000\000\000\000\001\t\000\145\0010\000\000\003\152\000Y\000[\002\130\000_\000\147\000\000\000\000\000Y\000[\002\135\000_\000\149\000\000\000\145\000\000\000\178\000\000\000\000\000\000\000\179\000\132\000\000\000\000\000\000\000\141\000\151\004\167\000\000\000\000\000\177\000\000\000\000\000\132\000a\000\146\000\000\000\141\000\000\000\000\000\000\000a\004\172\000\000\000\000\004\179\000\000\000\000\000\000\000\000\000\146\000\149\003\152\000\146\000\000\000\178\000\000\000\147\004\188\000\179\000\000\000\000\000\000\000\000\000\000\000\151\000\146\003\152\000\000\000\134\003\152\000\000\000\147\000\000\000\135\000\147\000\146\000\000\000\136\000\000\000\000\000\134\000\177\003\152\000\000\004\210\000\135\000\000\000\147\000\000\000\136\000\000\000\000\000\146\000\000\000\000\000\000\000\177\000\147\000\000\000\177\000\000\000\145\000\149\000\000\000\000\000\000\000\178\000\000\000\000\003\152\000\179\000\000\000\177\000\145\000\147\000\000\000\151\000\149\000\132\000\000\000\149\000\178\000\141\000\000\000\178\000\179\000\000\000\000\000\179\000\000\000\000\000\151\006%\000\149\000\151\000\000\000\000\000\178\000\132\000\177\000\000\000\179\000\141\000\149\000\000\000\000\000\000\000\151\000\000\000\000\000\132\000\000\006\133\000\000\000\141\000Y\003p\000\167\000\000\003t\000\149\000\000\000\000\001\006\000\178\000\000\000\134\000\000\000\179\000\000\001\006\000\135\004\215\000\000\000\151\000\136\000Y\000\000\003p\000\000\000\146\003t\000\000\000\000\004\222\000\000\000\134\001\t\000\000\0010\000\000\000\135\000\146\000\000\001\t\000\136\0010\003\152\000\134\000\145\000\000\000\000\000\147\000\135\000\134\000\000\000\000\000\136\003u\003\152\000\000\001\028\003v\000\132\000\147\000\000\000\000\000\141\000\000\000\145\000\000\000\000\000\000\000\000\000\132\001\021\000\134\000\177\000\141\000\000\003u\000\145\001\028\000\000\003v\000\000\000\132\000\000\000\000\000\177\000\141\000\000\000\000\000\000\000\000\000\000\001\021\000\000\000\149\000\000\000\000\000\000\000\178\000\000\000\000\000\132\000\179\000\000\000\000\000\141\000\149\000\134\000\151\000\000\000\178\000\000\000\135\000\000\000\179\000\000\000\136\000\000\000\134\000\000\000\151\000\000\000\000\000\135\000\146\000\000\000\000\000\136\000\000\000\000\000\134\000\000\000\000\000\000\000\000\000\135\000\000\000\000\000\000\000\136\000\145\006&\000\000\000\000\000\146\000\000\000\147\000\000\000\000\000\134\003\131\000\145\000\000\000\000\000\135\000\000\000\146\000\000\000\136\000\000\000\000\006&\003\132\000\145\000\000\000\132\000\147\000\000\000\000\000\141\000\000\000\177\003\131\001E\000\000\000\000\000\000\000\000\000\147\000\000\000\000\001\031\000\145\004\163\003\132\000\000\001\022\000\000\001\023\000\000\000\197\000\177\000\149\000\000\000\000\000\000\000\178\000\000\000\000\000\000\000\179\000\132\001\031\000\177\004\206\000\141\000\151\001\022\000\000\001\023\000\000\000\197\000\149\000\134\000\000\000\000\000\178\000\000\000\135\000\146\000\179\000\000\000\136\000\000\000\149\000\000\000\151\000\000\000\178\003\164\000\146\000\000\000\179\000\000\000\000\000\000\001k\000\000\000\151\000\000\000\132\000\147\000\146\003\183\000\141\000\000\000\145\001\132\000\000\000\134\000\000\003\164\000\147\000\000\000\135\000\000\000\000\000\000\000\136\001\179\000\000\000\146\000\000\000\132\000\147\003\185\000\177\000\141\000\000\000\000\000\000\003p\000\000\000\000\003t\000\000\000\000\000\177\002\145\000\000\000\000\000\000\000\145\000\147\000\000\000\000\000\000\000\149\000\134\000\177\000\000\000\178\000\000\000\135\000\000\000\179\000\000\000\136\000\149\000\000\000\000\000\151\000\178\000\132\000\000\000\000\000\179\000\141\000\177\000\000\000\149\000\134\000\151\000\000\000\178\000\000\000\135\000\000\000\179\000\134\000\136\000\145\000\000\003u\000\151\000\146\000\000\003v\000\000\000\149\000\000\000\000\000\000\000\178\000\132\000\000\000\000\000\179\000\141\000\000\000\000\000\000\002\149\000\151\000\145\000\000\000\132\000\147\000\000\000\000\000\141\000\134\000\000\000\000\000\000\000\000\000\135\000\000\000\000\000\000\000\136\000\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\177\000\132\000\000\000\000\000\000\000\141\002\185\000\000\000\000\000\000\000\134\000\147\000\145\000\000\000\000\000\135\000\000\000\000\000\000\000\136\000\000\000\149\000\134\000\000\000\000\000\178\000\000\000\135\000\146\000\179\000\000\000\136\000\000\000\000\000\000\000\151\000\177\000\132\000\000\000\000\000\132\000\141\000\000\000\145\000\141\002\248\000\000\003\131\000\000\000\134\000\147\000\146\000\000\000\000\000\135\000\145\000\000\000\149\000\136\003\132\000\000\000\178\000\000\000\000\003p\000\179\000\000\003t\002\253\000\000\000\000\000\151\000\000\000\147\000\000\000\177\000\000\000\000\000\000\000\000\000\000\000\000\000\145\000\000\000\000\000\134\000\000\000\000\000\134\000\000\000\135\000\146\000\000\000\135\000\136\000\000\000\149\000\136\000\177\000\000\000\178\000\132\000\000\000\000\000\179\000\141\000\000\000\132\003\001\000\000\000\151\000\133\000\134\000\147\000\000\000\000\003u\000\000\000\145\000\149\003v\000\145\000\146\000\178\000\000\000\000\003\164\000\179\000\000\000\000\000\000\000\000\000\132\000\151\000\146\000\000\000\141\000\000\000\177\003\024\003\187\000\000\000\000\000\000\000\147\000\000\000\000\000\000\000\000\000\134\000\000\003?\000\000\000\000\000\135\000\134\000\147\000\000\000\136\000\149\000\135\000\146\000\000\000\178\000\136\000\000\000\000\000\179\000\000\000\177\000\132\000\000\000\000\000\151\000\133\000\000\000\000\000\000\003}\000\000\000\134\000\177\000\145\000\147\003p\000\135\000\000\003t\000\145\000\136\000\149\000\000\000\000\000\000\000\178\000\000\000\000\000\146\000\179\000\000\000\146\000\000\000\149\000\000\000\151\000\132\000\178\000\132\000\177\000\133\000\179\000\133\003\131\000\145\003\140\000\000\000\151\003\142\000\134\000\147\000\000\000\000\000\147\000\135\003\132\000\000\000\000\000\136\000\000\000\149\000\000\000\000\000\134\000\178\000\000\000\000\003u\000\179\000\000\000\000\003v\000\000\000\132\000\151\000\177\000\000\000\133\000\177\000\000\000\000\000\000\000\145\000\000\000\134\000\000\000\134\000\000\000\000\000\135\000\000\000\135\000\146\000\136\000\000\000\136\000\149\000\000\000\146\000\149\000\178\000\000\000\000\000\178\000\179\000\000\000\000\000\179\000\000\004\143\000\151\000\000\000\000\000\151\000\147\000\000\000\000\000\145\000\000\000\145\000\147\000\134\003\164\000\146\000\000\000\000\000\135\000\000\000\000\000\000\000\136\000\000\000\000\000\000\000\000\000\000\003\189\000\000\000\000\000\177\004\245\000\000\000\000\000\000\000\000\000\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\145\000\000\000\000\000\000\000\000\000\000\000\149\000\146\000\000\003\131\000\178\000\000\000\149\000\000\000\179\000\000\000\177\000\000\000\000\000\000\000\151\003\132\000\000\000\000\000\000\000\000\000\169\000\000\000\000\000\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\149\000\000\000\000\000\000\000\178\000\146\000\000\000\146\000\179\000\000\000\000\000\000\000\000\000\000\000\151\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\147\000\000\000\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\149\000\000\000\000\000\000\000\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\164\000\171\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\147\003\191\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\149\000\000\000\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000\183\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\185")) let semantic_action = [| @@ -1529,7 +1529,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_aexpr = -# 1767 "parser_cocci_menhir.mly" +# 1780 "parser_cocci_menhir.mly" ( Ast0.set_arg_exp _1 ) # 1535 "parser_cocci_menhir.ml" in @@ -1557,7 +1557,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_aexpr = -# 1769 "parser_cocci_menhir.mly" +# 1782 "parser_cocci_menhir.mly" ( let (nm,lenname,pure,clt) = _1 in let nm = P.clt2mcode nm clt in let lenname = @@ -1587,7 +1587,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_aexpr = -# 1777 "parser_cocci_menhir.mly" +# 1790 "parser_cocci_menhir.mly" ( Ast0.set_arg_exp(Ast0.wrap(Ast0.TypeExp(_1))) ) # 1593 "parser_cocci_menhir.ml" in @@ -1609,7 +1609,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_any_strict = -# 1821 "parser_cocci_menhir.mly" +# 1834 "parser_cocci_menhir.mly" ( Ast.WhenAny ) # 1615 "parser_cocci_menhir.ml" in @@ -1631,7 +1631,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_any_strict = -# 1822 "parser_cocci_menhir.mly" +# 1835 "parser_cocci_menhir.mly" ( Ast.WhenStrict ) # 1637 "parser_cocci_menhir.ml" in @@ -1653,7 +1653,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_any_strict = -# 1823 "parser_cocci_menhir.mly" +# 1836 "parser_cocci_menhir.mly" ( Ast.WhenForall ) # 1659 "parser_cocci_menhir.ml" in @@ -1675,7 +1675,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_any_strict = -# 1824 "parser_cocci_menhir.mly" +# 1837 "parser_cocci_menhir.mly" ( Ast.WhenExists ) # 1681 "parser_cocci_menhir.ml" in @@ -1699,7 +1699,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1264 "parser_cocci_menhir.mly" +# 1241 "parser_cocci_menhir.mly" ( _1 ) # 1705 "parser_cocci_menhir.ml" in @@ -1739,7 +1739,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1266 "parser_cocci_menhir.mly" +# 1243 "parser_cocci_menhir.mly" ( P.arith_op Ast.Mul _1 _2 _3 ) # 1745 "parser_cocci_menhir.ml" in @@ -1779,7 +1779,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1268 "parser_cocci_menhir.mly" +# 1245 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.arith_op op _1 clt _3 ) # 1785 "parser_cocci_menhir.ml" in @@ -1819,7 +1819,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1270 "parser_cocci_menhir.mly" +# 1247 "parser_cocci_menhir.mly" ( P.arith_op Ast.Plus _1 _2 _3 ) # 1825 "parser_cocci_menhir.ml" in @@ -1859,7 +1859,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1272 "parser_cocci_menhir.mly" +# 1249 "parser_cocci_menhir.mly" ( P.arith_op Ast.Minus _1 _2 _3 ) # 1865 "parser_cocci_menhir.ml" in @@ -1899,7 +1899,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1274 "parser_cocci_menhir.mly" +# 1251 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.arith_op op _1 clt _3 ) # 1905 "parser_cocci_menhir.ml" in @@ -1939,7 +1939,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1276 "parser_cocci_menhir.mly" +# 1253 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.logic_op op _1 clt _3 ) # 1945 "parser_cocci_menhir.ml" in @@ -1979,7 +1979,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1278 "parser_cocci_menhir.mly" +# 1255 "parser_cocci_menhir.mly" ( P.logic_op Ast.Eq _1 _2 _3 ) # 1985 "parser_cocci_menhir.ml" in @@ -2019,7 +2019,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1280 "parser_cocci_menhir.mly" +# 1257 "parser_cocci_menhir.mly" ( P.logic_op Ast.NotEq _1 _2 _3 ) # 2025 "parser_cocci_menhir.ml" in @@ -2059,7 +2059,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1282 "parser_cocci_menhir.mly" +# 1259 "parser_cocci_menhir.mly" ( P.arith_op Ast.And _1 _2 _3 ) # 2065 "parser_cocci_menhir.ml" in @@ -2099,7 +2099,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1284 "parser_cocci_menhir.mly" +# 1261 "parser_cocci_menhir.mly" ( P.arith_op Ast.Or _1 _2 _3 ) # 2105 "parser_cocci_menhir.ml" in @@ -2139,7 +2139,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1286 "parser_cocci_menhir.mly" +# 1263 "parser_cocci_menhir.mly" ( P.arith_op Ast.Xor _1 _2 _3 ) # 2145 "parser_cocci_menhir.ml" in @@ -2179,7 +2179,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1288 "parser_cocci_menhir.mly" +# 1265 "parser_cocci_menhir.mly" ( P.logic_op Ast.AndLog _1 _2 _3 ) # 2185 "parser_cocci_menhir.ml" in @@ -2219,7 +2219,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_dot_expressions_ = -# 1290 "parser_cocci_menhir.mly" +# 1267 "parser_cocci_menhir.mly" ( P.logic_op Ast.OrLog _1 _2 _3 ) # 2225 "parser_cocci_menhir.ml" in @@ -2243,7 +2243,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1264 "parser_cocci_menhir.mly" +# 1241 "parser_cocci_menhir.mly" ( _1 ) # 2249 "parser_cocci_menhir.ml" in @@ -2283,7 +2283,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1266 "parser_cocci_menhir.mly" +# 1243 "parser_cocci_menhir.mly" ( P.arith_op Ast.Mul _1 _2 _3 ) # 2289 "parser_cocci_menhir.ml" in @@ -2323,7 +2323,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1268 "parser_cocci_menhir.mly" +# 1245 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.arith_op op _1 clt _3 ) # 2329 "parser_cocci_menhir.ml" in @@ -2363,7 +2363,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1270 "parser_cocci_menhir.mly" +# 1247 "parser_cocci_menhir.mly" ( P.arith_op Ast.Plus _1 _2 _3 ) # 2369 "parser_cocci_menhir.ml" in @@ -2403,7 +2403,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1272 "parser_cocci_menhir.mly" +# 1249 "parser_cocci_menhir.mly" ( P.arith_op Ast.Minus _1 _2 _3 ) # 2409 "parser_cocci_menhir.ml" in @@ -2443,7 +2443,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1274 "parser_cocci_menhir.mly" +# 1251 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.arith_op op _1 clt _3 ) # 2449 "parser_cocci_menhir.ml" in @@ -2483,7 +2483,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1276 "parser_cocci_menhir.mly" +# 1253 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.logic_op op _1 clt _3 ) # 2489 "parser_cocci_menhir.ml" in @@ -2523,7 +2523,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1278 "parser_cocci_menhir.mly" +# 1255 "parser_cocci_menhir.mly" ( P.logic_op Ast.Eq _1 _2 _3 ) # 2529 "parser_cocci_menhir.ml" in @@ -2563,7 +2563,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1280 "parser_cocci_menhir.mly" +# 1257 "parser_cocci_menhir.mly" ( P.logic_op Ast.NotEq _1 _2 _3 ) # 2569 "parser_cocci_menhir.ml" in @@ -2603,7 +2603,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1282 "parser_cocci_menhir.mly" +# 1259 "parser_cocci_menhir.mly" ( P.arith_op Ast.And _1 _2 _3 ) # 2609 "parser_cocci_menhir.ml" in @@ -2643,7 +2643,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1284 "parser_cocci_menhir.mly" +# 1261 "parser_cocci_menhir.mly" ( P.arith_op Ast.Or _1 _2 _3 ) # 2649 "parser_cocci_menhir.ml" in @@ -2683,7 +2683,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1286 "parser_cocci_menhir.mly" +# 1263 "parser_cocci_menhir.mly" ( P.arith_op Ast.Xor _1 _2 _3 ) # 2689 "parser_cocci_menhir.ml" in @@ -2723,7 +2723,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1288 "parser_cocci_menhir.mly" +# 1265 "parser_cocci_menhir.mly" ( P.logic_op Ast.AndLog _1 _2 _3 ) # 2729 "parser_cocci_menhir.ml" in @@ -2763,7 +2763,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_invalid_ = -# 1290 "parser_cocci_menhir.mly" +# 1267 "parser_cocci_menhir.mly" ( P.logic_op Ast.OrLog _1 _2 _3 ) # 2769 "parser_cocci_menhir.ml" in @@ -2787,7 +2787,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1264 "parser_cocci_menhir.mly" +# 1241 "parser_cocci_menhir.mly" ( _1 ) # 2793 "parser_cocci_menhir.ml" in @@ -2827,7 +2827,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1266 "parser_cocci_menhir.mly" +# 1243 "parser_cocci_menhir.mly" ( P.arith_op Ast.Mul _1 _2 _3 ) # 2833 "parser_cocci_menhir.ml" in @@ -2867,7 +2867,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1268 "parser_cocci_menhir.mly" +# 1245 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.arith_op op _1 clt _3 ) # 2873 "parser_cocci_menhir.ml" in @@ -2907,7 +2907,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1270 "parser_cocci_menhir.mly" +# 1247 "parser_cocci_menhir.mly" ( P.arith_op Ast.Plus _1 _2 _3 ) # 2913 "parser_cocci_menhir.ml" in @@ -2947,7 +2947,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1272 "parser_cocci_menhir.mly" +# 1249 "parser_cocci_menhir.mly" ( P.arith_op Ast.Minus _1 _2 _3 ) # 2953 "parser_cocci_menhir.ml" in @@ -2987,7 +2987,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1274 "parser_cocci_menhir.mly" +# 1251 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.arith_op op _1 clt _3 ) # 2993 "parser_cocci_menhir.ml" in @@ -3027,7 +3027,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1276 "parser_cocci_menhir.mly" +# 1253 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.logic_op op _1 clt _3 ) # 3033 "parser_cocci_menhir.ml" in @@ -3067,7 +3067,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1278 "parser_cocci_menhir.mly" +# 1255 "parser_cocci_menhir.mly" ( P.logic_op Ast.Eq _1 _2 _3 ) # 3073 "parser_cocci_menhir.ml" in @@ -3107,7 +3107,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1280 "parser_cocci_menhir.mly" +# 1257 "parser_cocci_menhir.mly" ( P.logic_op Ast.NotEq _1 _2 _3 ) # 3113 "parser_cocci_menhir.ml" in @@ -3147,7 +3147,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1282 "parser_cocci_menhir.mly" +# 1259 "parser_cocci_menhir.mly" ( P.arith_op Ast.And _1 _2 _3 ) # 3153 "parser_cocci_menhir.ml" in @@ -3187,7 +3187,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1284 "parser_cocci_menhir.mly" +# 1261 "parser_cocci_menhir.mly" ( P.arith_op Ast.Or _1 _2 _3 ) # 3193 "parser_cocci_menhir.ml" in @@ -3227,7 +3227,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1286 "parser_cocci_menhir.mly" +# 1263 "parser_cocci_menhir.mly" ( P.arith_op Ast.Xor _1 _2 _3 ) # 3233 "parser_cocci_menhir.ml" in @@ -3267,7 +3267,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1288 "parser_cocci_menhir.mly" +# 1265 "parser_cocci_menhir.mly" ( P.logic_op Ast.AndLog _1 _2 _3 ) # 3273 "parser_cocci_menhir.ml" in @@ -3307,7 +3307,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_eexpr_nest_expressions_ = -# 1290 "parser_cocci_menhir.mly" +# 1267 "parser_cocci_menhir.mly" ( P.logic_op Ast.OrLog _1 _2 _3 ) # 3313 "parser_cocci_menhir.ml" in @@ -3331,7 +3331,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1264 "parser_cocci_menhir.mly" +# 1241 "parser_cocci_menhir.mly" ( _1 ) # 3337 "parser_cocci_menhir.ml" in @@ -3371,7 +3371,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1266 "parser_cocci_menhir.mly" +# 1243 "parser_cocci_menhir.mly" ( P.arith_op Ast.Mul _1 _2 _3 ) # 3377 "parser_cocci_menhir.ml" in @@ -3411,7 +3411,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1268 "parser_cocci_menhir.mly" +# 1245 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.arith_op op _1 clt _3 ) # 3417 "parser_cocci_menhir.ml" in @@ -3451,7 +3451,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1270 "parser_cocci_menhir.mly" +# 1247 "parser_cocci_menhir.mly" ( P.arith_op Ast.Plus _1 _2 _3 ) # 3457 "parser_cocci_menhir.ml" in @@ -3491,7 +3491,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1272 "parser_cocci_menhir.mly" +# 1249 "parser_cocci_menhir.mly" ( P.arith_op Ast.Minus _1 _2 _3 ) # 3497 "parser_cocci_menhir.ml" in @@ -3531,7 +3531,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1274 "parser_cocci_menhir.mly" +# 1251 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.arith_op op _1 clt _3 ) # 3537 "parser_cocci_menhir.ml" in @@ -3571,7 +3571,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1276 "parser_cocci_menhir.mly" +# 1253 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in P.logic_op op _1 clt _3 ) # 3577 "parser_cocci_menhir.ml" in @@ -3611,7 +3611,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1278 "parser_cocci_menhir.mly" +# 1255 "parser_cocci_menhir.mly" ( P.logic_op Ast.Eq _1 _2 _3 ) # 3617 "parser_cocci_menhir.ml" in @@ -3651,7 +3651,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1280 "parser_cocci_menhir.mly" +# 1257 "parser_cocci_menhir.mly" ( P.logic_op Ast.NotEq _1 _2 _3 ) # 3657 "parser_cocci_menhir.ml" in @@ -3691,7 +3691,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1282 "parser_cocci_menhir.mly" +# 1259 "parser_cocci_menhir.mly" ( P.arith_op Ast.And _1 _2 _3 ) # 3697 "parser_cocci_menhir.ml" in @@ -3731,7 +3731,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1284 "parser_cocci_menhir.mly" +# 1261 "parser_cocci_menhir.mly" ( P.arith_op Ast.Or _1 _2 _3 ) # 3737 "parser_cocci_menhir.ml" in @@ -3771,7 +3771,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1286 "parser_cocci_menhir.mly" +# 1263 "parser_cocci_menhir.mly" ( P.arith_op Ast.Xor _1 _2 _3 ) # 3777 "parser_cocci_menhir.ml" in @@ -3811,7 +3811,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1288 "parser_cocci_menhir.mly" +# 1265 "parser_cocci_menhir.mly" ( P.logic_op Ast.AndLog _1 _2 _3 ) # 3817 "parser_cocci_menhir.ml" in @@ -3851,7 +3851,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_arith_expr_expr_invalid_ = -# 1290 "parser_cocci_menhir.mly" +# 1267 "parser_cocci_menhir.mly" ( P.logic_op Ast.OrLog _1 _2 _3 ) # 3857 "parser_cocci_menhir.ml" in @@ -3978,7 +3978,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_l_ in let _endpos = _endpos_r_ in let _v : 'tv_array_dec = -# 1071 "parser_cocci_menhir.mly" +# 1048 "parser_cocci_menhir.mly" ( (l,i,r) ) # 3984 "parser_cocci_menhir.ml" in @@ -4002,7 +4002,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_assign_expr_eexpr_dot_expressions_ = -# 1236 "parser_cocci_menhir.mly" +# 1213 "parser_cocci_menhir.mly" ( _1 ) # 4008 "parser_cocci_menhir.ml" in @@ -4042,7 +4042,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_assign_expr_eexpr_dot_expressions_ = -# 1238 "parser_cocci_menhir.mly" +# 1215 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in Ast0.wrap(Ast0.Assignment(_1,P.clt2mcode op clt, Ast0.set_arg_exp _3,false)) ) @@ -4084,7 +4084,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_assign_expr_eexpr_dot_expressions_ = -# 1242 "parser_cocci_menhir.mly" +# 1219 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.Assignment (_1,P.clt2mcode Ast.SimpleAssign _2,Ast0.set_arg_exp _3,false)) ) @@ -4110,7 +4110,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_assign_expr_eexpr_nest_expressions_ = -# 1236 "parser_cocci_menhir.mly" +# 1213 "parser_cocci_menhir.mly" ( _1 ) # 4116 "parser_cocci_menhir.ml" in @@ -4150,7 +4150,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_assign_expr_eexpr_nest_expressions_ = -# 1238 "parser_cocci_menhir.mly" +# 1215 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in Ast0.wrap(Ast0.Assignment(_1,P.clt2mcode op clt, Ast0.set_arg_exp _3,false)) ) @@ -4192,7 +4192,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_assign_expr_eexpr_nest_expressions_ = -# 1242 "parser_cocci_menhir.mly" +# 1219 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.Assignment (_1,P.clt2mcode Ast.SimpleAssign _2,Ast0.set_arg_exp _3,false)) ) @@ -4218,7 +4218,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_assign_expr_expr_invalid_ = -# 1236 "parser_cocci_menhir.mly" +# 1213 "parser_cocci_menhir.mly" ( _1 ) # 4224 "parser_cocci_menhir.ml" in @@ -4258,7 +4258,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_assign_expr_expr_invalid_ = -# 1238 "parser_cocci_menhir.mly" +# 1215 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in Ast0.wrap(Ast0.Assignment(_1,P.clt2mcode op clt, Ast0.set_arg_exp _3,false)) ) @@ -4300,7 +4300,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_assign_expr_expr_invalid_ = -# 1242 "parser_cocci_menhir.mly" +# 1219 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.Assignment (_1,P.clt2mcode Ast.SimpleAssign _2,Ast0.set_arg_exp _3,false)) ) @@ -4326,7 +4326,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_assign_expr_bis = -# 1247 "parser_cocci_menhir.mly" +# 1224 "parser_cocci_menhir.mly" ( _1 ) # 4332 "parser_cocci_menhir.ml" in @@ -4366,7 +4366,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_assign_expr_bis = -# 1249 "parser_cocci_menhir.mly" +# 1226 "parser_cocci_menhir.mly" ( let (op,clt) = _2 in Ast0.wrap(Ast0.Assignment(_1,P.clt2mcode op clt, Ast0.set_arg_exp _3,false)) ) @@ -4408,7 +4408,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_assign_expr_bis = -# 1253 "parser_cocci_menhir.mly" +# 1230 "parser_cocci_menhir.mly" ( Ast0.wrap (Ast0.Assignment (_1,P.clt2mcode Ast.SimpleAssign _2,Ast0.set_arg_exp _3,false)) ) @@ -4434,7 +4434,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_basic_expr_eexpr_dot_expressions_ = -# 1233 "parser_cocci_menhir.mly" +# 1210 "parser_cocci_menhir.mly" ( _1 ) # 4440 "parser_cocci_menhir.ml" in @@ -4458,7 +4458,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_basic_expr_eexpr_nest_expressions_ = -# 1233 "parser_cocci_menhir.mly" +# 1210 "parser_cocci_menhir.mly" ( _1 ) # 4464 "parser_cocci_menhir.ml" in @@ -4482,7 +4482,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_basic_expr_expr_invalid_ = -# 1233 "parser_cocci_menhir.mly" +# 1210 "parser_cocci_menhir.mly" ( _1 ) # 4488 "parser_cocci_menhir.ml" in @@ -4526,7 +4526,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_case_line = -# 943 "parser_cocci_menhir.mly" +# 920 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Default(P.clt2mcode "default" _1,P.clt2mcode ":" _2,_3)) ) # 4532 "parser_cocci_menhir.ml" in @@ -4576,7 +4576,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_case_line = -# 945 "parser_cocci_menhir.mly" +# 922 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Case(P.clt2mcode "case" _1,_2,P.clt2mcode ":" _3,_4)) ) # 4582 "parser_cocci_menhir.ml" in @@ -4600,7 +4600,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_cast_expr_eexpr_dot_expressions_ = -# 1293 "parser_cocci_menhir.mly" +# 1270 "parser_cocci_menhir.mly" ( _1 ) # 4606 "parser_cocci_menhir.ml" in @@ -4650,7 +4650,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_lp_ in let _endpos = _endpos_e_ in let _v : 'tv_cast_expr_eexpr_dot_expressions_ = -# 1295 "parser_cocci_menhir.mly" +# 1272 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Cast (P.clt2mcode "(" lp, t, P.clt2mcode ")" rp, e)) ) # 4657 "parser_cocci_menhir.ml" @@ -4675,7 +4675,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_cast_expr_eexpr_invalid_ = -# 1293 "parser_cocci_menhir.mly" +# 1270 "parser_cocci_menhir.mly" ( _1 ) # 4681 "parser_cocci_menhir.ml" in @@ -4725,7 +4725,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_lp_ in let _endpos = _endpos_e_ in let _v : 'tv_cast_expr_eexpr_invalid_ = -# 1295 "parser_cocci_menhir.mly" +# 1272 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Cast (P.clt2mcode "(" lp, t, P.clt2mcode ")" rp, e)) ) # 4732 "parser_cocci_menhir.ml" @@ -4750,7 +4750,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_cast_expr_eexpr_nest_expressions_ = -# 1293 "parser_cocci_menhir.mly" +# 1270 "parser_cocci_menhir.mly" ( _1 ) # 4756 "parser_cocci_menhir.ml" in @@ -4800,7 +4800,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_lp_ in let _endpos = _endpos_e_ in let _v : 'tv_cast_expr_eexpr_nest_expressions_ = -# 1295 "parser_cocci_menhir.mly" +# 1272 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Cast (P.clt2mcode "(" lp, t, P.clt2mcode ")" rp, e)) ) # 4807 "parser_cocci_menhir.ml" @@ -4825,7 +4825,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_cast_expr_expr_invalid_ = -# 1293 "parser_cocci_menhir.mly" +# 1270 "parser_cocci_menhir.mly" ( _1 ) # 4831 "parser_cocci_menhir.ml" in @@ -4875,7 +4875,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_lp_ in let _endpos = _endpos_e_ in let _v : 'tv_cast_expr_expr_invalid_ = -# 1295 "parser_cocci_menhir.mly" +# 1272 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Cast (P.clt2mcode "(" lp, t, P.clt2mcode ")" rp, e)) ) # 4882 "parser_cocci_menhir.ml" @@ -4942,7 +4942,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_comma_decls_TEllipsis_decl_ = -# 1568 "parser_cocci_menhir.mly" +# 1575 "parser_cocci_menhir.mly" ( function dot_builder -> [Ast0.wrap(Ast0.PComma(P.clt2mcode "," _1)); dot_builder _2] ) @@ -4978,7 +4978,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_comma_decls_TEllipsis_decl_ = -# 1572 "parser_cocci_menhir.mly" +# 1579 "parser_cocci_menhir.mly" ( function dot_builder -> [Ast0.wrap(Ast0.PComma(P.clt2mcode "," _1)); _2] ) # 4985 "parser_cocci_menhir.ml" @@ -5017,7 +5017,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_comma_decls_TEllipsis_name_opt_decl_ = -# 1568 "parser_cocci_menhir.mly" +# 1575 "parser_cocci_menhir.mly" ( function dot_builder -> [Ast0.wrap(Ast0.PComma(P.clt2mcode "," _1)); dot_builder _2] ) @@ -5053,7 +5053,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_comma_decls_TEllipsis_name_opt_decl_ = -# 1572 "parser_cocci_menhir.mly" +# 1579 "parser_cocci_menhir.mly" ( function dot_builder -> [Ast0.wrap(Ast0.PComma(P.clt2mcode "," _1)); _2] ) # 5060 "parser_cocci_menhir.ml" @@ -5071,7 +5071,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in let _endpos = _startpos in let _v : 'tv_comma_initializers_edots_when_TEllipsis_initialize__ = -# 1124 "parser_cocci_menhir.mly" +# 1101 "parser_cocci_menhir.mly" ( [] ) # 5077 "parser_cocci_menhir.ml" in @@ -5101,7 +5101,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_d_ in let _endpos = _endpos_r_ in let _v : 'tv_comma_initializers_edots_when_TEllipsis_initialize__ = -# 1126 "parser_cocci_menhir.mly" +# 1103 "parser_cocci_menhir.mly" ( (function dot_builder -> [dot_builder d])::r ) # 5107 "parser_cocci_menhir.ml" in @@ -5141,7 +5141,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_i_ in let _endpos = _endpos_r_ in let _v : 'tv_comma_initializers_edots_when_TEllipsis_initialize__ = -# 1128 "parser_cocci_menhir.mly" +# 1105 "parser_cocci_menhir.mly" ( (function dot_builder -> [i; Ast0.wrap(Ast0.IComma(P.clt2mcode "," c))]):: r ) # 5148 "parser_cocci_menhir.ml" @@ -5159,7 +5159,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in let _endpos = _startpos in let _v : 'tv_comma_initializers2_edots_when_TEllipsis_initialize__ = -# 1132 "parser_cocci_menhir.mly" +# 1109 "parser_cocci_menhir.mly" ( [] ) # 5165 "parser_cocci_menhir.ml" in @@ -5199,7 +5199,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_i_ in let _endpos = _endpos_r_ in let _v : 'tv_comma_initializers2_edots_when_TEllipsis_initialize__ = -# 1134 "parser_cocci_menhir.mly" +# 1111 "parser_cocci_menhir.mly" ( (function dot_builder -> [i; Ast0.wrap(Ast0.IComma(P.clt2mcode "," c))]):: r ) # 5206 "parser_cocci_menhir.ml" @@ -5224,7 +5224,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_comma_list_any_strict_ = -# 1799 "parser_cocci_menhir.mly" +# 1812 "parser_cocci_menhir.mly" ( _1 ) # 5230 "parser_cocci_menhir.ml" in @@ -5248,7 +5248,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_comma_list_ctype_ = -# 1799 "parser_cocci_menhir.mly" +# 1812 "parser_cocci_menhir.mly" ( _1 ) # 5254 "parser_cocci_menhir.ml" in @@ -5272,7 +5272,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_comma_list_d_ident_ = -# 1799 "parser_cocci_menhir.mly" +# 1812 "parser_cocci_menhir.mly" ( _1 ) # 5278 "parser_cocci_menhir.ml" in @@ -5283,30 +5283,6 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos; MenhirLib.EngineTypes.next = _menhir_stack; }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let _1 : 'tv_separated_nonempty_list_TComma_dexpr_ = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_comma_list_dexpr_ = -# 1799 "parser_cocci_menhir.mly" - ( _1 ) -# 5302 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { @@ -5320,9 +5296,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_comma_list_ident_or_const_ = -# 1799 "parser_cocci_menhir.mly" +# 1812 "parser_cocci_menhir.mly" ( _1 ) -# 5326 "parser_cocci_menhir.ml" +# 5302 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5344,9 +5320,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_comma_list_meta_ident_ = -# 1799 "parser_cocci_menhir.mly" +# 1812 "parser_cocci_menhir.mly" ( _1 ) -# 5350 "parser_cocci_menhir.ml" +# 5326 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5368,9 +5344,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_comma_list_pure_ident_ = -# 1799 "parser_cocci_menhir.mly" +# 1812 "parser_cocci_menhir.mly" ( _1 ) -# 5374 "parser_cocci_menhir.ml" +# 5350 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5392,9 +5368,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_comma_list_pure_ident_or_meta_ident_ = -# 1799 "parser_cocci_menhir.mly" +# 1812 "parser_cocci_menhir.mly" ( _1 ) -# 5398 "parser_cocci_menhir.ml" +# 5374 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5416,9 +5392,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_ceq__ = -# 1799 "parser_cocci_menhir.mly" +# 1812 "parser_cocci_menhir.mly" ( _1 ) -# 5422 "parser_cocci_menhir.ml" +# 5398 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5440,9 +5416,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eq__ = -# 1799 "parser_cocci_menhir.mly" +# 1812 "parser_cocci_menhir.mly" ( _1 ) -# 5446 "parser_cocci_menhir.ml" +# 5422 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5464,9 +5440,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = -# 1799 "parser_cocci_menhir.mly" +# 1812 "parser_cocci_menhir.mly" ( _1 ) -# 5470 "parser_cocci_menhir.ml" +# 5446 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5488,9 +5464,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_pos__ = -# 1799 "parser_cocci_menhir.mly" +# 1812 "parser_cocci_menhir.mly" ( _1 ) -# 5494 "parser_cocci_menhir.ml" +# 5470 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5512,9 +5488,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_comma_list_pure_ident_or_meta_ident_with_seed_ = -# 1799 "parser_cocci_menhir.mly" +# 1812 "parser_cocci_menhir.mly" ( _1 ) -# 5518 "parser_cocci_menhir.ml" +# 5494 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5536,9 +5512,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_cond_expr_eexpr_dot_expressions_ = -# 1258 "parser_cocci_menhir.mly" +# 1235 "parser_cocci_menhir.mly" ( _1 ) -# 5542 "parser_cocci_menhir.ml" +# 5518 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5580,22 +5556,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let dd : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 5584 "parser_cocci_menhir.ml" +# 5560 "parser_cocci_menhir.ml" ) = Obj.magic dd in let t : 'tv_option_eexpr_ = Obj.magic t in let w : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 5590 "parser_cocci_menhir.ml" +# 5566 "parser_cocci_menhir.ml" ) = Obj.magic w in let l : 'tv_arith_expr_eexpr_dot_expressions_ = Obj.magic l in let _startpos = _startpos_l_ in let _endpos = _endpos_r_ in let _v : 'tv_cond_expr_eexpr_dot_expressions_ = -# 1260 "parser_cocci_menhir.mly" +# 1237 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.CondExpr (l, P.clt2mcode "?" w, t, P.clt2mcode ":" dd, r)) ) -# 5599 "parser_cocci_menhir.ml" +# 5575 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5617,9 +5593,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_cond_expr_eexpr_nest_expressions_ = -# 1258 "parser_cocci_menhir.mly" +# 1235 "parser_cocci_menhir.mly" ( _1 ) -# 5623 "parser_cocci_menhir.ml" +# 5599 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5661,22 +5637,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let dd : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 5665 "parser_cocci_menhir.ml" +# 5641 "parser_cocci_menhir.ml" ) = Obj.magic dd in let t : 'tv_option_eexpr_ = Obj.magic t in let w : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 5671 "parser_cocci_menhir.ml" +# 5647 "parser_cocci_menhir.ml" ) = Obj.magic w in let l : 'tv_arith_expr_eexpr_nest_expressions_ = Obj.magic l in let _startpos = _startpos_l_ in let _endpos = _endpos_r_ in let _v : 'tv_cond_expr_eexpr_nest_expressions_ = -# 1260 "parser_cocci_menhir.mly" +# 1237 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.CondExpr (l, P.clt2mcode "?" w, t, P.clt2mcode ":" dd, r)) ) -# 5680 "parser_cocci_menhir.ml" +# 5656 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5698,9 +5674,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_cond_expr_expr_invalid_ = -# 1258 "parser_cocci_menhir.mly" +# 1235 "parser_cocci_menhir.mly" ( _1 ) -# 5704 "parser_cocci_menhir.ml" +# 5680 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5742,22 +5718,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let dd : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 5746 "parser_cocci_menhir.ml" +# 5722 "parser_cocci_menhir.ml" ) = Obj.magic dd in let t : 'tv_option_eexpr_ = Obj.magic t in let w : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 5752 "parser_cocci_menhir.ml" +# 5728 "parser_cocci_menhir.ml" ) = Obj.magic w in let l : 'tv_arith_expr_expr_invalid_ = Obj.magic l in let _startpos = _startpos_l_ in let _endpos = _endpos_r_ in let _v : 'tv_cond_expr_expr_invalid_ = -# 1260 "parser_cocci_menhir.mly" +# 1237 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.CondExpr (l, P.clt2mcode "?" w, t, P.clt2mcode ":" dd, r)) ) -# 5761 "parser_cocci_menhir.ml" +# 5737 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5778,14 +5754,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 54 "parser_cocci_menhir.mly" (Data.clt) -# 5782 "parser_cocci_menhir.ml" +# 5758 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_const_vol = -# 852 "parser_cocci_menhir.mly" +# 829 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.Const _1 ) -# 5789 "parser_cocci_menhir.ml" +# 5765 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5806,14 +5782,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 54 "parser_cocci_menhir.mly" (Data.clt) -# 5810 "parser_cocci_menhir.ml" +# 5786 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_const_vol = -# 853 "parser_cocci_menhir.mly" +# 830 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.Volatile _1 ) -# 5817 "parser_cocci_menhir.ml" +# 5793 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5828,9 +5804,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in let _endpos = _startpos in let _v : 'tv_continue_struct_decl_list = -# 549 "parser_cocci_menhir.mly" +# 583 "parser_cocci_menhir.mly" ( [] ) -# 5834 "parser_cocci_menhir.ml" +# 5810 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5858,9 +5834,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_continue_struct_decl_list = -# 550 "parser_cocci_menhir.mly" +# 584 "parser_cocci_menhir.mly" ( _1@_2 ) -# 5864 "parser_cocci_menhir.ml" +# 5840 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5882,9 +5858,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_continue_struct_decl_list = -# 551 "parser_cocci_menhir.mly" +# 585 "parser_cocci_menhir.mly" ( _1 ) -# 5888 "parser_cocci_menhir.ml" +# 5864 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5900,28 +5876,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.startp = _startpos_m_; MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in let m : 'tv_list_TMul_ = Obj.magic m in - let ty : 'tv_generic_ctype = Obj.magic ty in - let _startpos = _startpos_ty_ in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 5896 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 5901 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in - let _v : 'tv_ctype = let cv = + let _v : 'tv_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 469 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) +# 5913 "parser_cocci_menhir.ml" + + in + +# 521 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) +# 5919 "parser_cocci_menhir.ml" + + in + let cv = # 39 "standard.mly" ( None ) -# 5919 "parser_cocci_menhir.ml" +# 5926 "parser_cocci_menhir.ml" in -# 555 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 5925 "parser_cocci_menhir.ml" +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 5932 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5937,35 +5944,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.startp = _startpos_m_; MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in let m : 'tv_list_TMul_ = Obj.magic m in - let ty : 'tv_generic_ctype = Obj.magic ty in - let x0 : 'tv_const_vol = Obj.magic x0 in - let _startpos = _startpos_x0_ in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 5964 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 5969 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in - let _v : 'tv_ctype = let cv = - let x = x0 in + let _v : 'tv_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 471 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) +# 5981 "parser_cocci_menhir.ml" + + in -# 41 "standard.mly" - ( Some x ) -# 5963 "parser_cocci_menhir.ml" +# 521 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) +# 5987 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 5994 "parser_cocci_menhir.ml" in -# 555 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 5969 "parser_cocci_menhir.ml" +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 6000 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -5981,34 +6012,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.startp = _startpos_m_; MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let m : 'tv_nonempty_list_TMul_ = Obj.magic m in - let t : ( -# 50 "parser_cocci_menhir.mly" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" (Data.clt) -# 5996 "parser_cocci_menhir.ml" - ) = Obj.magic t in - let _startpos = _startpos_t_ in +# 6032 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 6037 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in - let _v : 'tv_ctype = let cv = + let _v : 'tv_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 473 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) +# 6049 "parser_cocci_menhir.ml" + + in + +# 521 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) +# 6055 "parser_cocci_menhir.ml" + + in + let cv = # 39 "standard.mly" ( None ) -# 6004 "parser_cocci_menhir.ml" +# 6062 "parser_cocci_menhir.ml" in -# 557 "parser_cocci_menhir.mly" - ( let ty = - Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" t])) in - P.pointerify (P.make_cv cv ty) m ) -# 6012 "parser_cocci_menhir.ml" +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 6068 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6024,42 +6080,61 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.startp = _startpos_m_; MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.semv = p00; + MenhirLib.EngineTypes.startp = _startpos_p00_; + MenhirLib.EngineTypes.endp = _endpos_p00_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let m : 'tv_nonempty_list_TMul_ = Obj.magic m in - let t : ( -# 50 "parser_cocci_menhir.mly" + let m : 'tv_list_TMul_ = Obj.magic m in + let p00 : ( +# 64 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 6100 "parser_cocci_menhir.ml" + ) = Obj.magic p00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" (Data.clt) -# 6044 "parser_cocci_menhir.ml" - ) = Obj.magic t in - let x0 : 'tv_const_vol = Obj.magic x0 in - let _startpos = _startpos_x0_ in +# 6105 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in - let _v : 'tv_ctype = let cv = - let x = x0 in + let _v : 'tv_ctype = let ty = + let p0 = p00 in + let r = r0 in + let ty = + let p = p0 in + +# 475 "parser_cocci_menhir.mly" + ( let (nm,pure,clt) = p in + Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) +# 6118 "parser_cocci_menhir.ml" + + in -# 41 "standard.mly" - ( Some x ) -# 6054 "parser_cocci_menhir.ml" +# 521 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) +# 6124 "parser_cocci_menhir.ml" in - -# 557 "parser_cocci_menhir.mly" - ( let ty = - Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" t])) in - P.pointerify (P.make_cv cv ty) m ) -# 6062 "parser_cocci_menhir.ml" - in + let cv = + +# 39 "standard.mly" + ( None ) +# 6131 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 6137 "parser_cocci_menhir.ml" + in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = Obj.repr _v; @@ -6070,41 +6145,84 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = rp; - MenhirLib.EngineTypes.startp = _startpos_rp_; - MenhirLib.EngineTypes.endp = _endpos_rp_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.semv = p00; + MenhirLib.EngineTypes.startp = _startpos_p00_; + MenhirLib.EngineTypes.endp = _endpos_p00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = lp; - MenhirLib.EngineTypes.startp = _startpos_lp_; - MenhirLib.EngineTypes.endp = _endpos_lp_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = r00; + MenhirLib.EngineTypes.startp = _startpos_r00_; + MenhirLib.EngineTypes.endp = _endpos_r00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = r1; + MenhirLib.EngineTypes.startp = _startpos_r1_; + MenhirLib.EngineTypes.endp = _endpos_r1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; } = _menhir_stack in - let rp : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 6093 "parser_cocci_menhir.ml" - ) = Obj.magic rp in - let t : 'tv_midzero_list_ctype_ctype_ = Obj.magic t in - let lp : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 6099 "parser_cocci_menhir.ml" - ) = Obj.magic lp in - let _startpos = _startpos_lp_ in - let _endpos = _endpos_rp_ in - let _v : 'tv_ctype = -# 562 "parser_cocci_menhir.mly" - ( let (mids,code) = t in - Ast0.wrap - (Ast0.DisjType(P.clt2mcode "(" lp,code,mids, P.clt2mcode ")" rp)) ) -# 6108 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let p00 : ( +# 59 "parser_cocci_menhir.mly" + (string * Data.clt) +# 6178 "parser_cocci_menhir.ml" + ) = Obj.magic p00 in + let r00 : ( +# 47 "parser_cocci_menhir.mly" + (string) +# 6183 "parser_cocci_menhir.ml" + ) = Obj.magic r00 in + let r1 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 6188 "parser_cocci_menhir.ml" + ) = Obj.magic r1 in + let _startpos = _startpos_r1_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let p0 = p00 in + let r0 = r00 in + let r = r1 in + let ty = + let p = p0 in + let r = r0 in + +# 478 "parser_cocci_menhir.mly" + ( let nm = (r,P.id2name p) in + (* this is only possible when we are in a metavar decl. Otherwise, + it will be represented already as a MetaType *) + let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in + Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p), + Ast0.Impure (*will be ignored*))) ) +# 6207 "parser_cocci_menhir.ml" + + in + +# 521 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) +# 6213 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 6220 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 6226 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6120,28 +6238,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.startp = _startpos_m_; MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in let m : 'tv_list_TMul_ = Obj.magic m in - let ty : 'tv_generic_ctype_full = Obj.magic ty in - let _startpos = _startpos_ty_ in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 6258 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 6263 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in - let _v : 'tv_ctype_full = let cv = + let _v : 'tv_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 485 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) ) +# 6275 "parser_cocci_menhir.ml" + + in + +# 521 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) +# 6281 "parser_cocci_menhir.ml" + + in + let cv = # 39 "standard.mly" ( None ) -# 6139 "parser_cocci_menhir.ml" +# 6288 "parser_cocci_menhir.ml" in -# 568 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 6145 "parser_cocci_menhir.ml" +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 6294 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6157,35 +6306,74 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.startp = _startpos_m_; MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; + MenhirLib.EngineTypes.semv = ty200; + MenhirLib.EngineTypes.startp = _startpos_ty200_; + MenhirLib.EngineTypes.endp = _endpos_ty200_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ty100; + MenhirLib.EngineTypes.startp = _startpos_ty100_; + MenhirLib.EngineTypes.endp = _endpos_ty100_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in let m : 'tv_list_TMul_ = Obj.magic m in - let ty : 'tv_generic_ctype_full = Obj.magic ty in - let x0 : 'tv_const_vol = Obj.magic x0 in - let _startpos = _startpos_x0_ in + let ty200 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 6331 "parser_cocci_menhir.ml" + ) = Obj.magic ty200 in + let ty100 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 6336 "parser_cocci_menhir.ml" + ) = Obj.magic ty100 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 6341 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in - let _v : 'tv_ctype_full = let cv = - let x = x0 in + let _v : 'tv_ctype = let ty = + let ty20 = ty200 in + let ty10 = ty100 in + let r = r0 in + let ty = + let ty2 = ty20 in + let ty1 = ty10 in + +# 487 "parser_cocci_menhir.mly" + ( Ast0.wrap + (Ast0.BaseType + (Ast.LongLongType, + [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) +# 6358 "parser_cocci_menhir.ml" + + in -# 41 "standard.mly" - ( Some x ) -# 6183 "parser_cocci_menhir.ml" +# 521 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) +# 6364 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 6371 "parser_cocci_menhir.ml" in -# 568 "parser_cocci_menhir.mly" - ( P.pointerify (P.make_cv cv ty) m ) -# 6189 "parser_cocci_menhir.ml" +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 6377 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6201,34 +6389,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.startp = _startpos_m_; MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let m : 'tv_nonempty_list_TMul_ = Obj.magic m in - let t : ( -# 50 "parser_cocci_menhir.mly" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" (Data.clt) -# 6216 "parser_cocci_menhir.ml" - ) = Obj.magic t in - let _startpos = _startpos_t_ in +# 6409 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 6414 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in - let _v : 'tv_ctype_full = let cv = + let _v : 'tv_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 469 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) +# 6426 "parser_cocci_menhir.ml" + + in + +# 523 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) +# 6432 "parser_cocci_menhir.ml" + + in + let cv = # 39 "standard.mly" ( None ) -# 6224 "parser_cocci_menhir.ml" +# 6439 "parser_cocci_menhir.ml" in -# 570 "parser_cocci_menhir.mly" - ( let ty = - Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" t])) in - P.pointerify (P.make_cv cv ty) m ) -# 6232 "parser_cocci_menhir.ml" +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 6445 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6244,41 +6457,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.startp = _startpos_m_; MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let m : 'tv_nonempty_list_TMul_ = Obj.magic m in - let t : ( -# 50 "parser_cocci_menhir.mly" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" (Data.clt) -# 6264 "parser_cocci_menhir.ml" - ) = Obj.magic t in - let x0 : 'tv_const_vol = Obj.magic x0 in - let _startpos = _startpos_x0_ in +# 6477 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 6482 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let _startpos = _startpos_r0_ in let _endpos = _endpos_m_ in - let _v : 'tv_ctype_full = let cv = - let x = x0 in + let _v : 'tv_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 471 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) +# 6494 "parser_cocci_menhir.ml" + + in -# 41 "standard.mly" - ( Some x ) -# 6274 "parser_cocci_menhir.ml" +# 523 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) +# 6500 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 6507 "parser_cocci_menhir.ml" in -# 570 "parser_cocci_menhir.mly" - ( let ty = - Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" t])) in - P.pointerify (P.make_cv cv ty) m ) -# 6282 "parser_cocci_menhir.ml" +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 6513 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6290,41 +6521,63 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = rp; - MenhirLib.EngineTypes.startp = _startpos_rp_; - MenhirLib.EngineTypes.endp = _endpos_rp_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = lp; - MenhirLib.EngineTypes.startp = _startpos_lp_; - MenhirLib.EngineTypes.endp = _endpos_lp_; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let rp : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 6313 "parser_cocci_menhir.ml" - ) = Obj.magic rp in - let t : 'tv_midzero_list_ctype_ctype_ = Obj.magic t in - let lp : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 6319 "parser_cocci_menhir.ml" - ) = Obj.magic lp in - let _startpos = _startpos_lp_ in - let _endpos = _endpos_rp_ in - let _v : 'tv_ctype_full = -# 575 "parser_cocci_menhir.mly" - ( let (mids,code) = t in - Ast0.wrap - (Ast0.DisjType(P.clt2mcode "(" lp,code,mids, P.clt2mcode ")" rp)) ) -# 6328 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 6545 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 6550 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let _startpos = _startpos_r0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 473 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) +# 6562 "parser_cocci_menhir.ml" + + in + +# 523 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) +# 6568 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 6575 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 6581 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6336,32 +6589,64 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = p00; + MenhirLib.EngineTypes.startp = _startpos_p00_; + MenhirLib.EngineTypes.endp = _endpos_p00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let _2 : 'tv_list_array_dec_ = Obj.magic _2 in - let _1 : 'tv_ident = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_d_ident = -# 1062 "parser_cocci_menhir.mly" - ( (_1, - function t -> - List.fold_right - (function (l,i,r) -> - function rest -> - Ast0.wrap - (Ast0.Array(rest,P.clt2mcode "[" l,i,P.clt2mcode "]" r))) - _2 t) ) -# 6365 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let p00 : ( +# 64 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 6613 "parser_cocci_menhir.ml" + ) = Obj.magic p00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 6618 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let _startpos = _startpos_r0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let p0 = p00 in + let r = r0 in + let ty = + let p = p0 in + +# 475 "parser_cocci_menhir.mly" + ( let (nm,pure,clt) = p in + Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) +# 6631 "parser_cocci_menhir.ml" + + in + +# 523 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) +# 6637 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 6644 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 6650 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6373,25 +6658,84 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = p00; + MenhirLib.EngineTypes.startp = _startpos_p00_; + MenhirLib.EngineTypes.endp = _endpos_p00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = r00; + MenhirLib.EngineTypes.startp = _startpos_r00_; + MenhirLib.EngineTypes.endp = _endpos_r00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = r1; + MenhirLib.EngineTypes.startp = _startpos_r1_; + MenhirLib.EngineTypes.endp = _endpos_r1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; } = _menhir_stack in - let i : 'tv_ident = Obj.magic i in - let t : 'tv_ctype = Obj.magic t in - let _startpos = _startpos_t_ in - let _endpos = _endpos_i_ in - let _v : 'tv_decl = -# 822 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Param(t, Some i)) ) -# 6395 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let p00 : ( +# 59 "parser_cocci_menhir.mly" + (string * Data.clt) +# 6691 "parser_cocci_menhir.ml" + ) = Obj.magic p00 in + let r00 : ( +# 47 "parser_cocci_menhir.mly" + (string) +# 6696 "parser_cocci_menhir.ml" + ) = Obj.magic r00 in + let r1 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 6701 "parser_cocci_menhir.ml" + ) = Obj.magic r1 in + let _startpos = _startpos_r1_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let p0 = p00 in + let r0 = r00 in + let r = r1 in + let ty = + let p = p0 in + let r = r0 in + +# 478 "parser_cocci_menhir.mly" + ( let nm = (r,P.id2name p) in + (* this is only possible when we are in a metavar decl. Otherwise, + it will be represented already as a MetaType *) + let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in + Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p), + Ast0.Impure (*will be ignored*))) ) +# 6720 "parser_cocci_menhir.ml" + + in + +# 523 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) +# 6726 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 6733 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 6739 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6403,86 +6747,63 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = rp1; - MenhirLib.EngineTypes.startp = _startpos_rp1_; - MenhirLib.EngineTypes.endp = _endpos_rp1_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lp1; - MenhirLib.EngineTypes.startp = _startpos_lp1_; - MenhirLib.EngineTypes.endp = _endpos_lp1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = rp; - MenhirLib.EngineTypes.startp = _startpos_rp_; - MenhirLib.EngineTypes.endp = _endpos_rp_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = s; - MenhirLib.EngineTypes.startp = _startpos_s_; - MenhirLib.EngineTypes.endp = _endpos_s_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lp; - MenhirLib.EngineTypes.startp = _startpos_lp_; - MenhirLib.EngineTypes.endp = _endpos_lp_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let rp1 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 6451 "parser_cocci_menhir.ml" - ) = Obj.magic rp1 in - let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in - let lp1 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 6457 "parser_cocci_menhir.ml" - ) = Obj.magic lp1 in - let rp : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 6462 "parser_cocci_menhir.ml" - ) = Obj.magic rp in - let i : 'tv_ident = Obj.magic i in - let s : ( -# 99 "parser_cocci_menhir.mly" - (Data.clt) -# 6468 "parser_cocci_menhir.ml" - ) = Obj.magic s in - let lp : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 6473 "parser_cocci_menhir.ml" - ) = Obj.magic lp in - let t : 'tv_fn_ctype = Obj.magic t in - let _startpos = _startpos_t_ in - let _endpos = _endpos_rp1_ in - let _v : 'tv_decl = -# 825 "parser_cocci_menhir.mly" - ( let fnptr = - Ast0.wrap - (Ast0.FunctionPointer - (t,P.clt2mcode "(" lp,P.clt2mcode "*" s,P.clt2mcode ")" rp, - P.clt2mcode "(" lp1,d,P.clt2mcode ")" rp1)) in - Ast0.wrap(Ast0.Param(fnptr, Some i)) ) -# 6486 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 6771 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 6776 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let _startpos = _startpos_r0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 485 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) ) +# 6788 "parser_cocci_menhir.ml" + + in + +# 523 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) +# 6794 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 6801 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 6807 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6494,25 +6815,78 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ty200; + MenhirLib.EngineTypes.startp = _startpos_ty200_; + MenhirLib.EngineTypes.endp = _endpos_ty200_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ty100; + MenhirLib.EngineTypes.startp = _startpos_ty100_; + MenhirLib.EngineTypes.endp = _endpos_ty100_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; } = _menhir_stack in - let t : ( -# 50 "parser_cocci_menhir.mly" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty200 : ( +# 49 "parser_cocci_menhir.mly" (Data.clt) -# 6507 "parser_cocci_menhir.ml" - ) = Obj.magic t in - let _startpos = _startpos_t_ in - let _endpos = _endpos_t_ in - let _v : 'tv_decl = -# 832 "parser_cocci_menhir.mly" - ( let ty = - Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" t])) in - Ast0.wrap(Ast0.VoidParam(ty)) ) -# 6516 "parser_cocci_menhir.ml" +# 6844 "parser_cocci_menhir.ml" + ) = Obj.magic ty200 in + let ty100 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 6849 "parser_cocci_menhir.ml" + ) = Obj.magic ty100 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 6854 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let _startpos = _startpos_r0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let ty20 = ty200 in + let ty10 = ty100 in + let r = r0 in + let ty = + let ty2 = ty20 in + let ty1 = ty10 in + +# 487 "parser_cocci_menhir.mly" + ( Ast0.wrap + (Ast0.BaseType + (Ast.LongLongType, + [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) +# 6871 "parser_cocci_menhir.ml" + + in + +# 523 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) +# 6877 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 6884 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 6890 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6524,24 +6898,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : ( -# 64 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 6537 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_decl = -# 836 "parser_cocci_menhir.mly" - ( let (nm,pure,clt) = _1 in - Ast0.wrap(Ast0.MetaParam(P.clt2mcode nm clt,pure)) ) -# 6545 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 6917 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let _startpos = _startpos_ty00_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let ty0 = ty00 in + let ty = + let ty = ty0 in + +# 469 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) +# 6928 "parser_cocci_menhir.ml" + + in + +# 524 "parser_cocci_menhir.mly" + ( ty ) +# 6934 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 6941 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 6947 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6553,23 +6955,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : ( -# 59 "parser_cocci_menhir.mly" - (string * Data.clt) -# 6566 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_decl_ident = -# 1517 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) ) -# 6573 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 6974 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let _startpos = _startpos_ty00_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let ty0 = ty00 in + let ty = + let ty = ty0 in + +# 471 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) +# 6985 "parser_cocci_menhir.ml" + + in + +# 524 "parser_cocci_menhir.mly" + ( ty ) +# 6991 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 6998 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 7004 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6581,24 +7012,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : ( -# 62 "parser_cocci_menhir.mly" - (Parse_aux.idinfo) -# 6594 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_decl_ident = -# 1519 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,clt) = _1 in - Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,pure)) ) -# 6602 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 7031 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let _startpos = _startpos_ty00_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let ty0 = ty00 in + let ty = + let ty = ty0 in + +# 473 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) +# 7042 "parser_cocci_menhir.ml" + + in + +# 524 "parser_cocci_menhir.mly" + ( ty ) +# 7048 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 7055 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 7061 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6609,13 +7068,54 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_decl_list_decl_ = -# 1539 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.DOTS([])) ) -# 6619 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = p00; + MenhirLib.EngineTypes.startp = _startpos_p00_; + MenhirLib.EngineTypes.endp = _endpos_p00_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let m : 'tv_list_TMul_ = Obj.magic m in + let p00 : ( +# 64 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 7088 "parser_cocci_menhir.ml" + ) = Obj.magic p00 in + let _startpos = _startpos_p00_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let p0 = p00 in + let ty = + let p = p0 in + +# 475 "parser_cocci_menhir.mly" + ( let (nm,pure,clt) = p in + Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) +# 7100 "parser_cocci_menhir.ml" + + in + +# 524 "parser_cocci_menhir.mly" + ( ty ) +# 7106 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 7113 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 7119 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6627,23 +7127,73 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = p00; + MenhirLib.EngineTypes.startp = _startpos_p00_; + MenhirLib.EngineTypes.endp = _endpos_p00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = r00; + MenhirLib.EngineTypes.startp = _startpos_r00_; + MenhirLib.EngineTypes.endp = _endpos_r00_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; } = _menhir_stack in - let _1 : 'tv_decl_list_start_decl_ = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_decl_list_decl_ = -# 1541 "parser_cocci_menhir.mly" - (let circle x = - match Ast0.unwrap x with Ast0.Pcircles(_) -> true | _ -> false in - if List.exists circle _1 - then Ast0.wrap(Ast0.CIRCLES(_1)) - else Ast0.wrap(Ast0.DOTS(_1)) ) -# 6647 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let p00 : ( +# 59 "parser_cocci_menhir.mly" + (string * Data.clt) +# 7155 "parser_cocci_menhir.ml" + ) = Obj.magic p00 in + let r00 : ( +# 47 "parser_cocci_menhir.mly" + (string) +# 7160 "parser_cocci_menhir.ml" + ) = Obj.magic r00 in + let _startpos = _startpos_r00_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let p0 = p00 in + let r0 = r00 in + let ty = + let p = p0 in + let r = r0 in + +# 478 "parser_cocci_menhir.mly" + ( let nm = (r,P.id2name p) in + (* this is only possible when we are in a metavar decl. Otherwise, + it will be represented already as a MetaType *) + let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in + Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p), + Ast0.Impure (*will be ignored*))) ) +# 7178 "parser_cocci_menhir.ml" + + in + +# 524 "parser_cocci_menhir.mly" + ( ty ) +# 7184 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 7191 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 7197 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6654,13 +7204,53 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_decl_list_name_opt_decl_ = -# 1539 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.DOTS([])) ) -# 6664 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 7224 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let _startpos = _startpos_ty00_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let ty0 = ty00 in + let ty = + let ty = ty0 in + +# 485 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) ) +# 7235 "parser_cocci_menhir.ml" + + in + +# 524 "parser_cocci_menhir.mly" + ( ty ) +# 7241 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 7248 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 7254 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6672,23 +7262,67 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ty200; + MenhirLib.EngineTypes.startp = _startpos_ty200_; + MenhirLib.EngineTypes.endp = _endpos_ty200_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ty100; + MenhirLib.EngineTypes.startp = _startpos_ty100_; + MenhirLib.EngineTypes.endp = _endpos_ty100_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let _1 : 'tv_decl_list_start_name_opt_decl_ = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_decl_list_name_opt_decl_ = -# 1541 "parser_cocci_menhir.mly" - (let circle x = - match Ast0.unwrap x with Ast0.Pcircles(_) -> true | _ -> false in - if List.exists circle _1 - then Ast0.wrap(Ast0.CIRCLES(_1)) - else Ast0.wrap(Ast0.DOTS(_1)) ) -# 6692 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty200 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 7286 "parser_cocci_menhir.ml" + ) = Obj.magic ty200 in + let ty100 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 7291 "parser_cocci_menhir.ml" + ) = Obj.magic ty100 in + let _startpos = _startpos_ty100_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let ty20 = ty200 in + let ty10 = ty100 in + let ty = + let ty2 = ty20 in + let ty1 = ty10 in + +# 487 "parser_cocci_menhir.mly" + ( Ast0.wrap + (Ast0.BaseType + (Ast.LongLongType, + [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) +# 7307 "parser_cocci_menhir.ml" + + in + +# 524 "parser_cocci_menhir.mly" + ( ty ) +# 7313 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 7320 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 7326 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6700,19 +7334,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : 'tv_one_dec_decl_ = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_decl_list_start_decl_ = -# 1548 "parser_cocci_menhir.mly" - ( [_1] ) -# 6716 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 50 "parser_cocci_menhir.mly" + (Data.clt) +# 7353 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let _startpos = _startpos_ty00_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let ty0 = ty00 in + let ty = + let ty = ty0 in + +# 495 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" ty])) ) +# 7364 "parser_cocci_menhir.ml" + + in + +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 7370 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 7377 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 7383 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6724,35 +7391,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _3 : 'tv_decl_list_start_decl_ = Obj.magic _3 in - let _2 : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 6748 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_one_dec_decl_ = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_decl_list_start_decl_ = -# 1550 "parser_cocci_menhir.mly" - ( _1::Ast0.wrap(Ast0.PComma(P.clt2mcode "," _2))::_3 ) -# 6756 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 7410 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let _startpos = _startpos_ty00_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let ty0 = ty00 in + let ty = + let ty = ty0 in + +# 497 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.DoubleType,[P.clt2mcode "double" ty])) ) +# 7421 "parser_cocci_menhir.ml" + + in + +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 7427 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 7434 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 7440 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6764,30 +7448,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : 'tv_list_comma_decls_TEllipsis_decl__ = Obj.magic _2 in - let _1 : ( -# 73 "parser_cocci_menhir.mly" - (Data.clt) -# 6783 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_decl_list_start_decl_ = -# 1552 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Pdots(P.clt2mcode "..." _1)):: - (List.concat(List.map (function x -> x (P.mkpdots "...")) _2)) ) -# 6791 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 7467 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let _startpos = _startpos_ty00_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let ty0 = ty00 in + let ty = + let ty = ty0 in + +# 499 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.FloatType,[P.clt2mcode "float" ty])) ) +# 7478 "parser_cocci_menhir.ml" + + in + +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 7484 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 7491 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 7497 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6799,19 +7505,60 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = i00; + MenhirLib.EngineTypes.startp = _startpos_i00_; + MenhirLib.EngineTypes.endp = _endpos_i00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = s00; + MenhirLib.EngineTypes.startp = _startpos_s00_; + MenhirLib.EngineTypes.endp = _endpos_s00_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let _1 : 'tv_one_dec_name_opt_decl_ = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_decl_list_start_name_opt_decl_ = -# 1548 "parser_cocci_menhir.mly" - ( [_1] ) -# 6815 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let i00 : 'tv_ident = Obj.magic i00 in + let s00 : ( +# 50 "parser_cocci_menhir.mly" + (Data.clt) +# 7530 "parser_cocci_menhir.ml" + ) = Obj.magic s00 in + let _startpos = _startpos_s00_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let i0 = i00 in + let s0 = s00 in + let ty = + let i = i0 in + let s = s0 in + +# 501 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)) ) +# 7543 "parser_cocci_menhir.ml" + + in + +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 7549 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 7556 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 7562 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6823,35 +7570,56 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = i00; + MenhirLib.EngineTypes.startp = _startpos_i00_; + MenhirLib.EngineTypes.endp = _endpos_i00_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = s00; + MenhirLib.EngineTypes.startp = _startpos_s00_; + MenhirLib.EngineTypes.endp = _endpos_s00_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _3 : 'tv_decl_list_start_name_opt_decl_ = Obj.magic _3 in - let _2 : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 6847 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_one_dec_name_opt_decl_ = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_decl_list_start_name_opt_decl_ = -# 1550 "parser_cocci_menhir.mly" - ( _1::Ast0.wrap(Ast0.PComma(P.clt2mcode "," _2))::_3 ) -# 6855 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let i00 : 'tv_ident = Obj.magic i00 in + let s00 : 'tv_struct_or_union = Obj.magic s00 in + let _startpos = _startpos_s00_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let i0 = i00 in + let s0 = s00 in + let ty = + let i = i0 in + let s = s0 in + +# 503 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.StructUnionName(s, Some i)) ) +# 7604 "parser_cocci_menhir.ml" + + in + +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 7610 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 7617 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 7623 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6863,30 +7631,91 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = r00; + MenhirLib.EngineTypes.startp = _startpos_r00_; + MenhirLib.EngineTypes.endp = _endpos_r00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = d00; + MenhirLib.EngineTypes.startp = _startpos_d00_; + MenhirLib.EngineTypes.endp = _endpos_d00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = l00; + MenhirLib.EngineTypes.startp = _startpos_l00_; + MenhirLib.EngineTypes.endp = _endpos_l00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = s00; + MenhirLib.EngineTypes.startp = _startpos_s00_; + MenhirLib.EngineTypes.endp = _endpos_s00_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; } = _menhir_stack in - let _2 : 'tv_list_comma_decls_TEllipsis_name_opt_decl__ = Obj.magic _2 in - let _1 : ( -# 73 "parser_cocci_menhir.mly" + let m : 'tv_list_TMul_ = Obj.magic m in + let r00 : ( +# 101 "parser_cocci_menhir.mly" (Data.clt) -# 6882 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_decl_list_start_name_opt_decl_ = -# 1552 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Pdots(P.clt2mcode "..." _1)):: - (List.concat(List.map (function x -> x (P.mkpdots "...")) _2)) ) -# 6890 "parser_cocci_menhir.ml" +# 7665 "parser_cocci_menhir.ml" + ) = Obj.magic r00 in + let d00 : 'tv_struct_decl_list = Obj.magic d00 in + let l00 : ( +# 101 "parser_cocci_menhir.mly" + (Data.clt) +# 7671 "parser_cocci_menhir.ml" + ) = Obj.magic l00 in + let s00 : 'tv_struct_or_union = Obj.magic s00 in + let _startpos = _startpos_s00_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let r0 = r00 in + let d0 = d00 in + let l0 = l00 in + let s0 = s00 in + let ty = + let r = r0 in + let d = d0 in + let l = l0 in + let s = s0 in + let i = + +# 39 "standard.mly" + ( None ) +# 7690 "parser_cocci_menhir.ml" + + in + +# 506 "parser_cocci_menhir.mly" + ( (if i = None && !Data.in_iso + then failwith "structures must be named in the iso file"); + Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)), + P.clt2mcode "{" l, + d, P.clt2mcode "}" r)) ) +# 7700 "parser_cocci_menhir.ml" + + in + +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 7706 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 7713 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 7719 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6898,24 +7727,100 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let _1 : ( -# 64 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 6911 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_decl_statement = -# 1140 "parser_cocci_menhir.mly" - ( let (nm,pure,clt) = _1 in - [Ast0.wrap(Ast0.MetaStmt(P.clt2mcode nm clt,pure))] ) -# 6919 "parser_cocci_menhir.ml" + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = r00; + MenhirLib.EngineTypes.startp = _startpos_r00_; + MenhirLib.EngineTypes.endp = _endpos_r00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = d00; + MenhirLib.EngineTypes.startp = _startpos_d00_; + MenhirLib.EngineTypes.endp = _endpos_d00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = l00; + MenhirLib.EngineTypes.startp = _startpos_l00_; + MenhirLib.EngineTypes.endp = _endpos_l00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = x000; + MenhirLib.EngineTypes.startp = _startpos_x000_; + MenhirLib.EngineTypes.endp = _endpos_x000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = s00; + MenhirLib.EngineTypes.startp = _startpos_s00_; + MenhirLib.EngineTypes.endp = _endpos_s00_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + } = _menhir_stack in + let m : 'tv_list_TMul_ = Obj.magic m in + let r00 : ( +# 101 "parser_cocci_menhir.mly" + (Data.clt) +# 7766 "parser_cocci_menhir.ml" + ) = Obj.magic r00 in + let d00 : 'tv_struct_decl_list = Obj.magic d00 in + let l00 : ( +# 101 "parser_cocci_menhir.mly" + (Data.clt) +# 7772 "parser_cocci_menhir.ml" + ) = Obj.magic l00 in + let x000 : 'tv_ident = Obj.magic x000 in + let s00 : 'tv_struct_or_union = Obj.magic s00 in + let _startpos = _startpos_s00_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let r0 = r00 in + let d0 = d00 in + let l0 = l00 in + let x00 = x000 in + let s0 = s00 in + let ty = + let r = r0 in + let d = d0 in + let l = l0 in + let x0 = x00 in + let s = s0 in + let i = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 7795 "parser_cocci_menhir.ml" + + in + +# 506 "parser_cocci_menhir.mly" + ( (if i = None && !Data.in_iso + then failwith "structures must be named in the iso file"); + Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)), + P.clt2mcode "{" l, + d, P.clt2mcode "}" r)) ) +# 7805 "parser_cocci_menhir.ml" + + in + +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 7811 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 7818 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 7824 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6927,23 +7832,86 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = r00; + MenhirLib.EngineTypes.startp = _startpos_r00_; + MenhirLib.EngineTypes.endp = _endpos_r00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = d00; + MenhirLib.EngineTypes.startp = _startpos_d00_; + MenhirLib.EngineTypes.endp = _endpos_d00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = l00; + MenhirLib.EngineTypes.startp = _startpos_l00_; + MenhirLib.EngineTypes.endp = _endpos_l00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = s00; + MenhirLib.EngineTypes.startp = _startpos_s00_; + MenhirLib.EngineTypes.endp = _endpos_s00_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; } = _menhir_stack in - let _1 : 'tv_decl_var = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_decl_statement = -# 1143 "parser_cocci_menhir.mly" - ( List.map - (function x -> - Ast0.wrap - (Ast0.Decl((Ast0.default_info(),Ast0.context_befaft()),x))) - _1 ) -# 6947 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let r00 : ( +# 101 "parser_cocci_menhir.mly" + (Data.clt) +# 7866 "parser_cocci_menhir.ml" + ) = Obj.magic r00 in + let d00 : 'tv_struct_decl_list = Obj.magic d00 in + let l00 : ( +# 101 "parser_cocci_menhir.mly" + (Data.clt) +# 7872 "parser_cocci_menhir.ml" + ) = Obj.magic l00 in + let s00 : ( +# 64 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 7877 "parser_cocci_menhir.ml" + ) = Obj.magic s00 in + let _startpos = _startpos_s00_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let r0 = r00 in + let d0 = d00 in + let l0 = l00 in + let s0 = s00 in + let ty = + let r = r0 in + let d = d0 in + let l = l0 in + let s = s0 in + +# 512 "parser_cocci_menhir.mly" + ( let (nm,pure,clt) = s in + let ty = Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) in + Ast0.wrap(Ast0.StructUnionDef(ty,P.clt2mcode "{" l,d,P.clt2mcode "}" r)) ) +# 7896 "parser_cocci_menhir.ml" + + in + +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 7902 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 7909 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 7915 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6955,19 +7923,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = p00; + MenhirLib.EngineTypes.startp = _startpos_p00_; + MenhirLib.EngineTypes.endp = _endpos_p00_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : 'tv_statement = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_decl_statement = -# 1148 "parser_cocci_menhir.mly" - ( [_1] ) -# 6971 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let p00 : ( +# 59 "parser_cocci_menhir.mly" + (string * Data.clt) +# 7942 "parser_cocci_menhir.ml" + ) = Obj.magic p00 in + let _startpos = _startpos_p00_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let p0 = p00 in + let ty = + let p = p0 in + +# 516 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.TypeName(P.id2mcode p)) ) +# 7953 "parser_cocci_menhir.ml" + + in + +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 7959 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 7966 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 7972 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -6979,47 +7980,70 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in - let _3 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 7002 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let t : 'tv_midzero_list_fun_start_fun_start_ = Obj.magic t in - let _1 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 7008 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_decl_statement = -# 1157 "parser_cocci_menhir.mly" - ( let (mids,code) = t in - if List.for_all - (function x -> - match Ast0.unwrap x with Ast0.DOTS([]) -> true | _ -> false) - code - then [] - else - [Ast0.wrap(Ast0.Disj(P.clt2mcode "(" _1, code, mids, - P.clt2mcode ")" _3))] ) -# 7023 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 8009 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 8014 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 469 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) +# 8027 "parser_cocci_menhir.ml" + + in + +# 521 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) +# 8033 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 8041 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 8047 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7031,161 +8055,70 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; } = _menhir_stack in - let _1 : ( -# 64 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 7044 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_decl_statement_expr = -# 1170 "parser_cocci_menhir.mly" - ( let (nm,pure,clt) = _1 in - [Ast0.wrap(Ast0.MetaStmt(P.clt2mcode nm clt,pure))] ) -# 7052 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let _1 : 'tv_decl_var = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_decl_statement_expr = -# 1173 "parser_cocci_menhir.mly" - ( List.map - (function x -> - Ast0.wrap - (Ast0.Decl((Ast0.default_info(),Ast0.context_befaft()),x))) - _1 ) -# 7080 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let _1 : 'tv_statement = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_decl_statement_expr = -# 1178 "parser_cocci_menhir.mly" - ( [_1] ) -# 7104 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let _3 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 7135 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let t : 'tv_midzero_list_fun_after_stm_fun_after_dots_or_ = Obj.magic t in - let _1 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 7141 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_decl_statement_expr = -# 1187 "parser_cocci_menhir.mly" - ( let (mids,code) = t in - if List.for_all (function [] -> true | _ -> false) code - then [] - else - let dot_code = - List.map (function x -> Ast0.wrap(Ast0.DOTS x)) code in - [Ast0.wrap(Ast0.Disj(P.clt2mcode "(" _1, dot_code, mids, - P.clt2mcode ")" _3))] ) -# 7155 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 7181 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let t : 'tv_ctype = Obj.magic t in - let _startpos = _startpos_t_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_decl_var = -# 953 "parser_cocci_menhir.mly" - ( [Ast0.wrap(Ast0.TyDecl(t,P.clt2mcode ";" pv))] ) -# 7189 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 8084 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 8089 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 471 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) +# 8102 "parser_cocci_menhir.ml" + + in + +# 521 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) +# 8108 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 8116 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 8122 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7197,45 +8130,70 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 7220 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let d : 'tv_comma_list_d_ident_ = Obj.magic d in - let t : 'tv_ctype = Obj.magic t in - let _startpos = _startpos_t_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_decl_var = let s = + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 8159 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 8164 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 473 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) +# 8177 "parser_cocci_menhir.ml" + + in -# 39 "standard.mly" - ( None ) -# 7230 "parser_cocci_menhir.ml" +# 521 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) +# 8183 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 8191 "parser_cocci_menhir.ml" in -# 955 "parser_cocci_menhir.mly" - ( List.map - (function (id,fn) -> - Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv))) - d ) -# 7239 "parser_cocci_menhir.ml" +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 8197 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7247,17 +8205,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.semv = p00; + MenhirLib.EngineTypes.startp = _startpos_p00_; + MenhirLib.EngineTypes.endp = _endpos_p00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = x0; @@ -7268,31 +8226,50 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 7275 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let d : 'tv_comma_list_d_ident_ = Obj.magic d in - let t : 'tv_ctype = Obj.magic t in - let x0 : 'tv_storage = Obj.magic x0 in + let m : 'tv_list_TMul_ = Obj.magic m in + let p00 : ( +# 64 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 8234 "parser_cocci_menhir.ml" + ) = Obj.magic p00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 8239 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_decl_var = let s = + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let p0 = p00 in + let r = r0 in + let ty = + let p = p0 in + +# 475 "parser_cocci_menhir.mly" + ( let (nm,pure,clt) = p in + Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) +# 8253 "parser_cocci_menhir.ml" + + in + +# 521 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) +# 8259 "parser_cocci_menhir.ml" + + in + let cv = let x = x0 in # 41 "standard.mly" ( Some x ) -# 7287 "parser_cocci_menhir.ml" +# 8267 "parser_cocci_menhir.ml" in -# 955 "parser_cocci_menhir.mly" - ( List.map - (function (id,fn) -> - Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv))) - d ) -# 7296 "parser_cocci_menhir.ml" +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 8273 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7304,83 +8281,91 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = f; - MenhirLib.EngineTypes.startp = _startpos_f_; - MenhirLib.EngineTypes.endp = _endpos_f_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let f : 'tv_funproto = Obj.magic f in - let _startpos = _startpos_f_ in - let _endpos = _endpos_f_ in - let _v : 'tv_decl_var = -# 959 "parser_cocci_menhir.mly" - ( [f] ) -# 7320 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.semv = p00; + MenhirLib.EngineTypes.startp = _startpos_p00_; + MenhirLib.EngineTypes.endp = _endpos_p00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = q; - MenhirLib.EngineTypes.startp = _startpos_q_; - MenhirLib.EngineTypes.endp = _endpos_q_; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.semv = r00; + MenhirLib.EngineTypes.startp = _startpos_r00_; + MenhirLib.EngineTypes.endp = _endpos_r00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = r1; + MenhirLib.EngineTypes.startp = _startpos_r1_; + MenhirLib.EngineTypes.endp = _endpos_r1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; }; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 7361 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 7367 "parser_cocci_menhir.ml" - ) = Obj.magic q in - let d : 'tv_d_ident = Obj.magic d in - let t : 'tv_ctype = Obj.magic t in - let _startpos = _startpos_t_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_decl_var = let s = + let m : 'tv_list_TMul_ = Obj.magic m in + let p00 : ( +# 59 "parser_cocci_menhir.mly" + (string * Data.clt) +# 8319 "parser_cocci_menhir.ml" + ) = Obj.magic p00 in + let r00 : ( +# 47 "parser_cocci_menhir.mly" + (string) +# 8324 "parser_cocci_menhir.ml" + ) = Obj.magic r00 in + let r1 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 8329 "parser_cocci_menhir.ml" + ) = Obj.magic r1 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let p0 = p00 in + let r0 = r00 in + let r = r1 in + let ty = + let p = p0 in + let r = r0 in + +# 478 "parser_cocci_menhir.mly" + ( let nm = (r,P.id2name p) in + (* this is only possible when we are in a metavar decl. Otherwise, + it will be represented already as a MetaType *) + let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in + Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p), + Ast0.Impure (*will be ignored*))) ) +# 8349 "parser_cocci_menhir.ml" + + in -# 39 "standard.mly" - ( None ) -# 7377 "parser_cocci_menhir.ml" +# 521 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) +# 8355 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 8363 "parser_cocci_menhir.ml" in -# 961 "parser_cocci_menhir.mly" - (let (id,fn) = d in - [Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))]) -# 7384 "parser_cocci_menhir.ml" +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 8369 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7392,66 +8377,70 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = q; - MenhirLib.EngineTypes.startp = _startpos_q_; - MenhirLib.EngineTypes.endp = _endpos_q_; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 7430 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 7436 "parser_cocci_menhir.ml" - ) = Obj.magic q in - let d : 'tv_d_ident = Obj.magic d in - let t : 'tv_ctype = Obj.magic t in - let x0 : 'tv_storage = Obj.magic x0 in + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 8406 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 8411 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_decl_var = let s = + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 485 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) ) +# 8424 "parser_cocci_menhir.ml" + + in + +# 521 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) +# 8430 "parser_cocci_menhir.ml" + + in + let cv = let x = x0 in # 41 "standard.mly" ( Some x ) -# 7448 "parser_cocci_menhir.ml" +# 8438 "parser_cocci_menhir.ml" in -# 961 "parser_cocci_menhir.mly" - (let (id,fn) = d in - [Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))]) -# 7455 "parser_cocci_menhir.ml" +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 8444 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7463,54 +8452,85 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.semv = ty200; + MenhirLib.EngineTypes.startp = _startpos_ty200_; + MenhirLib.EngineTypes.endp = _endpos_ty200_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ty100; + MenhirLib.EngineTypes.startp = _startpos_ty100_; + MenhirLib.EngineTypes.endp = _endpos_ty100_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 7486 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let d : 'tv_comma_list_d_ident_ = Obj.magic d in - let i : 'tv_pure_ident = Obj.magic i in - let _startpos = _startpos_i_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_decl_var = let cv = + let m : 'tv_list_TMul_ = Obj.magic m in + let ty200 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 8486 "parser_cocci_menhir.ml" + ) = Obj.magic ty200 in + let ty100 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 8491 "parser_cocci_menhir.ml" + ) = Obj.magic ty100 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 8496 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let ty20 = ty200 in + let ty10 = ty100 in + let r = r0 in + let ty = + let ty2 = ty20 in + let ty1 = ty10 in + +# 487 "parser_cocci_menhir.mly" + ( Ast0.wrap + (Ast0.BaseType + (Ast.LongLongType, + [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) +# 8514 "parser_cocci_menhir.ml" + + in -# 39 "standard.mly" - ( None ) -# 7496 "parser_cocci_menhir.ml" +# 521 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) +# 8520 "parser_cocci_menhir.ml" in - let s = + let cv = + let x = x0 in -# 39 "standard.mly" - ( None ) -# 7503 "parser_cocci_menhir.ml" +# 41 "standard.mly" + ( Some x ) +# 8528 "parser_cocci_menhir.ml" in -# 966 "parser_cocci_menhir.mly" - ( List.map - (function (id,fn) -> - let idtype = - P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in - Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv))) - d ) -# 7514 "parser_cocci_menhir.ml" +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 8534 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7522,17 +8542,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = x0; @@ -7543,40 +8563,49 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 7550 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let d : 'tv_comma_list_d_ident_ = Obj.magic d in - let i : 'tv_pure_ident = Obj.magic i in + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 8571 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 8576 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_decl_var = let cv = + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 469 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) +# 8589 "parser_cocci_menhir.ml" + + in + +# 523 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) +# 8595 "parser_cocci_menhir.ml" + + in + let cv = let x = x0 in # 41 "standard.mly" ( Some x ) -# 7562 "parser_cocci_menhir.ml" - - in - let s = - -# 39 "standard.mly" - ( None ) -# 7569 "parser_cocci_menhir.ml" +# 8603 "parser_cocci_menhir.ml" in -# 966 "parser_cocci_menhir.mly" - ( List.map - (function (id,fn) -> - let idtype = - P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in - Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv))) - d ) -# 7580 "parser_cocci_menhir.ml" +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 8609 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7588,17 +8617,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = x0; @@ -7609,40 +8638,49 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 7616 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let d : 'tv_comma_list_d_ident_ = Obj.magic d in - let i : 'tv_pure_ident = Obj.magic i in - let x0 : 'tv_storage = Obj.magic x0 in + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 8646 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 8651 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_decl_var = let cv = + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 471 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) +# 8664 "parser_cocci_menhir.ml" + + in -# 39 "standard.mly" - ( None ) -# 7627 "parser_cocci_menhir.ml" +# 523 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) +# 8670 "parser_cocci_menhir.ml" in - let s = + let cv = let x = x0 in # 41 "standard.mly" ( Some x ) -# 7635 "parser_cocci_menhir.ml" +# 8678 "parser_cocci_menhir.ml" in -# 966 "parser_cocci_menhir.mly" - ( List.map - (function (id,fn) -> - let idtype = - P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in - Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv))) - d ) -# 7646 "parser_cocci_menhir.ml" +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 8684 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7654,68 +8692,70 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = x1; - MenhirLib.EngineTypes.startp = _startpos_x1_; - MenhirLib.EngineTypes.endp = _endpos_x1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 7687 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let d : 'tv_comma_list_d_ident_ = Obj.magic d in - let i : 'tv_pure_ident = Obj.magic i in - let x1 : 'tv_const_vol = Obj.magic x1 in - let x0 : 'tv_storage = Obj.magic x0 in + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 8721 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 8726 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_decl_var = let cv = - let x = x1 in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 473 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) +# 8739 "parser_cocci_menhir.ml" + + in -# 41 "standard.mly" - ( Some x ) -# 7700 "parser_cocci_menhir.ml" +# 523 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) +# 8745 "parser_cocci_menhir.ml" in - let s = + let cv = let x = x0 in # 41 "standard.mly" ( Some x ) -# 7708 "parser_cocci_menhir.ml" +# 8753 "parser_cocci_menhir.ml" in -# 966 "parser_cocci_menhir.mly" - ( List.map - (function (id,fn) -> - let idtype = - P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in - Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv))) - d ) -# 7719 "parser_cocci_menhir.ml" +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 8759 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7727,69 +8767,71 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.semv = p00; + MenhirLib.EngineTypes.startp = _startpos_p00_; + MenhirLib.EngineTypes.endp = _endpos_p00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = q; - MenhirLib.EngineTypes.startp = _startpos_q_; - MenhirLib.EngineTypes.endp = _endpos_q_; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 7760 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 7766 "parser_cocci_menhir.ml" - ) = Obj.magic q in - let d : 'tv_d_ident = Obj.magic d in - let i : 'tv_pure_ident = Obj.magic i in - let _startpos = _startpos_i_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_decl_var = let cv = + let m : 'tv_list_TMul_ = Obj.magic m in + let p00 : ( +# 64 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 8796 "parser_cocci_menhir.ml" + ) = Obj.magic p00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 8801 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let p0 = p00 in + let r = r0 in + let ty = + let p = p0 in + +# 475 "parser_cocci_menhir.mly" + ( let (nm,pure,clt) = p in + Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) +# 8815 "parser_cocci_menhir.ml" + + in -# 39 "standard.mly" - ( None ) -# 7776 "parser_cocci_menhir.ml" +# 523 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) +# 8821 "parser_cocci_menhir.ml" in - let s = + let cv = + let x = x0 in -# 39 "standard.mly" - ( None ) -# 7783 "parser_cocci_menhir.ml" +# 41 "standard.mly" + ( Some x ) +# 8829 "parser_cocci_menhir.ml" in -# 974 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - !Data.add_type_name (P.id2name i); - let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in - [Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e, - P.clt2mcode ";" pv))] ) -# 7793 "parser_cocci_menhir.ml" +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 8835 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7801,25 +8843,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.semv = p00; + MenhirLib.EngineTypes.startp = _startpos_p00_; + MenhirLib.EngineTypes.endp = _endpos_p00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = q; - MenhirLib.EngineTypes.startp = _startpos_q_; - MenhirLib.EngineTypes.endp = _endpos_q_; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.semv = r00; + MenhirLib.EngineTypes.startp = _startpos_r00_; + MenhirLib.EngineTypes.endp = _endpos_r00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.semv = r1; + MenhirLib.EngineTypes.startp = _startpos_r1_; + MenhirLib.EngineTypes.endp = _endpos_r1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = x0; @@ -7832,45 +8873,61 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 7839 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 7845 "parser_cocci_menhir.ml" - ) = Obj.magic q in - let d : 'tv_d_ident = Obj.magic d in - let i : 'tv_pure_ident = Obj.magic i in + let m : 'tv_list_TMul_ = Obj.magic m in + let p00 : ( +# 59 "parser_cocci_menhir.mly" + (string * Data.clt) +# 8881 "parser_cocci_menhir.ml" + ) = Obj.magic p00 in + let r00 : ( +# 47 "parser_cocci_menhir.mly" + (string) +# 8886 "parser_cocci_menhir.ml" + ) = Obj.magic r00 in + let r1 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 8891 "parser_cocci_menhir.ml" + ) = Obj.magic r1 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_decl_var = let cv = - let x = x0 in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let p0 = p00 in + let r0 = r00 in + let r = r1 in + let ty = + let p = p0 in + let r = r0 in + +# 478 "parser_cocci_menhir.mly" + ( let nm = (r,P.id2name p) in + (* this is only possible when we are in a metavar decl. Otherwise, + it will be represented already as a MetaType *) + let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in + Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p), + Ast0.Impure (*will be ignored*))) ) +# 8911 "parser_cocci_menhir.ml" + + in -# 41 "standard.mly" - ( Some x ) -# 7857 "parser_cocci_menhir.ml" +# 523 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) +# 8917 "parser_cocci_menhir.ml" in - let s = + let cv = + let x = x0 in -# 39 "standard.mly" - ( None ) -# 7864 "parser_cocci_menhir.ml" +# 41 "standard.mly" + ( Some x ) +# 8925 "parser_cocci_menhir.ml" in -# 974 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - !Data.add_type_name (P.id2name i); - let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in - [Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e, - P.clt2mcode ";" pv))] ) -# 7874 "parser_cocci_menhir.ml" +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 8931 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7882,76 +8939,70 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = q; - MenhirLib.EngineTypes.startp = _startpos_q_; - MenhirLib.EngineTypes.endp = _endpos_q_; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 7920 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 7926 "parser_cocci_menhir.ml" - ) = Obj.magic q in - let d : 'tv_d_ident = Obj.magic d in - let i : 'tv_pure_ident = Obj.magic i in - let x0 : 'tv_storage = Obj.magic x0 in + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 8968 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 8973 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_decl_var = let cv = + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 485 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) ) +# 8986 "parser_cocci_menhir.ml" + + in -# 39 "standard.mly" - ( None ) -# 7937 "parser_cocci_menhir.ml" +# 523 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) +# 8992 "parser_cocci_menhir.ml" in - let s = + let cv = let x = x0 in # 41 "standard.mly" ( Some x ) -# 7945 "parser_cocci_menhir.ml" +# 9000 "parser_cocci_menhir.ml" in -# 974 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - !Data.add_type_name (P.id2name i); - let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in - [Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e, - P.clt2mcode ";" pv))] ) -# 7955 "parser_cocci_menhir.ml" +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 9006 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -7963,83 +9014,85 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.semv = ty200; + MenhirLib.EngineTypes.startp = _startpos_ty200_; + MenhirLib.EngineTypes.endp = _endpos_ty200_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = q; - MenhirLib.EngineTypes.startp = _startpos_q_; - MenhirLib.EngineTypes.endp = _endpos_q_; + MenhirLib.EngineTypes.semv = ty100; + MenhirLib.EngineTypes.startp = _startpos_ty100_; + MenhirLib.EngineTypes.endp = _endpos_ty100_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = x1; - MenhirLib.EngineTypes.startp = _startpos_x1_; - MenhirLib.EngineTypes.endp = _endpos_x1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; }; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 8006 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 8012 "parser_cocci_menhir.ml" - ) = Obj.magic q in - let d : 'tv_d_ident = Obj.magic d in - let i : 'tv_pure_ident = Obj.magic i in - let x1 : 'tv_const_vol = Obj.magic x1 in - let x0 : 'tv_storage = Obj.magic x0 in + let m : 'tv_list_TMul_ = Obj.magic m in + let ty200 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 9048 "parser_cocci_menhir.ml" + ) = Obj.magic ty200 in + let ty100 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 9053 "parser_cocci_menhir.ml" + ) = Obj.magic ty100 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 9058 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_decl_var = let cv = - let x = x1 in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let ty20 = ty200 in + let ty10 = ty100 in + let r = r0 in + let ty = + let ty2 = ty20 in + let ty1 = ty10 in + +# 487 "parser_cocci_menhir.mly" + ( Ast0.wrap + (Ast0.BaseType + (Ast.LongLongType, + [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) +# 9076 "parser_cocci_menhir.ml" + + in -# 41 "standard.mly" - ( Some x ) -# 8025 "parser_cocci_menhir.ml" +# 523 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) +# 9082 "parser_cocci_menhir.ml" in - let s = + let cv = let x = x0 in # 41 "standard.mly" ( Some x ) -# 8033 "parser_cocci_menhir.ml" +# 9090 "parser_cocci_menhir.ml" in -# 974 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - !Data.add_type_name (P.id2name i); - let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in - [Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e, - P.clt2mcode ";" pv))] ) -# 8043 "parser_cocci_menhir.ml" +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 9096 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8051,104 +9104,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = rp2; - MenhirLib.EngineTypes.startp = _startpos_rp2_; - MenhirLib.EngineTypes.endp = _endpos_rp2_; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = p; - MenhirLib.EngineTypes.startp = _startpos_p_; - MenhirLib.EngineTypes.endp = _endpos_p_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lp2; - MenhirLib.EngineTypes.startp = _startpos_lp2_; - MenhirLib.EngineTypes.endp = _endpos_lp2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = rp1; - MenhirLib.EngineTypes.startp = _startpos_rp1_; - MenhirLib.EngineTypes.endp = _endpos_rp1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = st; - MenhirLib.EngineTypes.startp = _startpos_st_; - MenhirLib.EngineTypes.endp = _endpos_st_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lp1; - MenhirLib.EngineTypes.startp = _startpos_lp1_; - MenhirLib.EngineTypes.endp = _endpos_lp1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 8104 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let rp2 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 8109 "parser_cocci_menhir.ml" - ) = Obj.magic rp2 in - let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in - let lp2 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 8115 "parser_cocci_menhir.ml" - ) = Obj.magic lp2 in - let rp1 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 8120 "parser_cocci_menhir.ml" - ) = Obj.magic rp1 in - let d : 'tv_d_ident = Obj.magic d in - let st : ( -# 99 "parser_cocci_menhir.mly" - (Data.clt) -# 8126 "parser_cocci_menhir.ml" - ) = Obj.magic st in - let lp1 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 8131 "parser_cocci_menhir.ml" - ) = Obj.magic lp1 in - let t : 'tv_fn_ctype = Obj.magic t in - let _startpos = _startpos_t_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_decl_var = let s = + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 9128 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let ty0 = ty00 in + let ty = + let ty = ty0 in + +# 469 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) +# 9140 "parser_cocci_menhir.ml" + + in -# 39 "standard.mly" - ( None ) -# 8140 "parser_cocci_menhir.ml" +# 524 "parser_cocci_menhir.mly" + ( ty ) +# 9146 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 9154 "parser_cocci_menhir.ml" in -# 984 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - let t = - Ast0.wrap - (Ast0.FunctionPointer - (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1, - P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in - [Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv))] ) -# 8152 "parser_cocci_menhir.ml" +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 9160 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8160,111 +9168,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = rp2; - MenhirLib.EngineTypes.startp = _startpos_rp2_; - MenhirLib.EngineTypes.endp = _endpos_rp2_; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = p; - MenhirLib.EngineTypes.startp = _startpos_p_; - MenhirLib.EngineTypes.endp = _endpos_p_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lp2; - MenhirLib.EngineTypes.startp = _startpos_lp2_; - MenhirLib.EngineTypes.endp = _endpos_lp2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = rp1; - MenhirLib.EngineTypes.startp = _startpos_rp1_; - MenhirLib.EngineTypes.endp = _endpos_rp1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = st; - MenhirLib.EngineTypes.startp = _startpos_st_; - MenhirLib.EngineTypes.endp = _endpos_st_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lp1; - MenhirLib.EngineTypes.startp = _startpos_lp1_; - MenhirLib.EngineTypes.endp = _endpos_lp1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 8218 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let rp2 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 8223 "parser_cocci_menhir.ml" - ) = Obj.magic rp2 in - let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in - let lp2 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 8229 "parser_cocci_menhir.ml" - ) = Obj.magic lp2 in - let rp1 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 8234 "parser_cocci_menhir.ml" - ) = Obj.magic rp1 in - let d : 'tv_d_ident = Obj.magic d in - let st : ( -# 99 "parser_cocci_menhir.mly" - (Data.clt) -# 8240 "parser_cocci_menhir.ml" - ) = Obj.magic st in - let lp1 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 8245 "parser_cocci_menhir.ml" - ) = Obj.magic lp1 in - let t : 'tv_fn_ctype = Obj.magic t in - let x0 : 'tv_storage = Obj.magic x0 in + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 9192 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_decl_var = let s = + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let ty0 = ty00 in + let ty = + let ty = ty0 in + +# 471 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) +# 9204 "parser_cocci_menhir.ml" + + in + +# 524 "parser_cocci_menhir.mly" + ( ty ) +# 9210 "parser_cocci_menhir.ml" + + in + let cv = let x = x0 in # 41 "standard.mly" ( Some x ) -# 8256 "parser_cocci_menhir.ml" +# 9218 "parser_cocci_menhir.ml" in -# 984 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - let t = - Ast0.wrap - (Ast0.FunctionPointer - (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1, - P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in - [Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv))] ) -# 8268 "parser_cocci_menhir.ml" +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 9224 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8276,56 +9232,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _5 : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 8309 "parser_cocci_menhir.ml" - ) = Obj.magic _5 in - let _4 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 8314 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr_list_option = Obj.magic _3 in - let _2 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 8320 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_decl_ident = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : 'tv_decl_var = -# 992 "parser_cocci_menhir.mly" - ( [Ast0.wrap(Ast0.MacroDecl(_1,P.clt2mcode "(" _2,_3, - P.clt2mcode ")" _4,P.clt2mcode ";" _5))] ) -# 8329 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 9256 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let ty0 = ty00 in + let ty = + let ty = ty0 in + +# 473 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) +# 9268 "parser_cocci_menhir.ml" + + in + +# 524 "parser_cocci_menhir.mly" + ( ty ) +# 9274 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 9282 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 9288 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8337,120 +9296,60 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.semv = p00; + MenhirLib.EngineTypes.startp = _startpos_p00_; + MenhirLib.EngineTypes.endp = _endpos_p00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = q; - MenhirLib.EngineTypes.startp = _startpos_q_; - MenhirLib.EngineTypes.endp = _endpos_q_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = rp2; - MenhirLib.EngineTypes.startp = _startpos_rp2_; - MenhirLib.EngineTypes.endp = _endpos_rp2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = p; - MenhirLib.EngineTypes.startp = _startpos_p_; - MenhirLib.EngineTypes.endp = _endpos_p_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lp2; - MenhirLib.EngineTypes.startp = _startpos_lp2_; - MenhirLib.EngineTypes.endp = _endpos_lp2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = rp1; - MenhirLib.EngineTypes.startp = _startpos_rp1_; - MenhirLib.EngineTypes.endp = _endpos_rp1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = st; - MenhirLib.EngineTypes.startp = _startpos_st_; - MenhirLib.EngineTypes.endp = _endpos_st_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lp1; - MenhirLib.EngineTypes.startp = _startpos_lp1_; - MenhirLib.EngineTypes.endp = _endpos_lp1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 8400 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 8406 "parser_cocci_menhir.ml" - ) = Obj.magic q in - let rp2 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 8411 "parser_cocci_menhir.ml" - ) = Obj.magic rp2 in - let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in - let lp2 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 8417 "parser_cocci_menhir.ml" - ) = Obj.magic lp2 in - let rp1 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 8422 "parser_cocci_menhir.ml" - ) = Obj.magic rp1 in - let d : 'tv_d_ident = Obj.magic d in - let st : ( -# 99 "parser_cocci_menhir.mly" - (Data.clt) -# 8428 "parser_cocci_menhir.ml" - ) = Obj.magic st in - let lp1 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 8433 "parser_cocci_menhir.ml" - ) = Obj.magic lp1 in - let t : 'tv_fn_ctype = Obj.magic t in - let _startpos = _startpos_t_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_decl_var = let s = + let m : 'tv_list_TMul_ = Obj.magic m in + let p00 : ( +# 64 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 9320 "parser_cocci_menhir.ml" + ) = Obj.magic p00 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let p0 = p00 in + let ty = + let p = p0 in + +# 475 "parser_cocci_menhir.mly" + ( let (nm,pure,clt) = p in + Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) +# 9333 "parser_cocci_menhir.ml" + + in -# 39 "standard.mly" - ( None ) -# 8442 "parser_cocci_menhir.ml" +# 524 "parser_cocci_menhir.mly" + ( ty ) +# 9339 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 9347 "parser_cocci_menhir.ml" in -# 998 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - let t = - Ast0.wrap - (Ast0.FunctionPointer - (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1, - P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in - [Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))]) -# 8454 "parser_cocci_menhir.ml" +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 9353 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8462,127 +9361,80 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.semv = p00; + MenhirLib.EngineTypes.startp = _startpos_p00_; + MenhirLib.EngineTypes.endp = _endpos_p00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = q; - MenhirLib.EngineTypes.startp = _startpos_q_; - MenhirLib.EngineTypes.endp = _endpos_q_; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = rp2; - MenhirLib.EngineTypes.startp = _startpos_rp2_; - MenhirLib.EngineTypes.endp = _endpos_rp2_; + MenhirLib.EngineTypes.semv = r00; + MenhirLib.EngineTypes.startp = _startpos_r00_; + MenhirLib.EngineTypes.endp = _endpos_r00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = p; - MenhirLib.EngineTypes.startp = _startpos_p_; - MenhirLib.EngineTypes.endp = _endpos_p_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lp2; - MenhirLib.EngineTypes.startp = _startpos_lp2_; - MenhirLib.EngineTypes.endp = _endpos_lp2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = rp1; - MenhirLib.EngineTypes.startp = _startpos_rp1_; - MenhirLib.EngineTypes.endp = _endpos_rp1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = st; - MenhirLib.EngineTypes.startp = _startpos_st_; - MenhirLib.EngineTypes.endp = _endpos_st_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lp1; - MenhirLib.EngineTypes.startp = _startpos_lp1_; - MenhirLib.EngineTypes.endp = _endpos_lp1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; }; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 8530 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 8536 "parser_cocci_menhir.ml" - ) = Obj.magic q in - let rp2 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 8541 "parser_cocci_menhir.ml" - ) = Obj.magic rp2 in - let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in - let lp2 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 8547 "parser_cocci_menhir.ml" - ) = Obj.magic lp2 in - let rp1 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 8552 "parser_cocci_menhir.ml" - ) = Obj.magic rp1 in - let d : 'tv_d_ident = Obj.magic d in - let st : ( -# 99 "parser_cocci_menhir.mly" - (Data.clt) -# 8558 "parser_cocci_menhir.ml" - ) = Obj.magic st in - let lp1 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 8563 "parser_cocci_menhir.ml" - ) = Obj.magic lp1 in - let t : 'tv_fn_ctype = Obj.magic t in - let x0 : 'tv_storage = Obj.magic x0 in + let m : 'tv_list_TMul_ = Obj.magic m in + let p00 : ( +# 59 "parser_cocci_menhir.mly" + (string * Data.clt) +# 9394 "parser_cocci_menhir.ml" + ) = Obj.magic p00 in + let r00 : ( +# 47 "parser_cocci_menhir.mly" + (string) +# 9399 "parser_cocci_menhir.ml" + ) = Obj.magic r00 in + let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_decl_var = let s = + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let p0 = p00 in + let r0 = r00 in + let ty = + let p = p0 in + let r = r0 in + +# 478 "parser_cocci_menhir.mly" + ( let nm = (r,P.id2name p) in + (* this is only possible when we are in a metavar decl. Otherwise, + it will be represented already as a MetaType *) + let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in + Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p), + Ast0.Impure (*will be ignored*))) ) +# 9418 "parser_cocci_menhir.ml" + + in + +# 524 "parser_cocci_menhir.mly" + ( ty ) +# 9424 "parser_cocci_menhir.ml" + + in + let cv = let x = x0 in # 41 "standard.mly" ( Some x ) -# 8574 "parser_cocci_menhir.ml" +# 9432 "parser_cocci_menhir.ml" in -# 998 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - let t = - Ast0.wrap - (Ast0.FunctionPointer - (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1, - P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in - [Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))]) -# 8586 "parser_cocci_menhir.ml" +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 9438 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8594,46 +9446,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = id; - MenhirLib.EngineTypes.startp = _startpos_id_; - MenhirLib.EngineTypes.endp = _endpos_id_; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = s; - MenhirLib.EngineTypes.startp = _startpos_s_; - MenhirLib.EngineTypes.endp = _endpos_s_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 8622 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let id : 'tv_typedef_ident = Obj.magic id in - let t : 'tv_ctype_full = Obj.magic t in - let s : ( -# 53 "parser_cocci_menhir.mly" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" (Data.clt) -# 8629 "parser_cocci_menhir.ml" - ) = Obj.magic s in - let _startpos = _startpos_s_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_decl_var = -# 1006 "parser_cocci_menhir.mly" - ( let s = P.clt2mcode "typedef" s in - [Ast0.wrap(Ast0.Typedef(s,t,id,P.clt2mcode ";" pv))] ) -# 8637 "parser_cocci_menhir.ml" +# 9470 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let ty0 = ty00 in + let ty = + let ty = ty0 in + +# 485 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) ) +# 9482 "parser_cocci_menhir.ml" + + in + +# 524 "parser_cocci_menhir.mly" + ( ty ) +# 9488 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 9496 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 9502 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8645,64 +9510,74 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ty200; + MenhirLib.EngineTypes.startp = _startpos_ty200_; + MenhirLib.EngineTypes.endp = _endpos_ty200_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ty100; + MenhirLib.EngineTypes.startp = _startpos_ty100_; + MenhirLib.EngineTypes.endp = _endpos_ty100_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; } = _menhir_stack in - let _1 : 'tv_define_param_list_start = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_define_param_list = -# 714 "parser_cocci_menhir.mly" - (let circle x = - match Ast0.unwrap x with Ast0.DPcircles(_) -> true | _ -> false in - if List.exists circle _1 - then Ast0.wrap(Ast0.CIRCLES(_1)) - else Ast0.wrap(Ast0.DOTS(_1)) ) -# 8665 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let _1 : 'tv_define_param_list = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_define_param_list_option = -# 738 "parser_cocci_menhir.mly" - ( _1 ) -# 8689 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_define_param_list_option = -# 739 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.DOTS([])) ) -# 8706 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty200 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 9539 "parser_cocci_menhir.ml" + ) = Obj.magic ty200 in + let ty100 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 9544 "parser_cocci_menhir.ml" + ) = Obj.magic ty100 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let ty20 = ty200 in + let ty10 = ty100 in + let ty = + let ty2 = ty20 in + let ty1 = ty10 in + +# 487 "parser_cocci_menhir.mly" + ( Ast0.wrap + (Ast0.BaseType + (Ast.LongLongType, + [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) +# 9561 "parser_cocci_menhir.ml" + + in + +# 524 "parser_cocci_menhir.mly" + ( ty ) +# 9567 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 9575 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 9581 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8714,19 +9589,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let _1 : 'tv_ident = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_define_param_list_start = -# 721 "parser_cocci_menhir.mly" - ( [Ast0.wrap(Ast0.DParam _1)] ) -# 8730 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 50 "parser_cocci_menhir.mly" + (Data.clt) +# 9613 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let ty0 = ty00 in + let ty = + let ty = ty0 in + +# 495 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" ty])) ) +# 9625 "parser_cocci_menhir.ml" + + in + +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 9631 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 9639 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 9645 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8738,36 +9653,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _3 : 'tv_define_param_list_start = Obj.magic _3 in - let _2 : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 8762 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_ident = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_define_param_list_start = -# 723 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.DParam _1):: - Ast0.wrap(Ast0.DPComma(P.clt2mcode "," _2))::_3 ) -# 8771 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 9677 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let ty0 = ty00 in + let ty = + let ty = ty0 in + +# 497 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.DoubleType,[P.clt2mcode "double" ty])) ) +# 9689 "parser_cocci_menhir.ml" + + in + +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 9695 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 9703 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 9709 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8779,30 +9717,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = r; - MenhirLib.EngineTypes.startp = _startpos_r_; - MenhirLib.EngineTypes.endp = _endpos_r_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let r : 'tv_list_dp_comma_args_TEllipsis__ = Obj.magic r in - let d : ( -# 73 "parser_cocci_menhir.mly" - (Data.clt) -# 8798 "parser_cocci_menhir.ml" - ) = Obj.magic d in - let _startpos = _startpos_d_ in - let _endpos = _endpos_r_ in - let _v : 'tv_define_param_list_start = -# 726 "parser_cocci_menhir.mly" - ( (P.mkdpdots "..." d):: - (List.concat (List.map (function x -> x (P.mkdpdots "...")) r)) ) -# 8806 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 9741 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let ty0 = ty00 in + let ty = + let ty = ty0 in + +# 499 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.FloatType,[P.clt2mcode "float" ty])) ) +# 9753 "parser_cocci_menhir.ml" + + in + +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 9759 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 9767 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 9773 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8814,38 +9781,67 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = i00; + MenhirLib.EngineTypes.startp = _startpos_i00_; + MenhirLib.EngineTypes.endp = _endpos_i00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = s00; + MenhirLib.EngineTypes.startp = _startpos_s00_; + MenhirLib.EngineTypes.endp = _endpos_s00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; } = _menhir_stack in - let _1 : ( -# 81 "parser_cocci_menhir.mly" - (Data.clt * token) -# 8827 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_defineop = -# 673 "parser_cocci_menhir.mly" - ( let (clt,ident) = _1 in - function body -> - Ast0.wrap - (Ast0.Define - (P.clt2mcode "#define" clt, - (match ident with - TMetaId((nm,constraints,pure,clt)) -> - Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,pure)) - | TIdent(nm_pure) -> - Ast0.wrap(Ast0.Id(P.id2mcode nm_pure)) - | _ -> - raise - (Semantic_cocci.Semantic - "unexpected name for a #define")), - Ast0.wrap Ast0.NoParams, - body)) ) -# 8849 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let i00 : 'tv_ident = Obj.magic i00 in + let s00 : ( +# 50 "parser_cocci_menhir.mly" + (Data.clt) +# 9811 "parser_cocci_menhir.ml" + ) = Obj.magic s00 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let i0 = i00 in + let s0 = s00 in + let ty = + let i = i0 in + let s = s0 in + +# 501 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)) ) +# 9825 "parser_cocci_menhir.ml" + + in + +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 9831 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 9839 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 9845 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8857,58 +9853,63 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = i00; + MenhirLib.EngineTypes.startp = _startpos_i00_; + MenhirLib.EngineTypes.endp = _endpos_i00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = s00; + MenhirLib.EngineTypes.startp = _startpos_s00_; + MenhirLib.EngineTypes.endp = _endpos_s00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in - let _3 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 8880 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_define_param_list_option = Obj.magic _2 in - let _1 : ( -# 82 "parser_cocci_menhir.mly" - (Data.clt * token * int * int) -# 8886 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_defineop = -# 690 "parser_cocci_menhir.mly" - ( let (clt,ident,parenoff,parencol) = _1 in - (* clt is the start of the #define itself *) - let (arity,line,lline,offset,col,strbef,straft,pos) = clt in - let lp = - P.clt2mcode "(" - (arity,line,lline,parenoff,parencol,[],[],Ast0.NoMetaPos) in - function body -> - Ast0.wrap - (Ast0.Define - (P.clt2mcode "#define" clt, - (match ident with - TMetaId((nm,constraints,pure,clt)) -> - Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,pure)) - | TIdent(nm_pure) -> - Ast0.wrap(Ast0.Id(P.id2mcode nm_pure)) - | _ -> - raise - (Semantic_cocci.Semantic - "unexpected name for a #define")), - Ast0.wrap (Ast0.DParams (lp,_2,P.clt2mcode ")" _3)),body)) ) -# 8912 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let i00 : 'tv_ident = Obj.magic i00 in + let s00 : 'tv_struct_or_union = Obj.magic s00 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let i0 = i00 in + let s0 = s00 in + let ty = + let i = i0 in + let s = s0 in + +# 503 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.StructUnionName(s, Some i)) ) +# 9893 "parser_cocci_menhir.ml" + + in + +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 9899 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 9907 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 9913 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8920,19 +9921,98 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = r00; + MenhirLib.EngineTypes.startp = _startpos_r00_; + MenhirLib.EngineTypes.endp = _endpos_r00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = d00; + MenhirLib.EngineTypes.startp = _startpos_d00_; + MenhirLib.EngineTypes.endp = _endpos_d00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = l00; + MenhirLib.EngineTypes.startp = _startpos_l00_; + MenhirLib.EngineTypes.endp = _endpos_l00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = s00; + MenhirLib.EngineTypes.startp = _startpos_s00_; + MenhirLib.EngineTypes.endp = _endpos_s00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; } = _menhir_stack in - let _1 : 'tv_pnrule = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_dep = -# 225 "parser_cocci_menhir.mly" - ( _1 ) -# 8936 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let r00 : ( +# 101 "parser_cocci_menhir.mly" + (Data.clt) +# 9960 "parser_cocci_menhir.ml" + ) = Obj.magic r00 in + let d00 : 'tv_struct_decl_list = Obj.magic d00 in + let l00 : ( +# 101 "parser_cocci_menhir.mly" + (Data.clt) +# 9966 "parser_cocci_menhir.ml" + ) = Obj.magic l00 in + let s00 : 'tv_struct_or_union = Obj.magic s00 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let r0 = r00 in + let d0 = d00 in + let l0 = l00 in + let s0 = s00 in + let ty = + let r = r0 in + let d = d0 in + let l = l0 in + let s = s0 in + let i = + +# 39 "standard.mly" + ( None ) +# 9986 "parser_cocci_menhir.ml" + + in + +# 506 "parser_cocci_menhir.mly" + ( (if i = None && !Data.in_iso + then failwith "structures must be named in the iso file"); + Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)), + P.clt2mcode "{" l, + d, P.clt2mcode "}" r)) ) +# 9996 "parser_cocci_menhir.ml" + + in + +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 10002 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 10010 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 10016 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8944,29 +10024,107 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = r00; + MenhirLib.EngineTypes.startp = _startpos_r00_; + MenhirLib.EngineTypes.endp = _endpos_r00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = d00; + MenhirLib.EngineTypes.startp = _startpos_d00_; + MenhirLib.EngineTypes.endp = _endpos_d00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = l00; + MenhirLib.EngineTypes.startp = _startpos_l00_; + MenhirLib.EngineTypes.endp = _endpos_l00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = x000; + MenhirLib.EngineTypes.startp = _startpos_x000_; + MenhirLib.EngineTypes.endp = _endpos_x000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = s00; + MenhirLib.EngineTypes.startp = _startpos_s00_; + MenhirLib.EngineTypes.endp = _endpos_s00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; }; }; } = _menhir_stack in - let _3 : 'tv_dep = Obj.magic _3 in - let _1 : 'tv_dep = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_dep = -# 226 "parser_cocci_menhir.mly" - ( Ast.AndDep(_1, _3) ) -# 8970 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let r00 : ( +# 101 "parser_cocci_menhir.mly" + (Data.clt) +# 10068 "parser_cocci_menhir.ml" + ) = Obj.magic r00 in + let d00 : 'tv_struct_decl_list = Obj.magic d00 in + let l00 : ( +# 101 "parser_cocci_menhir.mly" + (Data.clt) +# 10074 "parser_cocci_menhir.ml" + ) = Obj.magic l00 in + let x000 : 'tv_ident = Obj.magic x000 in + let s00 : 'tv_struct_or_union = Obj.magic s00 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let r0 = r00 in + let d0 = d00 in + let l0 = l00 in + let x00 = x000 in + let s0 = s00 in + let ty = + let r = r0 in + let d = d0 in + let l = l0 in + let x0 = x00 in + let s = s0 in + let i = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 10098 "parser_cocci_menhir.ml" + + in + +# 506 "parser_cocci_menhir.mly" + ( (if i = None && !Data.in_iso + then failwith "structures must be named in the iso file"); + Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)), + P.clt2mcode "{" l, + d, P.clt2mcode "}" r)) ) +# 10108 "parser_cocci_menhir.ml" + + in + +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 10114 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 10122 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 10128 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -8978,46 +10136,93 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = r00; + MenhirLib.EngineTypes.startp = _startpos_r00_; + MenhirLib.EngineTypes.endp = _endpos_r00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = d00; + MenhirLib.EngineTypes.startp = _startpos_d00_; + MenhirLib.EngineTypes.endp = _endpos_d00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = l00; + MenhirLib.EngineTypes.startp = _startpos_l00_; + MenhirLib.EngineTypes.endp = _endpos_l00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = s00; + MenhirLib.EngineTypes.startp = _startpos_s00_; + MenhirLib.EngineTypes.endp = _endpos_s00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; }; } = _menhir_stack in - let _3 : 'tv_dep = Obj.magic _3 in - let _1 : 'tv_dep = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_dep = -# 227 "parser_cocci_menhir.mly" - ( Ast.OrDep (_1, _3) ) -# 9004 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_depends = -# 221 "parser_cocci_menhir.mly" - ( Ast.NoDep ) -# 9021 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let r00 : ( +# 101 "parser_cocci_menhir.mly" + (Data.clt) +# 10175 "parser_cocci_menhir.ml" + ) = Obj.magic r00 in + let d00 : 'tv_struct_decl_list = Obj.magic d00 in + let l00 : ( +# 101 "parser_cocci_menhir.mly" + (Data.clt) +# 10181 "parser_cocci_menhir.ml" + ) = Obj.magic l00 in + let s00 : ( +# 64 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 10186 "parser_cocci_menhir.ml" + ) = Obj.magic s00 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let r0 = r00 in + let d0 = d00 in + let l0 = l00 in + let s0 = s00 in + let ty = + let r = r0 in + let d = d0 in + let l = l0 in + let s = s0 in + +# 512 "parser_cocci_menhir.mly" + ( let (nm,pure,clt) = s in + let ty = Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) in + Ast0.wrap(Ast0.StructUnionDef(ty,P.clt2mcode "{" l,d,P.clt2mcode "}" r)) ) +# 10206 "parser_cocci_menhir.ml" + + in + +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 10212 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 10220 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 10226 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9029,27 +10234,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = parents; - MenhirLib.EngineTypes.startp = _startpos_parents_; - MenhirLib.EngineTypes.endp = _endpos_parents_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = p00; + MenhirLib.EngineTypes.startp = _startpos_p00_; + MenhirLib.EngineTypes.endp = _endpos_p00_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let parents : 'tv_dep = Obj.magic parents in - let _startpos = _startpos__1_ in - let _endpos = _endpos_parents_ in - let _v : 'tv_depends = -# 222 "parser_cocci_menhir.mly" - ( parents ) -# 9053 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let p00 : ( +# 59 "parser_cocci_menhir.mly" + (string * Data.clt) +# 10258 "parser_cocci_menhir.ml" + ) = Obj.magic p00 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_ctype = let ty = + let p0 = p00 in + let ty = + let p = p0 in + +# 516 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.TypeName(P.id2mcode p)) ) +# 10270 "parser_cocci_menhir.ml" + + in + +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 10276 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 10284 "parser_cocci_menhir.ml" + + in + +# 529 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 10290 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9061,29 +10298,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = r; + MenhirLib.EngineTypes.startp = _startpos_r_; + MenhirLib.EngineTypes.endp = _endpos_r_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : 'tv_ident = Obj.magic _2 in - let _1 : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 9080 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_designator = -# 1104 "parser_cocci_menhir.mly" - ( Ast0.DesignatorField (P.clt2mcode "." _1,_2) ) -# 9087 "parser_cocci_menhir.ml" + let r : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 10311 "parser_cocci_menhir.ml" + ) = Obj.magic r in + let _startpos = _startpos_r_ in + let _endpos = _endpos_r_ in + let _v : 'tv_ctype = +# 531 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,None)) ) +# 10318 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9095,39 +10326,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = r; + MenhirLib.EngineTypes.startp = _startpos_r_; + MenhirLib.EngineTypes.endp = _endpos_r_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _3 : ( -# 102 "parser_cocci_menhir.mly" - (Data.clt) -# 9118 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_eexpr = Obj.magic _2 in - let _1 : ( -# 102 "parser_cocci_menhir.mly" - (Data.clt) -# 9124 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_designator = -# 1106 "parser_cocci_menhir.mly" - ( Ast0.DesignatorIndex (P.clt2mcode "[" _1,_2,P.clt2mcode "]" _3) ) -# 9131 "parser_cocci_menhir.ml" + let r : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 10339 "parser_cocci_menhir.ml" + ) = Obj.magic r in + let _startpos = _startpos_r_ in + let _endpos = _endpos_r_ in + let _v : 'tv_ctype = +# 533 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,None)) ) +# 10346 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9139,80 +10354,41 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = rp; + MenhirLib.EngineTypes.startp = _startpos_rp_; + MenhirLib.EngineTypes.endp = _endpos_rp_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = lp; + MenhirLib.EngineTypes.startp = _startpos_lp_; + MenhirLib.EngineTypes.endp = _endpos_lp_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _5 : ( -# 102 "parser_cocci_menhir.mly" - (Data.clt) -# 9172 "parser_cocci_menhir.ml" - ) = Obj.magic _5 in - let _4 : 'tv_eexpr = Obj.magic _4 in - let _3 : ( -# 73 "parser_cocci_menhir.mly" + let rp : ( +# 77 "parser_cocci_menhir.mly" (Data.clt) -# 9178 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_eexpr = Obj.magic _2 in - let _1 : ( -# 102 "parser_cocci_menhir.mly" +# 10377 "parser_cocci_menhir.ml" + ) = Obj.magic rp in + let t : 'tv_midzero_list_ctype_ctype_ = Obj.magic t in + let lp : ( +# 76 "parser_cocci_menhir.mly" (Data.clt) -# 9184 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : 'tv_designator = -# 1108 "parser_cocci_menhir.mly" - ( Ast0.DesignatorRange (P.clt2mcode "[" _1,_2,P.clt2mcode "..." _3, - _4,P.clt2mcode "]" _5) ) -# 9192 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let _1 : 'tv_basic_expr_eexpr_nest_expressions_ = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_dexpr = -# 1207 "parser_cocci_menhir.mly" - ( _1 ) -# 9216 "parser_cocci_menhir.ml" +# 10383 "parser_cocci_menhir.ml" + ) = Obj.magic lp in + let _startpos = _startpos_lp_ in + let _endpos = _endpos_rp_ in + let _v : 'tv_ctype = +# 535 "parser_cocci_menhir.mly" + ( let (mids,code) = t in + Ast0.wrap + (Ast0.DisjType(P.clt2mcode "(" lp,code,mids, P.clt2mcode ")" rp)) ) +# 10392 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9229,18 +10405,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : 'tv_separated_nonempty_list_TComma_pure_ident_ = Obj.magic _2 in + let _2 : 'tv_list_array_dec_ = Obj.magic _2 in + let _1 : 'tv_ident = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : 'tv_disable = -# 240 "parser_cocci_menhir.mly" - ( List.map P.id2name _2 ) -# 9244 "parser_cocci_menhir.ml" + let _v : 'tv_d_ident = +# 1039 "parser_cocci_menhir.mly" + ( (_1, + function t -> + List.fold_right + (function (l,i,r) -> + function rest -> + Ast0.wrap + (Ast0.Array(rest,P.clt2mcode "[" l,i,P.clt2mcode "]" r))) + _2 t) ) +# 10429 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9252,23 +10437,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : ( -# 73 "parser_cocci_menhir.mly" - (Data.clt) -# 9265 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_dot_expressions = -# 1216 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Edots(P.clt2mcode "..." _1,None)) ) -# 9272 "parser_cocci_menhir.ml" + let i : 'tv_ident = Obj.magic i in + let t : 'tv_ctype = Obj.magic t in + let _startpos = _startpos_t_ in + let _endpos = _endpos_i_ in + let _v : 'tv_decl = +# 803 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Param(t, Some i)) ) +# 10459 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9281,18 +10468,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_nest_expressions = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_dot_expressions = -# 1217 "parser_cocci_menhir.mly" - ( _1 ) -# 9296 "parser_cocci_menhir.ml" + let t : 'tv_ctype = Obj.magic t in + let _startpos = _startpos_t_ in + let _endpos = _endpos_t_ in + let _v : 'tv_decl = +# 804 "parser_cocci_menhir.mly" + ( (*verify in FunDecl*) Ast0.wrap(Ast0.Param(t, None)) ) +# 10483 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9304,34 +10491,86 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.semv = rp1; + MenhirLib.EngineTypes.startp = _startpos_rp1_; + MenhirLib.EngineTypes.endp = _endpos_rp1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = c; - MenhirLib.EngineTypes.startp = _startpos_c_; - MenhirLib.EngineTypes.endp = _endpos_c_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = lp1; + MenhirLib.EngineTypes.startp = _startpos_lp1_; + MenhirLib.EngineTypes.endp = _endpos_lp1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = rp; + MenhirLib.EngineTypes.startp = _startpos_rp_; + MenhirLib.EngineTypes.endp = _endpos_rp_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = s; + MenhirLib.EngineTypes.startp = _startpos_s_; + MenhirLib.EngineTypes.endp = _endpos_s_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = lp; + MenhirLib.EngineTypes.startp = _startpos_lp_; + MenhirLib.EngineTypes.endp = _endpos_lp_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; }; } = _menhir_stack in - let d : ( -# 73 "parser_cocci_menhir.mly" + let rp1 : ( +# 77 "parser_cocci_menhir.mly" (Data.clt) -# 9322 "parser_cocci_menhir.ml" - ) = Obj.magic d in - let c : ( -# 107 "parser_cocci_menhir.mly" +# 10539 "parser_cocci_menhir.ml" + ) = Obj.magic rp1 in + let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in + let lp1 : ( +# 76 "parser_cocci_menhir.mly" (Data.clt) -# 9327 "parser_cocci_menhir.ml" - ) = Obj.magic c in - let _startpos = _startpos_c_ in - let _endpos = _endpos_d_ in - let _v : 'tv_dp_comma_args_TEllipsis_ = -# 731 "parser_cocci_menhir.mly" - ( function dot_builder -> - [Ast0.wrap(Ast0.DPComma(P.clt2mcode "," c)); dot_builder d] ) -# 9335 "parser_cocci_menhir.ml" +# 10545 "parser_cocci_menhir.ml" + ) = Obj.magic lp1 in + let rp : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 10550 "parser_cocci_menhir.ml" + ) = Obj.magic rp in + let i : 'tv_ident = Obj.magic i in + let s : ( +# 99 "parser_cocci_menhir.mly" + (Data.clt) +# 10556 "parser_cocci_menhir.ml" + ) = Obj.magic s in + let lp : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 10561 "parser_cocci_menhir.ml" + ) = Obj.magic lp in + let t : 'tv_ctype = Obj.magic t in + let _startpos = _startpos_t_ in + let _endpos = _endpos_rp1_ in + let _v : 'tv_decl = +# 807 "parser_cocci_menhir.mly" + ( let fnptr = + Ast0.wrap + (Ast0.FunctionPointer + (t,P.clt2mcode "(" lp,P.clt2mcode "*" s,P.clt2mcode ")" rp, + P.clt2mcode "(" lp1,d,P.clt2mcode ")" rp1)) in + Ast0.wrap(Ast0.Param(fnptr, Some i)) ) +# 10574 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9343,31 +10582,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : 'tv_ident = Obj.magic _2 in let _1 : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 9362 "parser_cocci_menhir.ml" +# 64 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 10595 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_dp_comma_args_TEllipsis_ = -# 734 "parser_cocci_menhir.mly" - ( function dot_builder -> - [Ast0.wrap(Ast0.DPComma(P.clt2mcode "," _1)); - Ast0.wrap(Ast0.DParam _2)] ) -# 9371 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_decl = +# 814 "parser_cocci_menhir.mly" + ( let (nm,pure,clt) = _1 in + Ast0.wrap(Ast0.MetaParam(P.clt2mcode nm clt,pure)) ) +# 10603 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9380,22 +10612,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let d : ( -# 73 "parser_cocci_menhir.mly" - (Data.clt) -# 9392 "parser_cocci_menhir.ml" - ) = Obj.magic d in - let _startpos = _startpos_d_ in - let _endpos = _endpos_d_ in - let _v : 'tv_edots_when_TEllipsis_eexpr_ = -# 1809 "parser_cocci_menhir.mly" - ( (d,None) ) -# 9399 "parser_cocci_menhir.ml" + let _1 : ( +# 59 "parser_cocci_menhir.mly" + (string * Data.clt) +# 10624 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_decl_ident = +# 1524 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) ) +# 10631 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9407,41 +10639,41 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = w; - MenhirLib.EngineTypes.startp = _startpos_w_; - MenhirLib.EngineTypes.endp = _endpos_w_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let w : 'tv_eexpr = Obj.magic w in - let d : ( -# 73 "parser_cocci_menhir.mly" - (Data.clt) -# 9438 "parser_cocci_menhir.ml" - ) = Obj.magic d in - let _startpos = _startpos_d_ in - let _endpos = _endpos__5_ in - let _v : 'tv_edots_when_TEllipsis_eexpr_ = -# 1810 "parser_cocci_menhir.mly" - ( (d,Some w) ) -# 9445 "parser_cocci_menhir.ml" + let _1 : ( +# 62 "parser_cocci_menhir.mly" + (Parse_aux.idinfo) +# 10652 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_decl_ident = +# 1526 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,clt) = _1 in + Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,pure)) ) +# 10660 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_decl_list_decl_ = +# 1546 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.DOTS([])) ) +# 10677 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9454,142 +10686,39 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let d : ( -# 73 "parser_cocci_menhir.mly" - (Data.clt) -# 9466 "parser_cocci_menhir.ml" - ) = Obj.magic d in - let _startpos = _startpos_d_ in - let _endpos = _endpos_d_ in - let _v : 'tv_edots_when_TEllipsis_initialize_ = -# 1809 "parser_cocci_menhir.mly" - ( (d,None) ) -# 9473 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = w; - MenhirLib.EngineTypes.startp = _startpos_w_; - MenhirLib.EngineTypes.endp = _endpos_w_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - } = _menhir_stack in - let w : 'tv_initialize = Obj.magic w in - let d : ( -# 73 "parser_cocci_menhir.mly" - (Data.clt) -# 9512 "parser_cocci_menhir.ml" - ) = Obj.magic d in - let _startpos = _startpos_d_ in - let _endpos = _endpos__5_ in - let _v : 'tv_edots_when_TEllipsis_initialize_ = -# 1810 "parser_cocci_menhir.mly" - ( (d,Some w) ) -# 9519 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let d : ( -# 73 "parser_cocci_menhir.mly" - (Data.clt) -# 9540 "parser_cocci_menhir.ml" - ) = Obj.magic d in - let _startpos = _startpos_d_ in - let _endpos = _endpos_d_ in - let _v : 'tv_edots_when_TEllipsis_struct_decl_ = -# 1809 "parser_cocci_menhir.mly" - ( (d,None) ) -# 9547 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = w; - MenhirLib.EngineTypes.startp = _startpos_w_; - MenhirLib.EngineTypes.endp = _endpos_w_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - } = _menhir_stack in - let w : 'tv_struct_decl = Obj.magic w in - let d : ( -# 73 "parser_cocci_menhir.mly" - (Data.clt) -# 9586 "parser_cocci_menhir.ml" - ) = Obj.magic d in - let _startpos = _startpos_d_ in - let _endpos = _endpos__5_ in - let _v : 'tv_edots_when_TEllipsis_struct_decl_ = -# 1810 "parser_cocci_menhir.mly" - ( (d,Some w) ) -# 9593 "parser_cocci_menhir.ml" + let _1 : 'tv_decl_list_start_decl_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_decl_list_decl_ = +# 1548 "parser_cocci_menhir.mly" + (let circle x = + match Ast0.unwrap x with Ast0.Pcircles(_) -> true | _ -> false in + if List.exists circle _1 + then Ast0.wrap(Ast0.CIRCLES(_1)) + else Ast0.wrap(Ast0.DOTS(_1)) ) +# 10705 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_decl_list_name_opt_decl_ = +# 1546 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.DOTS([])) ) +# 10722 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9607,13 +10736,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_basic_expr_eexpr_dot_expressions_ = Obj.magic _1 in + let _1 : 'tv_decl_list_start_name_opt_decl_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_eexpr = -# 1205 "parser_cocci_menhir.mly" - ( _1 ) -# 9617 "parser_cocci_menhir.ml" + let _v : 'tv_decl_list_name_opt_decl_ = +# 1548 "parser_cocci_menhir.mly" + (let circle x = + match Ast0.unwrap x with Ast0.Pcircles(_) -> true | _ -> false in + if List.exists circle _1 + then Ast0.wrap(Ast0.CIRCLES(_1)) + else Ast0.wrap(Ast0.DOTS(_1)) ) +# 10750 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9631,22 +10764,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_eexpr_list_start = Obj.magic _1 in + let _1 : 'tv_one_dec_decl_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_eexpr_list = -# 1753 "parser_cocci_menhir.mly" - (let circle x = - match Ast0.unwrap x with Ast0.Ecircles(_) -> true | _ -> false in - let star x = - match Ast0.unwrap x with Ast0.Estars(_) -> true | _ -> false in - if List.exists circle _1 - then Ast0.wrap(Ast0.CIRCLES(_1)) - else - if List.exists star _1 - then Ast0.wrap(Ast0.STARS(_1)) - else Ast0.wrap(Ast0.DOTS(_1)) ) -# 9650 "parser_cocci_menhir.ml" + let _v : 'tv_decl_list_start_decl_ = +# 1555 "parser_cocci_menhir.mly" + ( [_1] ) +# 10774 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9658,19 +10782,35 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let _1 : 'tv_eexpr_list = Obj.magic _1 in + let _3 : 'tv_decl_list_start_decl_ = Obj.magic _3 in + let _2 : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 10806 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_one_dec_decl_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_eexpr_list_option = -# 1792 "parser_cocci_menhir.mly" - ( _1 ) -# 9674 "parser_cocci_menhir.ml" + let _endpos = _endpos__3_ in + let _v : 'tv_decl_list_start_decl_ = +# 1557 "parser_cocci_menhir.mly" + ( _1::Ast0.wrap(Ast0.PComma(P.clt2mcode "," _2))::_3 ) +# 10814 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9681,13 +10821,31 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_eexpr_list_option = -# 1793 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.DOTS([])) ) -# 9691 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : 'tv_list_comma_decls_TEllipsis_decl__ = Obj.magic _2 in + let _1 : ( +# 73 "parser_cocci_menhir.mly" + (Data.clt) +# 10841 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_decl_list_start_decl_ = +# 1559 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Pdots(P.clt2mcode "..." _1)):: + (List.concat(List.map (function x -> x (P.mkpdots "...")) _2)) ) +# 10849 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9705,13 +10863,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_aexpr = Obj.magic _1 in + let _1 : 'tv_one_dec_name_opt_decl_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_eexpr_list_start = -# 1780 "parser_cocci_menhir.mly" - ( [_1] ) -# 9715 "parser_cocci_menhir.ml" + let _v : 'tv_decl_list_start_name_opt_decl_ = +# 1555 "parser_cocci_menhir.mly" + ( [_1] ) +# 10873 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9739,19 +10897,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let _3 : 'tv_eexpr_list_start = Obj.magic _3 in + let _3 : 'tv_decl_list_start_name_opt_decl_ = Obj.magic _3 in let _2 : ( # 107 "parser_cocci_menhir.mly" (Data.clt) -# 9747 "parser_cocci_menhir.ml" +# 10905 "parser_cocci_menhir.ml" ) = Obj.magic _2 in - let _1 : 'tv_aexpr = Obj.magic _1 in + let _1 : 'tv_one_dec_name_opt_decl_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in - let _v : 'tv_eexpr_list_start = -# 1782 "parser_cocci_menhir.mly" - ( _1::Ast0.wrap(Ast0.EComma(P.clt2mcode "," _2))::_3 ) -# 9755 "parser_cocci_menhir.ml" + let _v : 'tv_decl_list_start_name_opt_decl_ = +# 1557 "parser_cocci_menhir.mly" + ( _1::Ast0.wrap(Ast0.PComma(P.clt2mcode "," _2))::_3 ) +# 10913 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9763,39 +10921,30 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = cl; - MenhirLib.EngineTypes.startp = _startpos_cl_; - MenhirLib.EngineTypes.endp = _endpos_cl_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let cl : 'tv_comma_list_dexpr_ = Obj.magic cl in + let _2 : 'tv_list_comma_decls_TEllipsis_name_opt_decl__ = Obj.magic _2 in + let _1 : ( +# 73 "parser_cocci_menhir.mly" + (Data.clt) +# 10940 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__6_ in - let _v : 'tv_error_words = -# 1579 "parser_cocci_menhir.mly" - ( [Ast0.wrap(Ast0.ERRORWORDS(cl))] ) -# 9799 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_decl_list_start_name_opt_decl_ = +# 1559 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Pdots(P.clt2mcode "..." _1)):: + (List.concat(List.map (function x -> x (P.mkpdots "...")) _2)) ) +# 10948 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9808,16 +10957,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in + let _1 : ( +# 64 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 10969 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_exists = -# 243 "parser_cocci_menhir.mly" - ( Ast.Exists ) -# 9821 "parser_cocci_menhir.ml" + let _v : 'tv_decl_statement = +# 1117 "parser_cocci_menhir.mly" + ( let (nm,pure,clt) = _1 in + [Ast0.wrap(Ast0.MetaStmt(P.clt2mcode nm clt,pure))] ) +# 10977 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9830,16 +10986,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in + let _1 : 'tv_decl_var = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_exists = -# 244 "parser_cocci_menhir.mly" - ( Ast.Forall ) -# 9843 "parser_cocci_menhir.ml" + let _v : 'tv_decl_statement = +# 1120 "parser_cocci_menhir.mly" + ( List.map + (function x -> + Ast0.wrap + (Ast0.Decl((Ast0.default_info(),Ast0.context_befaft()),x))) + _1 ) +# 11005 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9851,21 +11013,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in + let _1 : 'tv_statement = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_exists = -# 245 "parser_cocci_menhir.mly" - ( Ast.ReverseForall ) -# 9869 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_decl_statement = +# 1125 "parser_cocci_menhir.mly" + ( [_1] ) +# 11029 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9876,13 +11036,48 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_exists = -# 246 "parser_cocci_menhir.mly" - ( Ast.Undetermined ) -# 9886 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _3 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 11060 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let t : 'tv_midzero_list_fun_start_fun_start_ = Obj.magic t in + let _1 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 11066 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_decl_statement = +# 1134 "parser_cocci_menhir.mly" + ( let (mids,code) = t in + if List.for_all + (function x -> + match Ast0.unwrap x with Ast0.DOTS([]) -> true | _ -> false) + code + then [] + else + [Ast0.wrap(Ast0.Disj(P.clt2mcode "(" _1, code, mids, + P.clt2mcode ")" _3))] ) +# 11081 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9900,13 +11095,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_basic_expr_expr_invalid_ = Obj.magic _1 in + let _1 : ( +# 64 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 11102 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_expr = -# 1203 "parser_cocci_menhir.mly" - ( _1 ) -# 9910 "parser_cocci_menhir.ml" + let _v : 'tv_decl_statement_expr = +# 1147 "parser_cocci_menhir.mly" + ( let (nm,pure,clt) = _1 in + [Ast0.wrap(Ast0.MetaStmt(P.clt2mcode nm clt,pure))] ) +# 11110 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9919,18 +11119,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = r; - MenhirLib.EngineTypes.startp = _startpos_r_; - MenhirLib.EngineTypes.endp = _endpos_r_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let r : 'tv_no_dot_start_end_dexpr_edots_when_TEllipsis_eexpr__ = Obj.magic r in - let _startpos = _startpos_r_ in - let _endpos = _endpos_r_ in - let _v : 'tv_expr_dots_TEllipsis_ = -# 1385 "parser_cocci_menhir.mly" - ( r ) -# 9934 "parser_cocci_menhir.ml" + let _1 : 'tv_decl_var = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_decl_statement_expr = +# 1150 "parser_cocci_menhir.mly" + ( List.map + (function x -> + Ast0.wrap + (Ast0.Decl((Ast0.default_info(),Ast0.context_befaft()),x))) + _1 ) +# 11138 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9941,13 +11145,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_extends = -# 216 "parser_cocci_menhir.mly" - ( () ) -# 9951 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_statement = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_decl_statement_expr = +# 1155 "parser_cocci_menhir.mly" + ( [_1] ) +# 11162 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9959,27 +11170,46 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = parent; - MenhirLib.EngineTypes.startp = _startpos_parent_; - MenhirLib.EngineTypes.endp = _endpos_parent_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let parent : ( -# 47 "parser_cocci_menhir.mly" - (string) -# 9976 "parser_cocci_menhir.ml" - ) = Obj.magic parent in + let _3 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 11193 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let t : 'tv_midzero_list_fun_after_stm_fun_after_dots_or_ = Obj.magic t in + let _1 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 11199 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos_parent_ in - let _v : 'tv_extends = -# 218 "parser_cocci_menhir.mly" - ( !Data.install_bindings (parent) ) -# 9983 "parser_cocci_menhir.ml" + let _endpos = _endpos__3_ in + let _v : 'tv_decl_statement_expr = +# 1164 "parser_cocci_menhir.mly" + ( let (mids,code) = t in + if List.for_all (function [] -> true | _ -> false) code + then [] + else + let dot_code = + List.map (function x -> Ast0.wrap(Ast0.DOTS x)) code in + [Ast0.wrap(Ast0.Disj(P.clt2mcode "(" _1, dot_code, mids, + P.clt2mcode ")" _3))] ) +# 11213 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -9991,35 +11221,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : ( -# 83 "parser_cocci_menhir.mly" - (string * Data.clt) -# 10009 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : ( -# 83 "parser_cocci_menhir.mly" - (string * Data.clt) -# 10014 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_filespec = -# 632 "parser_cocci_menhir.mly" - ( [Ast0.wrap - (Ast0.FILEINFO(P.id2mcode _1, - P.id2mcode _2))] ) -# 10023 "parser_cocci_menhir.ml" + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 11239 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let t : 'tv_ctype = Obj.magic t in + let _startpos = _startpos_t_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_decl_var = +# 930 "parser_cocci_menhir.mly" + ( [Ast0.wrap(Ast0.TyDecl(t,P.clt2mcode ";" pv))] ) +# 11247 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10031,25 +11255,45 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = m; - MenhirLib.EngineTypes.startp = _startpos_m_; - MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let m : 'tv_list_TMul_ = Obj.magic m in - let ty : 'tv_generic_ctype = Obj.magic ty in - let _startpos = _startpos_ty_ in - let _endpos = _endpos_m_ in - let _v : 'tv_fn_ctype = -# 581 "parser_cocci_menhir.mly" - ( P.pointerify ty m ) -# 10053 "parser_cocci_menhir.ml" + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 11278 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let d : 'tv_comma_list_d_ident_ = Obj.magic d in + let t : 'tv_ctype = Obj.magic t in + let _startpos = _startpos_t_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_decl_var = let s = + +# 39 "standard.mly" + ( None ) +# 11288 "parser_cocci_menhir.ml" + + in + +# 932 "parser_cocci_menhir.mly" + ( List.map + (function (id,fn) -> + Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv))) + d ) +# 11297 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10061,31 +11305,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = m; - MenhirLib.EngineTypes.startp = _startpos_m_; - MenhirLib.EngineTypes.endp = _endpos_m_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; } = _menhir_stack in - let m : 'tv_list_TMul_ = Obj.magic m in - let t : ( -# 50 "parser_cocci_menhir.mly" - (Data.clt) -# 10080 "parser_cocci_menhir.ml" - ) = Obj.magic t in - let _startpos = _startpos_t_ in - let _endpos = _endpos_m_ in - let _v : 'tv_fn_ctype = -# 583 "parser_cocci_menhir.mly" - ( P.pointerify - (Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" t]))) - m ) -# 10089 "parser_cocci_menhir.ml" + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 11333 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let d : 'tv_comma_list_d_ident_ = Obj.magic d in + let t : 'tv_ctype = Obj.magic t in + let x0 : 'tv_storage = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_decl_var = let s = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 11345 "parser_cocci_menhir.ml" + + in + +# 932 "parser_cocci_menhir.mly" + ( List.map + (function (id,fn) -> + Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv))) + d ) +# 11354 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10096,47 +11361,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_fninfo = -# 777 "parser_cocci_menhir.mly" - ( [] ) -# 10106 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { + let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.semv = f; + MenhirLib.EngineTypes.startp = _startpos_f_; + MenhirLib.EngineTypes.endp = _endpos_f_; MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; } = _menhir_stack in - let _2 : 'tv_fninfo = Obj.magic _2 in - let _1 : 'tv_storage = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_fninfo = -# 779 "parser_cocci_menhir.mly" - ( try - let _ = - List.find (function Ast0.FStorage(_) -> true | _ -> false) _2 in - raise (Semantic_cocci.Semantic "duplicate storage") - with Not_found -> (Ast0.FStorage(_1))::_2 ) -# 10140 "parser_cocci_menhir.ml" + let f : 'tv_funproto = Obj.magic f in + let _startpos = _startpos_f_ in + let _endpos = _endpos_f_ in + let _v : 'tv_decl_var = +# 936 "parser_cocci_menhir.mly" + ( [f] ) +# 11378 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10148,25 +11386,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = r; - MenhirLib.EngineTypes.startp = _startpos_r_; - MenhirLib.EngineTypes.endp = _endpos_r_; + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = q; + MenhirLib.EngineTypes.startp = _startpos_q_; + MenhirLib.EngineTypes.endp = _endpos_q_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; } = _menhir_stack in - let r : 'tv_fninfo_nt = Obj.magic r in - let t : 'tv_fn_ctype = Obj.magic t in + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 11419 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 11425 "parser_cocci_menhir.ml" + ) = Obj.magic q in + let d : 'tv_d_ident = Obj.magic d in + let t : 'tv_ctype = Obj.magic t in let _startpos = _startpos_t_ in - let _endpos = _endpos_r_ in - let _v : 'tv_fninfo = -# 784 "parser_cocci_menhir.mly" - ( (Ast0.FType(t))::r ) -# 10170 "parser_cocci_menhir.ml" + let _endpos = _endpos_pv_ in + let _v : 'tv_decl_var = let s = + +# 39 "standard.mly" + ( None ) +# 11435 "parser_cocci_menhir.ml" + + in + +# 938 "parser_cocci_menhir.mly" + (let (id,fn) = d in + [Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))]) +# 11442 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10178,32 +11450,66 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = q; + MenhirLib.EngineTypes.startp = _startpos_q_; + MenhirLib.EngineTypes.endp = _endpos_q_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; }; } = _menhir_stack in - let _2 : 'tv_fninfo = Obj.magic _2 in - let _1 : ( -# 53 "parser_cocci_menhir.mly" - (Data.clt) -# 10197 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_fninfo = -# 786 "parser_cocci_menhir.mly" - ( try - let _ = List.find (function Ast0.FInline(_) -> true | _ -> false) _2 in - raise (Semantic_cocci.Semantic "duplicate inline") - with Not_found -> (Ast0.FInline(P.clt2mcode "inline" _1))::_2 ) -# 10207 "parser_cocci_menhir.ml" + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 11488 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 11494 "parser_cocci_menhir.ml" + ) = Obj.magic q in + let d : 'tv_d_ident = Obj.magic d in + let t : 'tv_ctype = Obj.magic t in + let x0 : 'tv_storage = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_decl_var = let s = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 11506 "parser_cocci_menhir.ml" + + in + +# 938 "parser_cocci_menhir.mly" + (let (id,fn) = d in + [Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))]) +# 11513 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10215,49 +11521,54 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let _2 : 'tv_fninfo = Obj.magic _2 in - let _1 : ( -# 55 "parser_cocci_menhir.mly" - (string * Data.clt) -# 10234 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_fninfo = -# 791 "parser_cocci_menhir.mly" - ( try - let _ = List.find (function Ast0.FAttr(_) -> true | _ -> false) _2 in - raise (Semantic_cocci.Semantic "multiple attributes") - with Not_found -> (Ast0.FAttr(P.id2mcode _1))::_2 ) -# 10244 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_fninfo_nt = -# 797 "parser_cocci_menhir.mly" - ( [] ) -# 10261 "parser_cocci_menhir.ml" + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 11544 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let d : 'tv_comma_list_d_ident_ = Obj.magic d in + let i : 'tv_pure_ident = Obj.magic i in + let _startpos = _startpos_i_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_decl_var = let cv = + +# 39 "standard.mly" + ( None ) +# 11554 "parser_cocci_menhir.ml" + + in + let s = + +# 39 "standard.mly" + ( None ) +# 11561 "parser_cocci_menhir.ml" + + in + +# 943 "parser_cocci_menhir.mly" + ( List.map + (function (id,fn) -> + let idtype = + P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in + Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv))) + d ) +# 11572 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10269,29 +11580,61 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; } = _menhir_stack in - let _2 : 'tv_fninfo_nt = Obj.magic _2 in - let _1 : 'tv_storage = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_fninfo_nt = -# 799 "parser_cocci_menhir.mly" - ( try - let _ = - List.find (function Ast0.FStorage(_) -> true | _ -> false) _2 in - raise (Semantic_cocci.Semantic "duplicate storage") - with Not_found -> (Ast0.FStorage(_1))::_2 ) -# 10295 "parser_cocci_menhir.ml" + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 11608 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let d : 'tv_comma_list_d_ident_ = Obj.magic d in + let i : 'tv_pure_ident = Obj.magic i in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_decl_var = let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 11620 "parser_cocci_menhir.ml" + + in + let s = + +# 39 "standard.mly" + ( None ) +# 11627 "parser_cocci_menhir.ml" + + in + +# 943 "parser_cocci_menhir.mly" + ( List.map + (function (id,fn) -> + let idtype = + P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in + Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv))) + d ) +# 11638 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10303,32 +11646,61 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; } = _menhir_stack in - let _2 : 'tv_fninfo_nt = Obj.magic _2 in - let _1 : ( -# 53 "parser_cocci_menhir.mly" - (Data.clt) -# 10322 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_fninfo_nt = -# 805 "parser_cocci_menhir.mly" - ( try - let _ = List.find (function Ast0.FInline(_) -> true | _ -> false) _2 in - raise (Semantic_cocci.Semantic "duplicate inline") - with Not_found -> (Ast0.FInline(P.clt2mcode "inline" _1))::_2 ) -# 10332 "parser_cocci_menhir.ml" + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 11674 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let d : 'tv_comma_list_d_ident_ = Obj.magic d in + let i : 'tv_pure_ident = Obj.magic i in + let x0 : 'tv_storage = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_decl_var = let cv = + +# 39 "standard.mly" + ( None ) +# 11685 "parser_cocci_menhir.ml" + + in + let s = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 11693 "parser_cocci_menhir.ml" + + in + +# 943 "parser_cocci_menhir.mly" + ( List.map + (function (id,fn) -> + let idtype = + P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in + Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv))) + d ) +# 11704 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10340,49 +11712,68 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = x1; + MenhirLib.EngineTypes.startp = _startpos_x1_; + MenhirLib.EngineTypes.endp = _endpos_x1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; } = _menhir_stack in - let _2 : 'tv_fninfo_nt = Obj.magic _2 in - let _1 : ( -# 55 "parser_cocci_menhir.mly" - (string * Data.clt) -# 10359 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_fninfo_nt = -# 810 "parser_cocci_menhir.mly" - ( try - let _ = List.find (function Ast0.FAttr(_) -> true | _ -> false) _2 in - raise (Semantic_cocci.Semantic "duplicate init") - with Not_found -> (Ast0.FAttr(P.id2mcode _1))::_2 ) -# 10369 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_fun_after_dots = -# 1701 "parser_cocci_menhir.mly" - ([]) -# 10386 "parser_cocci_menhir.ml" + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 11745 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let d : 'tv_comma_list_d_ident_ = Obj.magic d in + let i : 'tv_pure_ident = Obj.magic i in + let x1 : 'tv_const_vol = Obj.magic x1 in + let x0 : 'tv_storage = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_decl_var = let cv = + let x = x1 in + +# 41 "standard.mly" + ( Some x ) +# 11758 "parser_cocci_menhir.ml" + + in + let s = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 11766 "parser_cocci_menhir.ml" + + in + +# 943 "parser_cocci_menhir.mly" + ( List.map + (function (id,fn) -> + let idtype = + P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in + Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv))) + d ) +# 11777 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10394,23 +11785,69 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = q; + MenhirLib.EngineTypes.startp = _startpos_q_; + MenhirLib.EngineTypes.endp = _endpos_q_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; } = _menhir_stack in - let _2 : 'tv_fun_after_exp = Obj.magic _2 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_fun_after_dots = -# 1702 "parser_cocci_menhir.mly" - (_2) -# 10414 "parser_cocci_menhir.ml" + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 11818 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 11824 "parser_cocci_menhir.ml" + ) = Obj.magic q in + let d : 'tv_d_ident = Obj.magic d in + let i : 'tv_pure_ident = Obj.magic i in + let _startpos = _startpos_i_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_decl_var = let cv = + +# 39 "standard.mly" + ( None ) +# 11834 "parser_cocci_menhir.ml" + + in + let s = + +# 39 "standard.mly" + ( None ) +# 11841 "parser_cocci_menhir.ml" + + in + +# 951 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + !Data.add_type_name (P.id2name i); + let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in + [Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e, + P.clt2mcode ";" pv))] ) +# 11851 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10422,25 +11859,76 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = q; + MenhirLib.EngineTypes.startp = _startpos_q_; + MenhirLib.EngineTypes.endp = _endpos_q_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; }; } = _menhir_stack in - let _2 : 'tv_fun_after_exp = Obj.magic _2 in - let _1 : 'tv_expr = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_fun_after_dots = -# 1703 "parser_cocci_menhir.mly" - (Ast0.wrap(Ast0.Exp(_1))::_2) -# 10444 "parser_cocci_menhir.ml" + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 11897 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 11903 "parser_cocci_menhir.ml" + ) = Obj.magic q in + let d : 'tv_d_ident = Obj.magic d in + let i : 'tv_pure_ident = Obj.magic i in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_decl_var = let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 11915 "parser_cocci_menhir.ml" + + in + let s = + +# 39 "standard.mly" + ( None ) +# 11922 "parser_cocci_menhir.ml" + + in + +# 951 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + !Data.add_type_name (P.id2name i); + let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in + [Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e, + P.clt2mcode ";" pv))] ) +# 11932 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10452,42 +11940,76 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = q; + MenhirLib.EngineTypes.startp = _startpos_q_; + MenhirLib.EngineTypes.endp = _endpos_q_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; }; } = _menhir_stack in - let _2 : 'tv_fun_after_stm = Obj.magic _2 in - let _1 : 'tv_decl_statement_expr = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_fun_after_dots = -# 1704 "parser_cocci_menhir.mly" - (_1@_2) -# 10474 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_fun_after_dots_or = -# 1711 "parser_cocci_menhir.mly" - ([]) -# 10491 "parser_cocci_menhir.ml" + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 11978 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 11984 "parser_cocci_menhir.ml" + ) = Obj.magic q in + let d : 'tv_d_ident = Obj.magic d in + let i : 'tv_pure_ident = Obj.magic i in + let x0 : 'tv_storage = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_decl_var = let cv = + +# 39 "standard.mly" + ( None ) +# 11995 "parser_cocci_menhir.ml" + + in + let s = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 12003 "parser_cocci_menhir.ml" + + in + +# 951 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + !Data.add_type_name (P.id2name i); + let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in + [Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e, + P.clt2mcode ";" pv))] ) +# 12013 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10499,23 +12021,3646 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.semv = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = q; + MenhirLib.EngineTypes.startp = _startpos_q_; + MenhirLib.EngineTypes.endp = _endpos_q_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = x1; + MenhirLib.EngineTypes.startp = _startpos_x1_; + MenhirLib.EngineTypes.endp = _endpos_x1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 12064 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 12070 "parser_cocci_menhir.ml" + ) = Obj.magic q in + let d : 'tv_d_ident = Obj.magic d in + let i : 'tv_pure_ident = Obj.magic i in + let x1 : 'tv_const_vol = Obj.magic x1 in + let x0 : 'tv_storage = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_decl_var = let cv = + let x = x1 in + +# 41 "standard.mly" + ( Some x ) +# 12083 "parser_cocci_menhir.ml" + + in + let s = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 12091 "parser_cocci_menhir.ml" + + in + +# 951 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + !Data.add_type_name (P.id2name i); + let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in + [Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e, + P.clt2mcode ";" pv))] ) +# 12101 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = rp2; + MenhirLib.EngineTypes.startp = _startpos_rp2_; + MenhirLib.EngineTypes.endp = _endpos_rp2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = p; + MenhirLib.EngineTypes.startp = _startpos_p_; + MenhirLib.EngineTypes.endp = _endpos_p_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = lp2; + MenhirLib.EngineTypes.startp = _startpos_lp2_; + MenhirLib.EngineTypes.endp = _endpos_lp2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = rp1; + MenhirLib.EngineTypes.startp = _startpos_rp1_; + MenhirLib.EngineTypes.endp = _endpos_rp1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = st; + MenhirLib.EngineTypes.startp = _startpos_st_; + MenhirLib.EngineTypes.endp = _endpos_st_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = lp1; + MenhirLib.EngineTypes.startp = _startpos_lp1_; + MenhirLib.EngineTypes.endp = _endpos_lp1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 12162 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let rp2 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 12167 "parser_cocci_menhir.ml" + ) = Obj.magic rp2 in + let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in + let lp2 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 12173 "parser_cocci_menhir.ml" + ) = Obj.magic lp2 in + let rp1 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 12178 "parser_cocci_menhir.ml" + ) = Obj.magic rp1 in + let d : 'tv_d_ident = Obj.magic d in + let st : ( +# 99 "parser_cocci_menhir.mly" + (Data.clt) +# 12184 "parser_cocci_menhir.ml" + ) = Obj.magic st in + let lp1 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 12189 "parser_cocci_menhir.ml" + ) = Obj.magic lp1 in + let t : 'tv_ctype = Obj.magic t in + let _startpos = _startpos_t_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_decl_var = let s = + +# 39 "standard.mly" + ( None ) +# 12198 "parser_cocci_menhir.ml" + + in + +# 961 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + let t = + Ast0.wrap + (Ast0.FunctionPointer + (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1, + P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in + [Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv))] ) +# 12210 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = rp2; + MenhirLib.EngineTypes.startp = _startpos_rp2_; + MenhirLib.EngineTypes.endp = _endpos_rp2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = p; + MenhirLib.EngineTypes.startp = _startpos_p_; + MenhirLib.EngineTypes.endp = _endpos_p_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = lp2; + MenhirLib.EngineTypes.startp = _startpos_lp2_; + MenhirLib.EngineTypes.endp = _endpos_lp2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = rp1; + MenhirLib.EngineTypes.startp = _startpos_rp1_; + MenhirLib.EngineTypes.endp = _endpos_rp1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = st; + MenhirLib.EngineTypes.startp = _startpos_st_; + MenhirLib.EngineTypes.endp = _endpos_st_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = lp1; + MenhirLib.EngineTypes.startp = _startpos_lp1_; + MenhirLib.EngineTypes.endp = _endpos_lp1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 12276 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let rp2 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 12281 "parser_cocci_menhir.ml" + ) = Obj.magic rp2 in + let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in + let lp2 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 12287 "parser_cocci_menhir.ml" + ) = Obj.magic lp2 in + let rp1 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 12292 "parser_cocci_menhir.ml" + ) = Obj.magic rp1 in + let d : 'tv_d_ident = Obj.magic d in + let st : ( +# 99 "parser_cocci_menhir.mly" + (Data.clt) +# 12298 "parser_cocci_menhir.ml" + ) = Obj.magic st in + let lp1 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 12303 "parser_cocci_menhir.ml" + ) = Obj.magic lp1 in + let t : 'tv_ctype = Obj.magic t in + let x0 : 'tv_storage = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_decl_var = let s = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 12314 "parser_cocci_menhir.ml" + + in + +# 961 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + let t = + Ast0.wrap + (Ast0.FunctionPointer + (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1, + P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in + [Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv))] ) +# 12326 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let _5 : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 12367 "parser_cocci_menhir.ml" + ) = Obj.magic _5 in + let _4 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 12372 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr_list_option = Obj.magic _3 in + let _2 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 12378 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_decl_ident = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_ in + let _v : 'tv_decl_var = +# 969 "parser_cocci_menhir.mly" + ( [Ast0.wrap(Ast0.MacroDecl(_1,P.clt2mcode "(" _2,_3, + P.clt2mcode ")" _4,P.clt2mcode ";" _5))] ) +# 12387 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = q; + MenhirLib.EngineTypes.startp = _startpos_q_; + MenhirLib.EngineTypes.endp = _endpos_q_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = rp2; + MenhirLib.EngineTypes.startp = _startpos_rp2_; + MenhirLib.EngineTypes.endp = _endpos_rp2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = p; + MenhirLib.EngineTypes.startp = _startpos_p_; + MenhirLib.EngineTypes.endp = _endpos_p_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = lp2; + MenhirLib.EngineTypes.startp = _startpos_lp2_; + MenhirLib.EngineTypes.endp = _endpos_lp2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = rp1; + MenhirLib.EngineTypes.startp = _startpos_rp1_; + MenhirLib.EngineTypes.endp = _endpos_rp1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = st; + MenhirLib.EngineTypes.startp = _startpos_st_; + MenhirLib.EngineTypes.endp = _endpos_st_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = lp1; + MenhirLib.EngineTypes.startp = _startpos_lp1_; + MenhirLib.EngineTypes.endp = _endpos_lp1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 12458 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 12464 "parser_cocci_menhir.ml" + ) = Obj.magic q in + let rp2 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 12469 "parser_cocci_menhir.ml" + ) = Obj.magic rp2 in + let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in + let lp2 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 12475 "parser_cocci_menhir.ml" + ) = Obj.magic lp2 in + let rp1 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 12480 "parser_cocci_menhir.ml" + ) = Obj.magic rp1 in + let d : 'tv_d_ident = Obj.magic d in + let st : ( +# 99 "parser_cocci_menhir.mly" + (Data.clt) +# 12486 "parser_cocci_menhir.ml" + ) = Obj.magic st in + let lp1 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 12491 "parser_cocci_menhir.ml" + ) = Obj.magic lp1 in + let t : 'tv_ctype = Obj.magic t in + let _startpos = _startpos_t_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_decl_var = let s = + +# 39 "standard.mly" + ( None ) +# 12500 "parser_cocci_menhir.ml" + + in + +# 975 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + let t = + Ast0.wrap + (Ast0.FunctionPointer + (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1, + P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in + [Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))]) +# 12512 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = q; + MenhirLib.EngineTypes.startp = _startpos_q_; + MenhirLib.EngineTypes.endp = _endpos_q_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = rp2; + MenhirLib.EngineTypes.startp = _startpos_rp2_; + MenhirLib.EngineTypes.endp = _endpos_rp2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = p; + MenhirLib.EngineTypes.startp = _startpos_p_; + MenhirLib.EngineTypes.endp = _endpos_p_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = lp2; + MenhirLib.EngineTypes.startp = _startpos_lp2_; + MenhirLib.EngineTypes.endp = _endpos_lp2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = rp1; + MenhirLib.EngineTypes.startp = _startpos_rp1_; + MenhirLib.EngineTypes.endp = _endpos_rp1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = st; + MenhirLib.EngineTypes.startp = _startpos_st_; + MenhirLib.EngineTypes.endp = _endpos_st_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = lp1; + MenhirLib.EngineTypes.startp = _startpos_lp1_; + MenhirLib.EngineTypes.endp = _endpos_lp1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 12588 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 12594 "parser_cocci_menhir.ml" + ) = Obj.magic q in + let rp2 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 12599 "parser_cocci_menhir.ml" + ) = Obj.magic rp2 in + let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in + let lp2 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 12605 "parser_cocci_menhir.ml" + ) = Obj.magic lp2 in + let rp1 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 12610 "parser_cocci_menhir.ml" + ) = Obj.magic rp1 in + let d : 'tv_d_ident = Obj.magic d in + let st : ( +# 99 "parser_cocci_menhir.mly" + (Data.clt) +# 12616 "parser_cocci_menhir.ml" + ) = Obj.magic st in + let lp1 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 12621 "parser_cocci_menhir.ml" + ) = Obj.magic lp1 in + let t : 'tv_ctype = Obj.magic t in + let x0 : 'tv_storage = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_decl_var = let s = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 12632 "parser_cocci_menhir.ml" + + in + +# 975 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + let t = + Ast0.wrap + (Ast0.FunctionPointer + (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1, + P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in + [Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))]) +# 12644 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = id; + MenhirLib.EngineTypes.startp = _startpos_id_; + MenhirLib.EngineTypes.endp = _endpos_id_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = s; + MenhirLib.EngineTypes.startp = _startpos_s_; + MenhirLib.EngineTypes.endp = _endpos_s_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + } = _menhir_stack in + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 12680 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let id : 'tv_typedef_ident = Obj.magic id in + let t : 'tv_typedef_ctype = Obj.magic t in + let s : ( +# 53 "parser_cocci_menhir.mly" + (Data.clt) +# 12687 "parser_cocci_menhir.ml" + ) = Obj.magic s in + let _startpos = _startpos_s_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_decl_var = +# 983 "parser_cocci_menhir.mly" + ( let s = P.clt2mcode "typedef" s in + [Ast0.wrap(Ast0.Typedef(s,t,id,P.clt2mcode ";" pv))] ) +# 12695 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_define_param_list_start = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_define_param_list = +# 705 "parser_cocci_menhir.mly" + (let circle x = + match Ast0.unwrap x with Ast0.DPcircles(_) -> true | _ -> false in + if List.exists circle _1 + then Ast0.wrap(Ast0.CIRCLES(_1)) + else Ast0.wrap(Ast0.DOTS(_1)) ) +# 12723 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_define_param_list = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_define_param_list_option = +# 729 "parser_cocci_menhir.mly" + ( _1 ) +# 12747 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_define_param_list_option = +# 730 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.DOTS([])) ) +# 12764 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_ident = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_define_param_list_start = +# 712 "parser_cocci_menhir.mly" + ( [Ast0.wrap(Ast0.DParam _1)] ) +# 12788 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _3 : 'tv_define_param_list_start = Obj.magic _3 in + let _2 : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 12820 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_ident = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_define_param_list_start = +# 714 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.DParam _1):: + Ast0.wrap(Ast0.DPComma(P.clt2mcode "," _2))::_3 ) +# 12829 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = r; + MenhirLib.EngineTypes.startp = _startpos_r_; + MenhirLib.EngineTypes.endp = _endpos_r_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let r : 'tv_list_dp_comma_args_TEllipsis__ = Obj.magic r in + let d : ( +# 73 "parser_cocci_menhir.mly" + (Data.clt) +# 12856 "parser_cocci_menhir.ml" + ) = Obj.magic d in + let _startpos = _startpos_d_ in + let _endpos = _endpos_r_ in + let _v : 'tv_define_param_list_start = +# 717 "parser_cocci_menhir.mly" + ( (P.mkdpdots "..." d):: + (List.concat (List.map (function x -> x (P.mkdpdots "...")) r)) ) +# 12864 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : ( +# 81 "parser_cocci_menhir.mly" + (Data.clt * token) +# 12885 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_defineop = +# 664 "parser_cocci_menhir.mly" + ( let (clt,ident) = _1 in + function body -> + Ast0.wrap + (Ast0.Define + (P.clt2mcode "#define" clt, + (match ident with + TMetaId((nm,constraints,pure,clt)) -> + Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,pure)) + | TIdent(nm_pure) -> + Ast0.wrap(Ast0.Id(P.id2mcode nm_pure)) + | _ -> + raise + (Semantic_cocci.Semantic + "unexpected name for a #define")), + Ast0.wrap Ast0.NoParams, + body)) ) +# 12907 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _3 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 12938 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_define_param_list_option = Obj.magic _2 in + let _1 : ( +# 82 "parser_cocci_menhir.mly" + (Data.clt * token * int * int) +# 12944 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_defineop = +# 681 "parser_cocci_menhir.mly" + ( let (clt,ident,parenoff,parencol) = _1 in + (* clt is the start of the #define itself *) + let (arity,line,lline,offset,col,strbef,straft,pos) = clt in + let lp = + P.clt2mcode "(" + (arity,line,lline,parenoff,parencol,[],[],Ast0.NoMetaPos) in + function body -> + Ast0.wrap + (Ast0.Define + (P.clt2mcode "#define" clt, + (match ident with + TMetaId((nm,constraints,pure,clt)) -> + Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,pure)) + | TIdent(nm_pure) -> + Ast0.wrap(Ast0.Id(P.id2mcode nm_pure)) + | _ -> + raise + (Semantic_cocci.Semantic + "unexpected name for a #define")), + Ast0.wrap (Ast0.DParams (lp,_2,P.clt2mcode ")" _3)),body)) ) +# 12970 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_pnrule = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_dep = +# 225 "parser_cocci_menhir.mly" + ( _1 ) +# 12994 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _3 : 'tv_dep = Obj.magic _3 in + let _1 : 'tv_dep = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_dep = +# 226 "parser_cocci_menhir.mly" + ( Ast.AndDep(_1, _3) ) +# 13028 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _3 : 'tv_dep = Obj.magic _3 in + let _1 : 'tv_dep = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_dep = +# 227 "parser_cocci_menhir.mly" + ( Ast.OrDep (_1, _3) ) +# 13062 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_depends = +# 221 "parser_cocci_menhir.mly" + ( Ast.NoDep ) +# 13079 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = parents; + MenhirLib.EngineTypes.startp = _startpos_parents_; + MenhirLib.EngineTypes.endp = _endpos_parents_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let parents : 'tv_dep = Obj.magic parents in + let _startpos = _startpos__1_ in + let _endpos = _endpos_parents_ in + let _v : 'tv_depends = +# 222 "parser_cocci_menhir.mly" + ( parents ) +# 13111 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : 'tv_ident = Obj.magic _2 in + let _1 : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 13138 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_designator = +# 1081 "parser_cocci_menhir.mly" + ( Ast0.DesignatorField (P.clt2mcode "." _1,_2) ) +# 13145 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _3 : ( +# 102 "parser_cocci_menhir.mly" + (Data.clt) +# 13176 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_eexpr = Obj.magic _2 in + let _1 : ( +# 102 "parser_cocci_menhir.mly" + (Data.clt) +# 13182 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_designator = +# 1083 "parser_cocci_menhir.mly" + ( Ast0.DesignatorIndex (P.clt2mcode "[" _1,_2,P.clt2mcode "]" _3) ) +# 13189 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let _5 : ( +# 102 "parser_cocci_menhir.mly" + (Data.clt) +# 13230 "parser_cocci_menhir.ml" + ) = Obj.magic _5 in + let _4 : 'tv_eexpr = Obj.magic _4 in + let _3 : ( +# 73 "parser_cocci_menhir.mly" + (Data.clt) +# 13236 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_eexpr = Obj.magic _2 in + let _1 : ( +# 102 "parser_cocci_menhir.mly" + (Data.clt) +# 13242 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_ in + let _v : 'tv_designator = +# 1085 "parser_cocci_menhir.mly" + ( Ast0.DesignatorRange (P.clt2mcode "[" _1,_2,P.clt2mcode "..." _3, + _4,P.clt2mcode "]" _5) ) +# 13250 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_basic_expr_eexpr_nest_expressions_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_dexpr = +# 1184 "parser_cocci_menhir.mly" + ( _1 ) +# 13274 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : 'tv_separated_nonempty_list_TComma_pure_ident_ = Obj.magic _2 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_disable = +# 240 "parser_cocci_menhir.mly" + ( List.map P.id2name _2 ) +# 13302 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : ( +# 73 "parser_cocci_menhir.mly" + (Data.clt) +# 13323 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_dot_expressions = +# 1193 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Edots(P.clt2mcode "..." _1,None)) ) +# 13330 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_nest_expressions = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_dot_expressions = +# 1194 "parser_cocci_menhir.mly" + ( _1 ) +# 13354 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = c; + MenhirLib.EngineTypes.startp = _startpos_c_; + MenhirLib.EngineTypes.endp = _endpos_c_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let d : ( +# 73 "parser_cocci_menhir.mly" + (Data.clt) +# 13380 "parser_cocci_menhir.ml" + ) = Obj.magic d in + let c : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 13385 "parser_cocci_menhir.ml" + ) = Obj.magic c in + let _startpos = _startpos_c_ in + let _endpos = _endpos_d_ in + let _v : 'tv_dp_comma_args_TEllipsis_ = +# 722 "parser_cocci_menhir.mly" + ( function dot_builder -> + [Ast0.wrap(Ast0.DPComma(P.clt2mcode "," c)); dot_builder d] ) +# 13393 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : 'tv_ident = Obj.magic _2 in + let _1 : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 13420 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_dp_comma_args_TEllipsis_ = +# 725 "parser_cocci_menhir.mly" + ( function dot_builder -> + [Ast0.wrap(Ast0.DPComma(P.clt2mcode "," _1)); + Ast0.wrap(Ast0.DParam _2)] ) +# 13429 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let d : ( +# 73 "parser_cocci_menhir.mly" + (Data.clt) +# 13450 "parser_cocci_menhir.ml" + ) = Obj.magic d in + let _startpos = _startpos_d_ in + let _endpos = _endpos_d_ in + let _v : 'tv_edots_when_TEllipsis_eexpr_ = +# 1822 "parser_cocci_menhir.mly" + ( (d,None) ) +# 13457 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = w; + MenhirLib.EngineTypes.startp = _startpos_w_; + MenhirLib.EngineTypes.endp = _endpos_w_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let w : 'tv_eexpr = Obj.magic w in + let d : ( +# 73 "parser_cocci_menhir.mly" + (Data.clt) +# 13496 "parser_cocci_menhir.ml" + ) = Obj.magic d in + let _startpos = _startpos_d_ in + let _endpos = _endpos__5_ in + let _v : 'tv_edots_when_TEllipsis_eexpr_ = +# 1823 "parser_cocci_menhir.mly" + ( (d,Some w) ) +# 13503 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let d : ( +# 73 "parser_cocci_menhir.mly" + (Data.clt) +# 13524 "parser_cocci_menhir.ml" + ) = Obj.magic d in + let _startpos = _startpos_d_ in + let _endpos = _endpos_d_ in + let _v : 'tv_edots_when_TEllipsis_initialize_ = +# 1822 "parser_cocci_menhir.mly" + ( (d,None) ) +# 13531 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = w; + MenhirLib.EngineTypes.startp = _startpos_w_; + MenhirLib.EngineTypes.endp = _endpos_w_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let w : 'tv_initialize = Obj.magic w in + let d : ( +# 73 "parser_cocci_menhir.mly" + (Data.clt) +# 13570 "parser_cocci_menhir.ml" + ) = Obj.magic d in + let _startpos = _startpos_d_ in + let _endpos = _endpos__5_ in + let _v : 'tv_edots_when_TEllipsis_initialize_ = +# 1823 "parser_cocci_menhir.mly" + ( (d,Some w) ) +# 13577 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let d : ( +# 73 "parser_cocci_menhir.mly" + (Data.clt) +# 13598 "parser_cocci_menhir.ml" + ) = Obj.magic d in + let _startpos = _startpos_d_ in + let _endpos = _endpos_d_ in + let _v : 'tv_edots_when_TEllipsis_struct_decl_ = +# 1822 "parser_cocci_menhir.mly" + ( (d,None) ) +# 13605 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = w; + MenhirLib.EngineTypes.startp = _startpos_w_; + MenhirLib.EngineTypes.endp = _endpos_w_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let w : 'tv_struct_decl = Obj.magic w in + let d : ( +# 73 "parser_cocci_menhir.mly" + (Data.clt) +# 13644 "parser_cocci_menhir.ml" + ) = Obj.magic d in + let _startpos = _startpos_d_ in + let _endpos = _endpos__5_ in + let _v : 'tv_edots_when_TEllipsis_struct_decl_ = +# 1823 "parser_cocci_menhir.mly" + ( (d,Some w) ) +# 13651 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_basic_expr_eexpr_dot_expressions_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_eexpr = +# 1182 "parser_cocci_menhir.mly" + ( _1 ) +# 13675 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_eexpr_list_start = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_eexpr_list = +# 1766 "parser_cocci_menhir.mly" + (let circle x = + match Ast0.unwrap x with Ast0.Ecircles(_) -> true | _ -> false in + let star x = + match Ast0.unwrap x with Ast0.Estars(_) -> true | _ -> false in + if List.exists circle _1 + then Ast0.wrap(Ast0.CIRCLES(_1)) + else + if List.exists star _1 + then Ast0.wrap(Ast0.STARS(_1)) + else Ast0.wrap(Ast0.DOTS(_1)) ) +# 13708 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_eexpr_list = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_eexpr_list_option = +# 1805 "parser_cocci_menhir.mly" + ( _1 ) +# 13732 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_eexpr_list_option = +# 1806 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.DOTS([])) ) +# 13749 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_aexpr = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_eexpr_list_start = +# 1793 "parser_cocci_menhir.mly" + ( [_1] ) +# 13773 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _3 : 'tv_eexpr_list_start = Obj.magic _3 in + let _2 : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 13805 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_aexpr = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_eexpr_list_start = +# 1795 "parser_cocci_menhir.mly" + ( _1::Ast0.wrap(Ast0.EComma(P.clt2mcode "," _2))::_3 ) +# 13813 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_exists = +# 243 "parser_cocci_menhir.mly" + ( Ast.Exists ) +# 13835 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_exists = +# 244 "parser_cocci_menhir.mly" + ( Ast.Forall ) +# 13857 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_exists = +# 245 "parser_cocci_menhir.mly" + ( Ast.Undetermined ) +# 13874 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_basic_expr_expr_invalid_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_expr = +# 1180 "parser_cocci_menhir.mly" + ( _1 ) +# 13898 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = r; + MenhirLib.EngineTypes.startp = _startpos_r_; + MenhirLib.EngineTypes.endp = _endpos_r_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let r : 'tv_no_dot_start_end_dexpr_edots_when_TEllipsis_eexpr__ = Obj.magic r in + let _startpos = _startpos_r_ in + let _endpos = _endpos_r_ in + let _v : 'tv_expr_dots_TEllipsis_ = +# 1362 "parser_cocci_menhir.mly" + ( r ) +# 13922 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_extends = +# 216 "parser_cocci_menhir.mly" + ( () ) +# 13939 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = parent; + MenhirLib.EngineTypes.startp = _startpos_parent_; + MenhirLib.EngineTypes.endp = _endpos_parent_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let parent : ( +# 47 "parser_cocci_menhir.mly" + (string) +# 13964 "parser_cocci_menhir.ml" + ) = Obj.magic parent in + let _startpos = _startpos__1_ in + let _endpos = _endpos_parent_ in + let _v : 'tv_extends = +# 218 "parser_cocci_menhir.mly" + ( !Data.install_bindings (parent) ) +# 13971 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : ( +# 83 "parser_cocci_menhir.mly" + (string * Data.clt) +# 13997 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : ( +# 83 "parser_cocci_menhir.mly" + (string * Data.clt) +# 14002 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_filespec = +# 623 "parser_cocci_menhir.mly" + ( [Ast0.wrap + (Ast0.FILEINFO(P.id2mcode _1, + P.id2mcode _2))] ) +# 14011 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_fninfo = +# 758 "parser_cocci_menhir.mly" + ( [] ) +# 14028 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : 'tv_fninfo = Obj.magic _2 in + let _1 : 'tv_storage = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_fninfo = +# 760 "parser_cocci_menhir.mly" + ( try + let _ = + List.find (function Ast0.FStorage(_) -> true | _ -> false) _2 in + raise (Semantic_cocci.Semantic "duplicate storage") + with Not_found -> (Ast0.FStorage(_1))::_2 ) +# 14062 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = r; + MenhirLib.EngineTypes.startp = _startpos_r_; + MenhirLib.EngineTypes.endp = _endpos_r_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let r : 'tv_fninfo_nt = Obj.magic r in + let t : 'tv_ctype = Obj.magic t in + let _startpos = _startpos_t_ in + let _endpos = _endpos_r_ in + let _v : 'tv_fninfo = +# 765 "parser_cocci_menhir.mly" + ( (Ast0.FType(t))::r ) +# 14092 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : 'tv_fninfo = Obj.magic _2 in + let _1 : ( +# 53 "parser_cocci_menhir.mly" + (Data.clt) +# 14119 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_fninfo = +# 767 "parser_cocci_menhir.mly" + ( try + let _ = List.find (function Ast0.FInline(_) -> true | _ -> false) _2 in + raise (Semantic_cocci.Semantic "duplicate inline") + with Not_found -> (Ast0.FInline(P.clt2mcode "inline" _1))::_2 ) +# 14129 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : 'tv_fninfo = Obj.magic _2 in + let _1 : ( +# 55 "parser_cocci_menhir.mly" + (string * Data.clt) +# 14156 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_fninfo = +# 772 "parser_cocci_menhir.mly" + ( try + let _ = List.find (function Ast0.FAttr(_) -> true | _ -> false) _2 in + raise (Semantic_cocci.Semantic "multiple attributes") + with Not_found -> (Ast0.FAttr(P.id2mcode _1))::_2 ) +# 14166 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_fninfo_nt = +# 778 "parser_cocci_menhir.mly" + ( [] ) +# 14183 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : 'tv_fninfo_nt = Obj.magic _2 in + let _1 : 'tv_storage = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_fninfo_nt = +# 780 "parser_cocci_menhir.mly" + ( try + let _ = + List.find (function Ast0.FStorage(_) -> true | _ -> false) _2 in + raise (Semantic_cocci.Semantic "duplicate storage") + with Not_found -> (Ast0.FStorage(_1))::_2 ) +# 14217 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : 'tv_fninfo_nt = Obj.magic _2 in + let _1 : ( +# 53 "parser_cocci_menhir.mly" + (Data.clt) +# 14244 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_fninfo_nt = +# 786 "parser_cocci_menhir.mly" + ( try + let _ = List.find (function Ast0.FInline(_) -> true | _ -> false) _2 in + raise (Semantic_cocci.Semantic "duplicate inline") + with Not_found -> (Ast0.FInline(P.clt2mcode "inline" _1))::_2 ) +# 14254 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : 'tv_fninfo_nt = Obj.magic _2 in + let _1 : ( +# 55 "parser_cocci_menhir.mly" + (string * Data.clt) +# 14281 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_fninfo_nt = +# 791 "parser_cocci_menhir.mly" + ( try + let _ = List.find (function Ast0.FAttr(_) -> true | _ -> false) _2 in + raise (Semantic_cocci.Semantic "duplicate init") + with Not_found -> (Ast0.FAttr(P.id2mcode _1))::_2 ) +# 14291 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_fun_after_dots = +# 1714 "parser_cocci_menhir.mly" + ([]) +# 14308 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : 'tv_fun_after_exp = Obj.magic _2 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_fun_after_dots = +# 1715 "parser_cocci_menhir.mly" + (_2) +# 14336 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : 'tv_fun_after_exp = Obj.magic _2 in + let _1 : 'tv_expr = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_fun_after_dots = +# 1716 "parser_cocci_menhir.mly" + (Ast0.wrap(Ast0.Exp(_1))::_2) +# 14366 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : 'tv_fun_after_stm = Obj.magic _2 in + let _1 : 'tv_decl_statement_expr = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_fun_after_dots = +# 1717 "parser_cocci_menhir.mly" + (_1@_2) +# 14396 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_fun_after_dots_or = +# 1724 "parser_cocci_menhir.mly" + ([]) +# 14413 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : 'tv_fun_after_exp_or = Obj.magic _2 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_fun_after_dots_or = +# 1725 "parser_cocci_menhir.mly" + (_2) +# 14441 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : 'tv_fun_after_exp_or = Obj.magic _2 in + let _1 : 'tv_expr = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_fun_after_dots_or = +# 1726 "parser_cocci_menhir.mly" + (Ast0.wrap(Ast0.Exp(_1))::_2) +# 14471 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : 'tv_fun_after_stm = Obj.magic _2 in + let _1 : 'tv_decl_statement_expr = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_fun_after_dots_or = +# 1727 "parser_cocci_menhir.mly" + (_1@_2) +# 14501 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : 'tv_fun_after_dots = Obj.magic _2 in + let _1 : 'tv_stm_dots = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_fun_after_exp = +# 1720 "parser_cocci_menhir.mly" + (_1::_2) +# 14531 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_fun_after_exp_or = +# 1730 "parser_cocci_menhir.mly" + ([]) +# 14548 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : 'tv_fun_after_dots = Obj.magic _2 in + let _1 : 'tv_stm_dots = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_fun_after_exp_or = +# 1731 "parser_cocci_menhir.mly" + (_1::_2) +# 14578 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_fun_after_stm = +# 1709 "parser_cocci_menhir.mly" + ([]) +# 14595 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : 'tv_fun_after_dots = Obj.magic _2 in + let _1 : 'tv_stm_dots = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_fun_after_stm = +# 1710 "parser_cocci_menhir.mly" + (_1::_2) +# 14625 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : 'tv_fun_after_stm = Obj.magic _2 in + let _1 : 'tv_decl_statement = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_fun_after_stm = +# 1711 "parser_cocci_menhir.mly" + (_1@_2) +# 14655 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_fun_after_stm = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_fun_start = +# 1706 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.DOTS(_1)) ) +# 14679 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_pure_ident = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_func_ident = +# 1504 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) ) +# 14703 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : ( +# 61 "parser_cocci_menhir.mly" + (Parse_aux.idinfo) +# 14724 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_func_ident = +# 1506 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,clt) = _1 in + Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,pure)) ) +# 14732 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : ( +# 61 "parser_cocci_menhir.mly" + (Parse_aux.idinfo) +# 14753 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_func_ident = +# 1509 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,clt) = _1 in + Ast0.wrap(Ast0.MetaFunc(P.clt2mcode nm clt,constraints,pure)) ) +# 14761 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : ( +# 61 "parser_cocci_menhir.mly" + (Parse_aux.idinfo) +# 14782 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_func_ident = +# 1512 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,clt) = _1 in + Ast0.wrap + (Ast0.MetaLocalFunc(P.clt2mcode nm clt,constraints,pure)) ) +# 14791 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = rb; + MenhirLib.EngineTypes.startp = _startpos_rb_; + MenhirLib.EngineTypes.endp = _endpos_rb_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = b; + MenhirLib.EngineTypes.startp = _startpos_b_; + MenhirLib.EngineTypes.endp = _endpos_b_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = lb; + MenhirLib.EngineTypes.startp = _startpos_lb_; + MenhirLib.EngineTypes.endp = _endpos_lb_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = rp; + MenhirLib.EngineTypes.startp = _startpos_rp_; + MenhirLib.EngineTypes.endp = _endpos_rp_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = lp; + MenhirLib.EngineTypes.startp = _startpos_lp_; + MenhirLib.EngineTypes.endp = _endpos_lp_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = f; + MenhirLib.EngineTypes.startp = _startpos_f_; + MenhirLib.EngineTypes.endp = _endpos_f_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let rb : ( +# 101 "parser_cocci_menhir.mly" + (Data.clt) +# 14851 "parser_cocci_menhir.ml" + ) = Obj.magic rb in + let b : 'tv_fun_start = Obj.magic b in + let lb : ( +# 101 "parser_cocci_menhir.mly" + (Data.clt) +# 14857 "parser_cocci_menhir.ml" + ) = Obj.magic lb in + let rp : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 14862 "parser_cocci_menhir.ml" + ) = Obj.magic rp in + let d : 'tv_decl_list_decl_ = Obj.magic d in + let lp : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 14868 "parser_cocci_menhir.ml" + ) = Obj.magic lp in + let i : 'tv_func_ident = Obj.magic i in + let f : 'tv_fninfo = Obj.magic f in + let _startpos = _startpos_f_ in + let _endpos = _endpos_rb_ in + let _v : 'tv_fundecl = +# 749 "parser_cocci_menhir.mly" + ( P.verify_parameter_declarations (Ast0.undots d); + Ast0.wrap(Ast0.FunDecl((Ast0.default_info(),Ast0.context_befaft()), + f, i, + P.clt2mcode "(" lp, d, + P.clt2mcode ")" rp, + P.clt2mcode "{" lb, b, + P.clt2mcode "}" rb)) ) +# 14883 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = pt; + MenhirLib.EngineTypes.startp = _startpos_pt_; + MenhirLib.EngineTypes.endp = _endpos_pt_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = rp; + MenhirLib.EngineTypes.startp = _startpos_rp_; + MenhirLib.EngineTypes.endp = _endpos_rp_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = lp; + MenhirLib.EngineTypes.startp = _startpos_lp_; + MenhirLib.EngineTypes.endp = _endpos_lp_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = id; + MenhirLib.EngineTypes.startp = _startpos_id_; + MenhirLib.EngineTypes.endp = _endpos_id_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + } = _menhir_stack in + let pt : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 14929 "parser_cocci_menhir.ml" + ) = Obj.magic pt in + let rp : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 14934 "parser_cocci_menhir.ml" + ) = Obj.magic rp in + let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in + let lp : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 14940 "parser_cocci_menhir.ml" + ) = Obj.magic lp in + let id : 'tv_func_ident = Obj.magic id in + let t : 'tv_ctype = Obj.magic t in + let _startpos = _startpos_t_ in + let _endpos = _endpos_pt_ in + let _v : 'tv_funproto = let s = + +# 39 "standard.mly" + ( None ) +# 14950 "parser_cocci_menhir.ml" + + in + +# 737 "parser_cocci_menhir.mly" + ( Ast0.wrap + (Ast0.UnInit + (s, + Ast0.wrap + (Ast0.FunctionType(Some t, + P.clt2mcode "(" lp, d, P.clt2mcode ")" rp)), + id, P.clt2mcode ";" pt)) ) +# 14962 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = pt; + MenhirLib.EngineTypes.startp = _startpos_pt_; + MenhirLib.EngineTypes.endp = _endpos_pt_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = rp; + MenhirLib.EngineTypes.startp = _startpos_rp_; + MenhirLib.EngineTypes.endp = _endpos_rp_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = lp; + MenhirLib.EngineTypes.startp = _startpos_lp_; + MenhirLib.EngineTypes.endp = _endpos_lp_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = id; + MenhirLib.EngineTypes.startp = _startpos_id_; + MenhirLib.EngineTypes.endp = _endpos_id_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let pt : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 15013 "parser_cocci_menhir.ml" + ) = Obj.magic pt in + let rp : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 15018 "parser_cocci_menhir.ml" + ) = Obj.magic rp in + let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in + let lp : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 15024 "parser_cocci_menhir.ml" + ) = Obj.magic lp in + let id : 'tv_func_ident = Obj.magic id in + let t : 'tv_ctype = Obj.magic t in + let x0 : 'tv_storage = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_pt_ in + let _v : 'tv_funproto = let s = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 15036 "parser_cocci_menhir.ml" + + in + +# 737 "parser_cocci_menhir.mly" + ( Ast0.wrap + (Ast0.UnInit + (s, + Ast0.wrap + (Ast0.FunctionType(Some t, + P.clt2mcode "(" lp, d, P.clt2mcode ")" rp)), + id, P.clt2mcode ";" pt)) ) +# 15048 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_pure_ident = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_ident = +# 1517 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) ) +# 15072 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : ( +# 61 "parser_cocci_menhir.mly" + (Parse_aux.idinfo) +# 15093 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_ident = +# 1519 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,clt) = _1 in + Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,pure)) ) +# 15101 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let i : 'tv_pure_ident = Obj.magic i in + let _startpos = _startpos_i_ in + let _endpos = _endpos_i_ in + let _v : 'tv_ident_or_const = +# 1471 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Ident(Ast0.wrap(Ast0.Id(P.id2mcode i)))) ) +# 15125 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : ( +# 87 "parser_cocci_menhir.mly" + (string * Data.clt) +# 15146 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_ident_or_const = +# 1473 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) ) +# 15154 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : ( +# 80 "parser_cocci_menhir.mly" + (string * Data.clt) +# 15175 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_incl = +# 256 "parser_cocci_menhir.mly" + ( let (x,_) = _1 in Data.Include(x) ) +# 15182 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : ( +# 87 "parser_cocci_menhir.mly" + (string * Data.clt) +# 15207 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_incl = +# 257 "parser_cocci_menhir.mly" + ( Data.Iso(Common.Left(P.id2name _2)) ) +# 15214 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : ( +# 79 "parser_cocci_menhir.mly" + (string) +# 15239 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_incl = +# 258 "parser_cocci_menhir.mly" + ( Data.Iso(Common.Right _2) ) +# 15246 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _1 : 'tv_list_incl_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : ( +# 146 "parser_cocci_menhir.mly" + (Data.incl_iso list) +# 15274 "parser_cocci_menhir.ml" + ) = +# 252 "parser_cocci_menhir.mly" + ( _1 ) +# 15278 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _1 : 'tv_list_incl_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : ( +# 146 "parser_cocci_menhir.mly" + (Data.incl_iso list) +# 15306 "parser_cocci_menhir.ml" + ) = +# 253 "parser_cocci_menhir.mly" + ( _1 ) +# 15310 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : ( +# 80 "parser_cocci_menhir.mly" + (string * Data.clt) +# 15331 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_includes = +# 629 "parser_cocci_menhir.mly" + ( Ast0.wrap + (Ast0.Include(P.clt2mcode "#include" (P.drop_aft (P.id2clt _1)), + let (arity,ln,lln,offset,col,strbef,straft,pos) = + P.id2clt _1 in + let clt = + (arity,ln,lln,offset,0,strbef,straft,pos) in + P.clt2mcode + (Ast.Local (Parse_aux.str2inc (P.id2name _1))) + (P.drop_bef clt))) ) +# 15346 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : ( +# 80 "parser_cocci_menhir.mly" + (string * Data.clt) +# 15367 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_includes = +# 639 "parser_cocci_menhir.mly" + ( Ast0.wrap + (Ast0.Include(P.clt2mcode "#include" (P.drop_aft (P.id2clt _1)), + let (arity,ln,lln,offset,col,strbef,straft,pos) = + P.id2clt _1 in + let clt = + (arity,ln,lln,offset,0,strbef,straft,pos) in + P.clt2mcode + (Ast.NonLocal (Parse_aux.str2inc (P.id2name _1))) + (P.drop_bef clt))) ) +# 15382 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let t : 'tv_ctype = Obj.magic t in + let d : 'tv_defineop = Obj.magic d in + let _startpos = _startpos_d_ in + let _endpos = _endpos__3_ in + let _v : 'tv_includes = +# 649 "parser_cocci_menhir.mly" + ( let ty = Ast0.wrap(Ast0.TopExp(Ast0.wrap(Ast0.TypeExp(t)))) in + d (Ast0.wrap(Ast0.DOTS([ty]))) ) +# 15417 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = b; + MenhirLib.EngineTypes.startp = _startpos_b_; + MenhirLib.EngineTypes.endp = _endpos_b_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let b : 'tv_toplevel_seq_start_toplevel_after_dots_ = Obj.magic b in + let _1 : 'tv_defineop = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_includes = +# 652 "parser_cocci_menhir.mly" + ( let body = + match b with + [e] -> + (match Ast0.unwrap e with + Ast0.Exp(e1) -> + [Ast0.rewrap e (Ast0.TopExp(Ast0.set_arg_exp (e1)))] + | _ -> b) + | _ -> b in + _1 (Ast0.wrap(Ast0.DOTS(body))) ) +# 15459 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_eexpr = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_initialize = +# 1052 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.InitExpr(_1)) ) +# 15483 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _3 : ( +# 101 "parser_cocci_menhir.mly" + (Data.clt) +# 15514 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_initialize_list = Obj.magic _2 in + let _1 : ( +# 101 "parser_cocci_menhir.mly" + (Data.clt) +# 15520 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_initialize = +# 1054 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.InitList(P.clt2mcode "{" _1,_2,P.clt2mcode "}" _3)) ) +# 15527 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _2 : 'tv_fun_after_exp_or = Obj.magic _2 in + let _2 : ( +# 101 "parser_cocci_menhir.mly" + (Data.clt) +# 15553 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : ( +# 101 "parser_cocci_menhir.mly" + (Data.clt) +# 15558 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : 'tv_fun_after_dots_or = -# 1712 "parser_cocci_menhir.mly" - (_2) -# 10519 "parser_cocci_menhir.ml" + let _v : 'tv_initialize = +# 1056 "parser_cocci_menhir.mly" + ( Ast0.wrap + (Ast0.InitList(P.clt2mcode "{" _1,Ast0.wrap(Ast0.DOTS []), + P.clt2mcode "}" _2)) ) +# 15567 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : ( +# 65 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 15588 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_initialize = +# 1060 "parser_cocci_menhir.mly" + (let (nm,pure,clt) = _1 in + Ast0.wrap(Ast0.MetaInit(P.clt2mcode nm clt,pure)) ) +# 15596 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_initialize2 = +# 1066 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.InitExpr(_1)) ) +# 15620 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _3 : ( +# 101 "parser_cocci_menhir.mly" + (Data.clt) +# 15651 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_initialize_list = Obj.magic _2 in + let _1 : ( +# 101 "parser_cocci_menhir.mly" + (Data.clt) +# 15657 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_initialize2 = +# 1068 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.InitList(P.clt2mcode "{" _1,_2,P.clt2mcode "}" _3)) ) +# 15664 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10538,14 +15683,128 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : 'tv_fun_after_exp_or = Obj.magic _2 in - let _1 : 'tv_expr = Obj.magic _1 in + let _2 : ( +# 101 "parser_cocci_menhir.mly" + (Data.clt) +# 15690 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : ( +# 101 "parser_cocci_menhir.mly" + (Data.clt) +# 15695 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : 'tv_fun_after_dots_or = -# 1713 "parser_cocci_menhir.mly" - (Ast0.wrap(Ast0.Exp(_1))::_2) -# 10549 "parser_cocci_menhir.ml" + let _v : 'tv_initialize2 = +# 1070 "parser_cocci_menhir.mly" + ( Ast0.wrap + (Ast0.InitList(P.clt2mcode "{" _1,Ast0.wrap(Ast0.DOTS []), + P.clt2mcode "}" _2)) ) +# 15704 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _3 : 'tv_initialize2 = Obj.magic _3 in + let _2 : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 15736 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_list_designator_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_initialize2 = +# 1075 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.InitGccExt(_1,P.clt2mcode "=" _2,_3)) ) +# 15744 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _3 : 'tv_initialize2 = Obj.magic _3 in + let _2 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 15776 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_ident = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_initialize2 = +# 1077 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.InitGccName(_1,P.clt2mcode ":" _2,_3)) ) +# 15784 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_initialize_list_start = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_initialize_list = +# 1089 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.DOTS(_1)) ) +# 15808 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10568,14 +15827,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : 'tv_fun_after_stm = Obj.magic _2 in - let _1 : 'tv_decl_statement_expr = Obj.magic _1 in + let _2 : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 15834 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_initialize2 = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : 'tv_fun_after_dots_or = -# 1714 "parser_cocci_menhir.mly" - (_1@_2) -# 10579 "parser_cocci_menhir.ml" + let _v : 'tv_initialize_list_start = +# 1092 "parser_cocci_menhir.mly" + ( [_1;Ast0.wrap(Ast0.IComma(P.clt2mcode "," _2))] ) +# 15842 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10587,25 +15850,35 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let _2 : 'tv_fun_after_dots = Obj.magic _2 in - let _1 : 'tv_stm_dots = Obj.magic _1 in + let _3 : 'tv_initialize_list_start = Obj.magic _3 in + let _2 : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 15874 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_initialize2 = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_fun_after_exp = -# 1707 "parser_cocci_menhir.mly" - (_1::_2) -# 10609 "parser_cocci_menhir.ml" + let _endpos = _endpos__3_ in + let _v : 'tv_initialize_list_start = +# 1094 "parser_cocci_menhir.mly" + ( _1::Ast0.wrap(Ast0.IComma(P.clt2mcode "," _2))::_3 ) +# 15882 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10616,13 +15889,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_fun_after_exp_or = -# 1717 "parser_cocci_menhir.mly" - ([]) -# 10626 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.semv = r; + MenhirLib.EngineTypes.startp = _startpos_r_; + MenhirLib.EngineTypes.endp = _endpos_r_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let r : 'tv_comma_initializers_edots_when_TEllipsis_initialize__ = Obj.magic r in + let d : 'tv_edots_when_TEllipsis_initialize_ = Obj.magic d in + let _startpos = _startpos_d_ in + let _endpos = _endpos_r_ in + let _v : 'tv_initialize_list_start = +# 1097 "parser_cocci_menhir.mly" + ( (P.mkidots "..." d):: + (List.concat(List.map (function x -> x (P.mkidots "...")) r)) ) +# 15913 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10634,25 +15921,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : 'tv_fun_after_dots = Obj.magic _2 in - let _1 : 'tv_stm_dots = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_fun_after_exp_or = -# 1718 "parser_cocci_menhir.mly" - (_1::_2) -# 10656 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_invalid = +# 1190 "parser_cocci_menhir.mly" + ( raise (Semantic_cocci.Semantic "not matchable") ) +# 15935 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10666,10 +15945,10 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in let _endpos = _startpos in - let _v : 'tv_fun_after_stm = -# 1696 "parser_cocci_menhir.mly" - ([]) -# 10673 "parser_cocci_menhir.ml" + let _v : 'tv_is_expression = +# 248 "parser_cocci_menhir.mly" + ( false ) +# 15952 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10681,25 +15960,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : 'tv_fun_after_dots = Obj.magic _2 in - let _1 : 'tv_stm_dots = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_fun_after_stm = -# 1697 "parser_cocci_menhir.mly" - (_1::_2) -# 10703 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_is_expression = +# 249 "parser_cocci_menhir.mly" + ( true ) +# 15974 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10711,25 +15982,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : 'tv_fun_after_stm = Obj.magic _2 in - let _1 : 'tv_decl_statement = Obj.magic _1 in + let t : 'tv_ctype = Obj.magic t in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_fun_after_stm = -# 1698 "parser_cocci_menhir.mly" - (_1@_2) -# 10733 "parser_cocci_menhir.ml" + let _endpos = _endpos_t_ in + let _v : 'tv_iso_ctype_ = +# 1874 "parser_cocci_menhir.mly" + ( Common.Left t ) +# 16002 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10741,19 +16010,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : 'tv_fun_after_stm = Obj.magic _1 in + let t : 'tv_ctype = Obj.magic t in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_fun_start = -# 1693 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.DOTS(_1)) ) -# 10757 "parser_cocci_menhir.ml" + let _endpos = _endpos_t_ in + let _v : 'tv_iso_ctype_ = +# 1875 "parser_cocci_menhir.mly" + ( Common.Right t ) +# 16030 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10765,19 +16038,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : 'tv_pure_ident = Obj.magic _1 in + let t : 'tv_decl_var = Obj.magic t in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_func_ident = -# 1497 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) ) -# 10781 "parser_cocci_menhir.ml" + let _endpos = _endpos_t_ in + let _v : 'tv_iso_decl_var_ = +# 1874 "parser_cocci_menhir.mly" + ( Common.Left t ) +# 16058 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10789,24 +16066,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : ( -# 61 "parser_cocci_menhir.mly" - (Parse_aux.idinfo) -# 10802 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in + let t : 'tv_decl_var = Obj.magic t in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_func_ident = -# 1499 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,clt) = _1 in - Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,pure)) ) -# 10810 "parser_cocci_menhir.ml" + let _endpos = _endpos_t_ in + let _v : 'tv_iso_decl_var_ = +# 1875 "parser_cocci_menhir.mly" + ( Common.Right t ) +# 16086 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10818,24 +16094,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : ( -# 61 "parser_cocci_menhir.mly" - (Parse_aux.idinfo) -# 10831 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in + let t : 'tv_dexpr = Obj.magic t in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_func_ident = -# 1502 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,clt) = _1 in - Ast0.wrap(Ast0.MetaFunc(P.clt2mcode nm clt,constraints,pure)) ) -# 10839 "parser_cocci_menhir.ml" + let _endpos = _endpos_t_ in + let _v : 'tv_iso_dexpr_ = +# 1874 "parser_cocci_menhir.mly" + ( Common.Left t ) +# 16114 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10847,25 +16122,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : ( -# 61 "parser_cocci_menhir.mly" - (Parse_aux.idinfo) -# 10860 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in + let t : 'tv_dexpr = Obj.magic t in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_func_ident = -# 1505 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,clt) = _1 in - Ast0.wrap - (Ast0.MetaLocalFunc(P.clt2mcode nm clt,constraints,pure)) ) -# 10869 "parser_cocci_menhir.ml" + let _endpos = _endpos_t_ in + let _v : 'tv_iso_dexpr_ = +# 1875 "parser_cocci_menhir.mly" + ( Common.Right t ) +# 16142 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10877,86 +16150,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = rb; - MenhirLib.EngineTypes.startp = _startpos_rb_; - MenhirLib.EngineTypes.endp = _endpos_rb_; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = b; - MenhirLib.EngineTypes.startp = _startpos_b_; - MenhirLib.EngineTypes.endp = _endpos_b_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lb; - MenhirLib.EngineTypes.startp = _startpos_lb_; - MenhirLib.EngineTypes.endp = _endpos_lb_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = rp; - MenhirLib.EngineTypes.startp = _startpos_rp_; - MenhirLib.EngineTypes.endp = _endpos_rp_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lp; - MenhirLib.EngineTypes.startp = _startpos_lp_; - MenhirLib.EngineTypes.endp = _endpos_lp_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = f; - MenhirLib.EngineTypes.startp = _startpos_f_; - MenhirLib.EngineTypes.endp = _endpos_f_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let rb : ( -# 101 "parser_cocci_menhir.mly" - (Data.clt) -# 10929 "parser_cocci_menhir.ml" - ) = Obj.magic rb in - let b : 'tv_fun_start = Obj.magic b in - let lb : ( -# 101 "parser_cocci_menhir.mly" - (Data.clt) -# 10935 "parser_cocci_menhir.ml" - ) = Obj.magic lb in - let rp : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 10940 "parser_cocci_menhir.ml" - ) = Obj.magic rp in - let d : 'tv_decl_list_decl_ = Obj.magic d in - let lp : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 10946 "parser_cocci_menhir.ml" - ) = Obj.magic lp in - let i : 'tv_func_ident = Obj.magic i in - let f : 'tv_fninfo = Obj.magic f in - let _startpos = _startpos_f_ in - let _endpos = _endpos_rb_ in - let _v : 'tv_fundecl = -# 769 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.FunDecl((Ast0.default_info(),Ast0.context_befaft()), - f, i, - P.clt2mcode "(" lp, d, - P.clt2mcode ")" rp, - P.clt2mcode "{" lb, b, - P.clt2mcode "}" rb)) ) -# 10960 "parser_cocci_menhir.ml" + let t : 'tv_nest_start = Obj.magic t in + let _startpos = _startpos__1_ in + let _endpos = _endpos_t_ in + let _v : 'tv_iso_nest_start_ = +# 1874 "parser_cocci_menhir.mly" + ( Common.Left t ) +# 16170 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -10968,74 +16178,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pt; - MenhirLib.EngineTypes.startp = _startpos_pt_; - MenhirLib.EngineTypes.endp = _endpos_pt_; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = rp; - MenhirLib.EngineTypes.startp = _startpos_rp_; - MenhirLib.EngineTypes.endp = _endpos_rp_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lp; - MenhirLib.EngineTypes.startp = _startpos_lp_; - MenhirLib.EngineTypes.endp = _endpos_lp_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = id; - MenhirLib.EngineTypes.startp = _startpos_id_; - MenhirLib.EngineTypes.endp = _endpos_id_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let pt : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 11006 "parser_cocci_menhir.ml" - ) = Obj.magic pt in - let rp : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 11011 "parser_cocci_menhir.ml" - ) = Obj.magic rp in - let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in - let lp : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 11017 "parser_cocci_menhir.ml" - ) = Obj.magic lp in - let id : 'tv_func_ident = Obj.magic id in - let t : 'tv_ctype = Obj.magic t in - let _startpos = _startpos_t_ in - let _endpos = _endpos_pt_ in - let _v : 'tv_funproto = let s = - -# 39 "standard.mly" - ( None ) -# 11027 "parser_cocci_menhir.ml" - - in - -# 746 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.UnInit - (s, - Ast0.wrap - (Ast0.FunctionType(Some t, - P.clt2mcode "(" lp, d, P.clt2mcode ")" rp)), - id, P.clt2mcode ";" pt)) ) -# 11039 "parser_cocci_menhir.ml" + let t : 'tv_nest_start = Obj.magic t in + let _startpos = _startpos__1_ in + let _endpos = _endpos_t_ in + let _v : 'tv_iso_nest_start_ = +# 1875 "parser_cocci_menhir.mly" + ( Common.Right t ) +# 16198 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11047,81 +16206,51 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pt; - MenhirLib.EngineTypes.startp = _startpos_pt_; - MenhirLib.EngineTypes.endp = _endpos_pt_; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = rp; - MenhirLib.EngineTypes.startp = _startpos_rp_; - MenhirLib.EngineTypes.endp = _endpos_rp_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lp; - MenhirLib.EngineTypes.startp = _startpos_lp_; - MenhirLib.EngineTypes.endp = _endpos_lp_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = id; - MenhirLib.EngineTypes.startp = _startpos_id_; - MenhirLib.EngineTypes.endp = _endpos_id_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let pt : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 11090 "parser_cocci_menhir.ml" - ) = Obj.magic pt in - let rp : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 11095 "parser_cocci_menhir.ml" - ) = Obj.magic rp in - let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in - let lp : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 11101 "parser_cocci_menhir.ml" - ) = Obj.magic lp in - let id : 'tv_func_ident = Obj.magic id in - let t : 'tv_ctype = Obj.magic t in - let x0 : 'tv_storage = Obj.magic x0 in - let _startpos = _startpos_x0_ in - let _endpos = _endpos_pt_ in - let _v : 'tv_funproto = let s = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 11113 "parser_cocci_menhir.ml" - - in - -# 746 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.UnInit - (s, - Ast0.wrap - (Ast0.FunctionType(Some t, - P.clt2mcode "(" lp, d, P.clt2mcode ")" rp)), - id, P.clt2mcode ";" pt)) ) -# 11125 "parser_cocci_menhir.ml" + let t : 'tv_single_statement = Obj.magic t in + let _startpos = _startpos__1_ in + let _endpos = _endpos_t_ in + let _v : 'tv_iso_single_statement_ = +# 1874 "parser_cocci_menhir.mly" + ( Common.Left t ) +# 16226 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let t : 'tv_single_statement = Obj.magic t in + let _startpos = _startpos__1_ in + let _endpos = _endpos_t_ in + let _v : 'tv_iso_single_statement_ = +# 1875 "parser_cocci_menhir.mly" + ( Common.Right t ) +# 16254 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11133,79 +16262,37 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pt; - MenhirLib.EngineTypes.startp = _startpos_pt_; - MenhirLib.EngineTypes.endp = _endpos_pt_; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = rp; - MenhirLib.EngineTypes.startp = _startpos_rp_; - MenhirLib.EngineTypes.endp = _endpos_rp_; + MenhirLib.EngineTypes.semv = el; + MenhirLib.EngineTypes.startp = _startpos_el_; + MenhirLib.EngineTypes.endp = _endpos_el_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lp; - MenhirLib.EngineTypes.startp = _startpos_lp_; - MenhirLib.EngineTypes.endp = _endpos_lp_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = id; - MenhirLib.EngineTypes.startp = _startpos_id_; - MenhirLib.EngineTypes.endp = _endpos_id_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; } = _menhir_stack in - let pt : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 11171 "parser_cocci_menhir.ml" - ) = Obj.magic pt in - let rp : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 11176 "parser_cocci_menhir.ml" - ) = Obj.magic rp in - let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in - let lp : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 11182 "parser_cocci_menhir.ml" - ) = Obj.magic lp in - let id : 'tv_func_ident = Obj.magic id in - let t : ( -# 50 "parser_cocci_menhir.mly" - (Data.clt) -# 11188 "parser_cocci_menhir.ml" - ) = Obj.magic t in - let _startpos = _startpos_t_ in - let _endpos = _endpos_pt_ in - let _v : 'tv_funproto = let s = - -# 39 "standard.mly" - ( None ) -# 11196 "parser_cocci_menhir.ml" - - in - -# 755 "parser_cocci_menhir.mly" - ( let t = Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" t])) in - Ast0.wrap - (Ast0.UnInit - (s, - Ast0.wrap - (Ast0.FunctionType(Some t, - P.clt2mcode "(" lp, d, P.clt2mcode ")" rp)), - id, P.clt2mcode ";" pt)) ) -# 11209 "parser_cocci_menhir.ml" + let el : 'tv_list_iso_dexpr__ = Obj.magic el in + let e1 : 'tv_dexpr = Obj.magic e1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : ( +# 162 "parser_cocci_menhir.mly" + (Ast0_cocci.anything list list) +# 16292 "parser_cocci_menhir.ml" + ) = +# 1846 "parser_cocci_menhir.mly" + ( P.iso_adjust (function x -> Ast0.ExprTag x) e1 el ) +# 16296 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11217,86 +16304,37 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pt; - MenhirLib.EngineTypes.startp = _startpos_pt_; - MenhirLib.EngineTypes.endp = _endpos_pt_; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = rp; - MenhirLib.EngineTypes.startp = _startpos_rp_; - MenhirLib.EngineTypes.endp = _endpos_rp_; + MenhirLib.EngineTypes.semv = el; + MenhirLib.EngineTypes.startp = _startpos_el_; + MenhirLib.EngineTypes.endp = _endpos_el_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lp; - MenhirLib.EngineTypes.startp = _startpos_lp_; - MenhirLib.EngineTypes.endp = _endpos_lp_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = id; - MenhirLib.EngineTypes.startp = _startpos_id_; - MenhirLib.EngineTypes.endp = _endpos_id_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; } = _menhir_stack in - let pt : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 11260 "parser_cocci_menhir.ml" - ) = Obj.magic pt in - let rp : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 11265 "parser_cocci_menhir.ml" - ) = Obj.magic rp in - let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in - let lp : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 11271 "parser_cocci_menhir.ml" - ) = Obj.magic lp in - let id : 'tv_func_ident = Obj.magic id in - let t : ( -# 50 "parser_cocci_menhir.mly" - (Data.clt) -# 11277 "parser_cocci_menhir.ml" - ) = Obj.magic t in - let x0 : 'tv_storage = Obj.magic x0 in - let _startpos = _startpos_x0_ in - let _endpos = _endpos_pt_ in - let _v : 'tv_funproto = let s = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 11287 "parser_cocci_menhir.ml" - - in - -# 755 "parser_cocci_menhir.mly" - ( let t = Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" t])) in - Ast0.wrap - (Ast0.UnInit - (s, - Ast0.wrap - (Ast0.FunctionType(Some t, - P.clt2mcode "(" lp, d, P.clt2mcode ")" rp)), - id, P.clt2mcode ";" pt)) ) -# 11300 "parser_cocci_menhir.ml" + let el : 'tv_list_iso_dexpr__ = Obj.magic el in + let e1 : 'tv_dexpr = Obj.magic e1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : ( +# 162 "parser_cocci_menhir.mly" + (Ast0_cocci.anything list list) +# 16334 "parser_cocci_menhir.ml" + ) = +# 1848 "parser_cocci_menhir.mly" + ( P.iso_adjust (function x -> Ast0.ArgExprTag x) e1 el ) +# 16338 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11308,31 +16346,37 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = r0; - MenhirLib.EngineTypes.startp = _startpos_r0_; - MenhirLib.EngineTypes.endp = _endpos_r0_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = el; + MenhirLib.EngineTypes.startp = _startpos_el_; + MenhirLib.EngineTypes.endp = _endpos_el_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; } = _menhir_stack in - let r0 : ( -# 51 "parser_cocci_menhir.mly" - (Data.clt) -# 11321 "parser_cocci_menhir.ml" - ) = Obj.magic r0 in - let _startpos = _startpos_r0_ in - let _endpos = _endpos_r0_ in - let _v : 'tv_generic_ctype = let q = - let r = r0 in - -# 589 "parser_cocci_menhir.mly" - ( function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,x)) ) -# 11330 "parser_cocci_menhir.ml" - - in - -# 513 "parser_cocci_menhir.mly" - ( q None ) -# 11336 "parser_cocci_menhir.ml" + let el : 'tv_list_iso_dexpr__ = Obj.magic el in + let e1 : 'tv_dexpr = Obj.magic e1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : ( +# 162 "parser_cocci_menhir.mly" + (Ast0_cocci.anything list list) +# 16376 "parser_cocci_menhir.ml" + ) = +# 1850 "parser_cocci_menhir.mly" + ( P.iso_adjust (function x -> Ast0.TestExprTag x) e1 el ) +# 16380 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11344,31 +16388,37 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = r0; - MenhirLib.EngineTypes.startp = _startpos_r0_; - MenhirLib.EngineTypes.endp = _endpos_r0_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = sl; + MenhirLib.EngineTypes.startp = _startpos_sl_; + MenhirLib.EngineTypes.endp = _endpos_sl_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = s1; + MenhirLib.EngineTypes.startp = _startpos_s1_; + MenhirLib.EngineTypes.endp = _endpos_s1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; } = _menhir_stack in - let r0 : ( -# 51 "parser_cocci_menhir.mly" - (Data.clt) -# 11357 "parser_cocci_menhir.ml" - ) = Obj.magic r0 in - let _startpos = _startpos_r0_ in - let _endpos = _endpos_r0_ in - let _v : 'tv_generic_ctype = let q = - let r = r0 in - -# 591 "parser_cocci_menhir.mly" - ( function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,x)) ) -# 11366 "parser_cocci_menhir.ml" - - in - -# 513 "parser_cocci_menhir.mly" - ( q None ) -# 11372 "parser_cocci_menhir.ml" + let sl : 'tv_list_iso_single_statement__ = Obj.magic sl in + let s1 : 'tv_single_statement = Obj.magic s1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : ( +# 162 "parser_cocci_menhir.mly" + (Ast0_cocci.anything list list) +# 16418 "parser_cocci_menhir.ml" + ) = +# 1852 "parser_cocci_menhir.mly" + ( P.iso_adjust (function x -> Ast0.StmtTag x) s1 sl ) +# 16422 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11380,19 +16430,37 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = tl; + MenhirLib.EngineTypes.startp = _startpos_tl_; + MenhirLib.EngineTypes.endp = _endpos_tl_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = t1; + MenhirLib.EngineTypes.startp = _startpos_t1_; + MenhirLib.EngineTypes.endp = _endpos_t1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; } = _menhir_stack in - let _1 : 'tv_generic_ctype_full = Obj.magic _1 in + let tl : 'tv_list_iso_ctype__ = Obj.magic tl in + let t1 : 'tv_ctype = Obj.magic t1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_generic_ctype = -# 514 "parser_cocci_menhir.mly" - ( _1 ) -# 11396 "parser_cocci_menhir.ml" + let _endpos = _endpos__4_ in + let _v : ( +# 162 "parser_cocci_menhir.mly" + (Ast0_cocci.anything list list) +# 16460 "parser_cocci_menhir.ml" + ) = +# 1854 "parser_cocci_menhir.mly" + ( P.iso_adjust (function x -> Ast0.TypeCTag x) t1 tl ) +# 16464 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11404,49 +16472,37 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = r00; - MenhirLib.EngineTypes.startp = _startpos_r00_; - MenhirLib.EngineTypes.endp = _endpos_r00_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = el; + MenhirLib.EngineTypes.startp = _startpos_el_; + MenhirLib.EngineTypes.endp = _endpos_el_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; } = _menhir_stack in - let ty : ( -# 49 "parser_cocci_menhir.mly" - (Data.clt) -# 11422 "parser_cocci_menhir.ml" - ) = Obj.magic ty in - let r00 : ( -# 51 "parser_cocci_menhir.mly" - (Data.clt) -# 11427 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let _startpos = _startpos_r00_ in - let _endpos = _endpos_ty_ in - let _v : 'tv_generic_ctype_full = let q = - let r0 = r00 in - let s = - let r = r0 in - -# 589 "parser_cocci_menhir.mly" - ( function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,x)) ) -# 11438 "parser_cocci_menhir.ml" - - in - -# 594 "parser_cocci_menhir.mly" - ( function x -> s (Some x) ) -# 11444 "parser_cocci_menhir.ml" - - in - -# 466 "parser_cocci_menhir.mly" - ( q (Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty]))) ) -# 11450 "parser_cocci_menhir.ml" + let el : 'tv_list_iso_nest_start__ = Obj.magic el in + let e1 : 'tv_nest_start = Obj.magic e1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : ( +# 162 "parser_cocci_menhir.mly" + (Ast0_cocci.anything list list) +# 16502 "parser_cocci_menhir.ml" + ) = +# 1856 "parser_cocci_menhir.mly" + ( P.iso_adjust (function x -> Ast0.DotsStmtTag x) e1 el ) +# 16506 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11458,49 +16514,50 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = r00; - MenhirLib.EngineTypes.startp = _startpos_r00_; - MenhirLib.EngineTypes.endp = _endpos_r00_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = dl; + MenhirLib.EngineTypes.startp = _startpos_dl_; + MenhirLib.EngineTypes.endp = _endpos_dl_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = d1; + MenhirLib.EngineTypes.startp = _startpos_d1_; + MenhirLib.EngineTypes.endp = _endpos_d1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; } = _menhir_stack in - let ty : ( -# 49 "parser_cocci_menhir.mly" - (Data.clt) -# 11476 "parser_cocci_menhir.ml" - ) = Obj.magic ty in - let r00 : ( -# 51 "parser_cocci_menhir.mly" - (Data.clt) -# 11481 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let _startpos = _startpos_r00_ in - let _endpos = _endpos_ty_ in - let _v : 'tv_generic_ctype_full = let q = - let r0 = r00 in - let s = - let r = r0 in - -# 591 "parser_cocci_menhir.mly" - ( function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,x)) ) -# 11492 "parser_cocci_menhir.ml" - - in - -# 594 "parser_cocci_menhir.mly" - ( function x -> s (Some x) ) -# 11498 "parser_cocci_menhir.ml" - - in - -# 466 "parser_cocci_menhir.mly" - ( q (Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty]))) ) -# 11504 "parser_cocci_menhir.ml" + let dl : 'tv_list_iso_decl_var__ = Obj.magic dl in + let d1 : 'tv_decl_var = Obj.magic d1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : ( +# 162 "parser_cocci_menhir.mly" + (Ast0_cocci.anything list list) +# 16544 "parser_cocci_menhir.ml" + ) = +# 1858 "parser_cocci_menhir.mly" + ( let check_one = function + [x] -> x + | _ -> + raise + (Semantic_cocci.Semantic + "only one variable per declaration in an isomorphism rule") in + let d1 = check_one d1 in + let dl = + List.map + (function + Common.Left x -> Common.Left(check_one x) + | Common.Right x -> Common.Right(check_one x)) + dl in + P.iso_adjust (function x -> Ast0.DeclTag x) d1 dl ) +# 16561 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11513,29 +16570,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let ty : ( -# 49 "parser_cocci_menhir.mly" - (Data.clt) -# 11525 "parser_cocci_menhir.ml" - ) = Obj.magic ty in - let _startpos = _startpos_ty_ in - let _endpos = _endpos_ty_ in - let _v : 'tv_generic_ctype_full = let q = - -# 595 "parser_cocci_menhir.mly" - ( function x -> x ) -# 11533 "parser_cocci_menhir.ml" - - in - -# 466 "parser_cocci_menhir.mly" - ( q (Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty]))) ) -# 11539 "parser_cocci_menhir.ml" + let m : 'tv_metadec = Obj.magic m in + let _startpos = _startpos_m_ in + let _endpos = _endpos_m_ in + let _v : ( +# 165 "parser_cocci_menhir.mly" + ((Ast_cocci.metavar,Ast_cocci.metavar) Common.either list) +# 16585 "parser_cocci_menhir.ml" + ) = +# 182 "parser_cocci_menhir.mly" + ( m "" ) +# 16589 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11547,49 +16597,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = r00; - MenhirLib.EngineTypes.startp = _startpos_r00_; - MenhirLib.EngineTypes.endp = _endpos_r00_; + MenhirLib.EngineTypes.semv = nm; + MenhirLib.EngineTypes.startp = _startpos_nm_; + MenhirLib.EngineTypes.endp = _endpos_nm_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let ty : ( -# 49 "parser_cocci_menhir.mly" - (Data.clt) -# 11565 "parser_cocci_menhir.ml" - ) = Obj.magic ty in - let r00 : ( -# 51 "parser_cocci_menhir.mly" - (Data.clt) -# 11570 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let _startpos = _startpos_r00_ in - let _endpos = _endpos_ty_ in - let _v : 'tv_generic_ctype_full = let q = - let r0 = r00 in - let s = - let r = r0 in - -# 589 "parser_cocci_menhir.mly" - ( function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,x)) ) -# 11581 "parser_cocci_menhir.ml" - - in - -# 594 "parser_cocci_menhir.mly" - ( function x -> s (Some x) ) -# 11587 "parser_cocci_menhir.ml" - - in - -# 468 "parser_cocci_menhir.mly" - ( q (Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])))) -# 11593 "parser_cocci_menhir.ml" + let nm : 'tv_pure_ident = Obj.magic nm in + let _startpos = _startpos_nm_ in + let _endpos = _endpos__2_ in + let _v : ( +# 149 "parser_cocci_menhir.mly" + (Ast_cocci.rulename) +# 16617 "parser_cocci_menhir.ml" + ) = +# 197 "parser_cocci_menhir.mly" + ( P.make_iso_rule_name_result (P.id2name nm) ) +# 16621 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11601,49 +16629,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = r00; - MenhirLib.EngineTypes.startp = _startpos_r00_; - MenhirLib.EngineTypes.endp = _endpos_r00_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let ty : ( -# 49 "parser_cocci_menhir.mly" - (Data.clt) -# 11619 "parser_cocci_menhir.ml" - ) = Obj.magic ty in - let r00 : ( -# 51 "parser_cocci_menhir.mly" - (Data.clt) -# 11624 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let _startpos = _startpos_r00_ in - let _endpos = _endpos_ty_ in - let _v : 'tv_generic_ctype_full = let q = - let r0 = r00 in - let s = - let r = r0 in - -# 591 "parser_cocci_menhir.mly" - ( function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,x)) ) -# 11635 "parser_cocci_menhir.ml" - - in - -# 594 "parser_cocci_menhir.mly" - ( function x -> s (Some x) ) -# 11641 "parser_cocci_menhir.ml" - - in - -# 468 "parser_cocci_menhir.mly" - ( q (Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])))) -# 11647 "parser_cocci_menhir.ml" + let _1 : ( +# 59 "parser_cocci_menhir.mly" + (string * Data.clt) +# 16642 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_iter_ident = +# 1531 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) ) +# 16649 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11656,29 +16658,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let ty : ( -# 49 "parser_cocci_menhir.mly" - (Data.clt) -# 11668 "parser_cocci_menhir.ml" - ) = Obj.magic ty in - let _startpos = _startpos_ty_ in - let _endpos = _endpos_ty_ in - let _v : 'tv_generic_ctype_full = let q = - -# 595 "parser_cocci_menhir.mly" - ( function x -> x ) -# 11676 "parser_cocci_menhir.ml" - - in - -# 468 "parser_cocci_menhir.mly" - ( q (Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])))) -# 11682 "parser_cocci_menhir.ml" + let _1 : ( +# 62 "parser_cocci_menhir.mly" + (Parse_aux.idinfo) +# 16670 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_iter_ident = +# 1533 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,clt) = _1 in + Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,pure)) ) +# 16678 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11687,52 +16683,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos; MenhirLib.EngineTypes.next = _menhir_stack; }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = r00; - MenhirLib.EngineTypes.startp = _startpos_r00_; - MenhirLib.EngineTypes.endp = _endpos_r00_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let ty : ( -# 49 "parser_cocci_menhir.mly" - (Data.clt) -# 11708 "parser_cocci_menhir.ml" - ) = Obj.magic ty in - let r00 : ( -# 51 "parser_cocci_menhir.mly" - (Data.clt) -# 11713 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let _startpos = _startpos_r00_ in - let _endpos = _endpos_ty_ in - let _v : 'tv_generic_ctype_full = let q = - let r0 = r00 in - let s = - let r = r0 in - -# 589 "parser_cocci_menhir.mly" - ( function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,x)) ) -# 11724 "parser_cocci_menhir.ml" - - in - -# 594 "parser_cocci_menhir.mly" - ( function x -> s (Some x) ) -# 11730 "parser_cocci_menhir.ml" - - in - -# 470 "parser_cocci_menhir.mly" - ( q (Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty]))) ) -# 11736 "parser_cocci_menhir.ml" + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_list_TMul_ = +# 114 "standard.mly" + ( [] ) +# 16695 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11744,49 +16703,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = r00; - MenhirLib.EngineTypes.startp = _startpos_r00_; - MenhirLib.EngineTypes.endp = _endpos_r00_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let ty : ( -# 49 "parser_cocci_menhir.mly" - (Data.clt) -# 11762 "parser_cocci_menhir.ml" - ) = Obj.magic ty in - let r00 : ( -# 51 "parser_cocci_menhir.mly" - (Data.clt) -# 11767 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let _startpos = _startpos_r00_ in - let _endpos = _endpos_ty_ in - let _v : 'tv_generic_ctype_full = let q = - let r0 = r00 in - let s = - let r = r0 in - -# 591 "parser_cocci_menhir.mly" - ( function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,x)) ) -# 11778 "parser_cocci_menhir.ml" - - in - -# 594 "parser_cocci_menhir.mly" - ( function x -> s (Some x) ) -# 11784 "parser_cocci_menhir.ml" - - in - -# 470 "parser_cocci_menhir.mly" - ( q (Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty]))) ) -# 11790 "parser_cocci_menhir.ml" + let xs : 'tv_list_TMul_ = Obj.magic xs in + let x : ( +# 99 "parser_cocci_menhir.mly" + (Data.clt) +# 16722 "parser_cocci_menhir.ml" + ) = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_TMul_ = +# 116 "standard.mly" + ( x :: xs ) +# 16729 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11797,31 +16736,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let ty : ( -# 49 "parser_cocci_menhir.mly" - (Data.clt) -# 11811 "parser_cocci_menhir.ml" - ) = Obj.magic ty in - let _startpos = _startpos_ty_ in - let _endpos = _endpos_ty_ in - let _v : 'tv_generic_ctype_full = let q = - -# 595 "parser_cocci_menhir.mly" - ( function x -> x ) -# 11819 "parser_cocci_menhir.ml" - - in - -# 470 "parser_cocci_menhir.mly" - ( q (Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty]))) ) -# 11825 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_list_array_dec_ = +# 114 "standard.mly" + ( [] ) +# 16746 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11833,23 +16754,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let t : ( -# 49 "parser_cocci_menhir.mly" - (Data.clt) -# 11846 "parser_cocci_menhir.ml" - ) = Obj.magic t in - let _startpos = _startpos_t_ in - let _endpos = _endpos_t_ in - let _v : 'tv_generic_ctype_full = -# 472 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.DoubleType,[P.clt2mcode "double" t])) ) -# 11853 "parser_cocci_menhir.ml" + let xs : 'tv_list_array_dec_ = Obj.magic xs in + let x : 'tv_array_dec = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_array_dec_ = +# 116 "standard.mly" + ( x :: xs ) +# 16776 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11860,24 +16783,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let t : ( -# 49 "parser_cocci_menhir.mly" - (Data.clt) -# 11874 "parser_cocci_menhir.ml" - ) = Obj.magic t in - let _startpos = _startpos_t_ in - let _endpos = _endpos_t_ in - let _v : 'tv_generic_ctype_full = -# 474 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.BaseType(Ast.FloatType,[P.clt2mcode "float" t])) ) -# 11881 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_list_case_line_ = +# 114 "standard.mly" + ( [] ) +# 16793 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11889,49 +16801,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = r00; - MenhirLib.EngineTypes.startp = _startpos_r00_; - MenhirLib.EngineTypes.endp = _endpos_r00_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let ty : ( -# 49 "parser_cocci_menhir.mly" - (Data.clt) -# 11907 "parser_cocci_menhir.ml" - ) = Obj.magic ty in - let r00 : ( -# 51 "parser_cocci_menhir.mly" - (Data.clt) -# 11912 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let _startpos = _startpos_r00_ in - let _endpos = _endpos_ty_ in - let _v : 'tv_generic_ctype_full = let q = - let r0 = r00 in - let s = - let r = r0 in - -# 589 "parser_cocci_menhir.mly" - ( function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,x)) ) -# 11923 "parser_cocci_menhir.ml" - - in - -# 594 "parser_cocci_menhir.mly" - ( function x -> s (Some x) ) -# 11929 "parser_cocci_menhir.ml" - - in - -# 476 "parser_cocci_menhir.mly" - ( q (Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty]))) ) -# 11935 "parser_cocci_menhir.ml" + let xs : 'tv_list_case_line_ = Obj.magic xs in + let x : 'tv_case_line = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_case_line_ = +# 116 "standard.mly" + ( x :: xs ) +# 16823 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11942,50 +16830,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = r00; - MenhirLib.EngineTypes.startp = _startpos_r00_; - MenhirLib.EngineTypes.endp = _endpos_r00_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let ty : ( -# 49 "parser_cocci_menhir.mly" - (Data.clt) -# 11961 "parser_cocci_menhir.ml" - ) = Obj.magic ty in - let r00 : ( -# 51 "parser_cocci_menhir.mly" - (Data.clt) -# 11966 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let _startpos = _startpos_r00_ in - let _endpos = _endpos_ty_ in - let _v : 'tv_generic_ctype_full = let q = - let r0 = r00 in - let s = - let r = r0 in - -# 591 "parser_cocci_menhir.mly" - ( function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,x)) ) -# 11977 "parser_cocci_menhir.ml" - - in - -# 594 "parser_cocci_menhir.mly" - ( function x -> s (Some x) ) -# 11983 "parser_cocci_menhir.ml" - - in - -# 476 "parser_cocci_menhir.mly" - ( q (Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty]))) ) -# 11989 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_list_comma_decls_TEllipsis_decl__ = +# 114 "standard.mly" + ( [] ) +# 16840 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -11997,30 +16848,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let ty : ( -# 49 "parser_cocci_menhir.mly" - (Data.clt) -# 12010 "parser_cocci_menhir.ml" - ) = Obj.magic ty in - let _startpos = _startpos_ty_ in - let _endpos = _endpos_ty_ in - let _v : 'tv_generic_ctype_full = let q = - -# 595 "parser_cocci_menhir.mly" - ( function x -> x ) -# 12018 "parser_cocci_menhir.ml" - - in - -# 476 "parser_cocci_menhir.mly" - ( q (Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty]))) ) -# 12024 "parser_cocci_menhir.ml" + let xs : 'tv_list_comma_decls_TEllipsis_decl__ = Obj.magic xs in + let x : 'tv_comma_decls_TEllipsis_decl_ = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_comma_decls_TEllipsis_decl__ = +# 116 "standard.mly" + ( x :: xs ) +# 16870 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12031,63 +16877,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = ty1; - MenhirLib.EngineTypes.startp = _startpos_ty1_; - MenhirLib.EngineTypes.endp = _endpos_ty1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = r00; - MenhirLib.EngineTypes.startp = _startpos_r00_; - MenhirLib.EngineTypes.endp = _endpos_r00_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let ty1 : ( -# 49 "parser_cocci_menhir.mly" - (Data.clt) -# 12055 "parser_cocci_menhir.ml" - ) = Obj.magic ty1 in - let ty : ( -# 49 "parser_cocci_menhir.mly" - (Data.clt) -# 12060 "parser_cocci_menhir.ml" - ) = Obj.magic ty in - let r00 : ( -# 51 "parser_cocci_menhir.mly" - (Data.clt) -# 12065 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let _startpos = _startpos_r00_ in - let _endpos = _endpos_ty1_ in - let _v : 'tv_generic_ctype_full = let q = - let r0 = r00 in - let s = - let r = r0 in - -# 589 "parser_cocci_menhir.mly" - ( function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,x)) ) -# 12076 "parser_cocci_menhir.ml" - - in - -# 594 "parser_cocci_menhir.mly" - ( function x -> s (Some x) ) -# 12082 "parser_cocci_menhir.ml" - - in - -# 478 "parser_cocci_menhir.mly" - ( q (Ast0.wrap - (Ast0.BaseType - (Ast.LongLongType, - [P.clt2mcode "long" ty;P.clt2mcode "long" ty1]))) ) -# 12091 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_list_comma_decls_TEllipsis_name_opt_decl__ = +# 114 "standard.mly" + ( [] ) +# 16887 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12099,62 +16895,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = ty1; - MenhirLib.EngineTypes.startp = _startpos_ty1_; - MenhirLib.EngineTypes.endp = _endpos_ty1_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = r00; - MenhirLib.EngineTypes.startp = _startpos_r00_; - MenhirLib.EngineTypes.endp = _endpos_r00_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let ty1 : ( -# 49 "parser_cocci_menhir.mly" - (Data.clt) -# 12122 "parser_cocci_menhir.ml" - ) = Obj.magic ty1 in - let ty : ( -# 49 "parser_cocci_menhir.mly" - (Data.clt) -# 12127 "parser_cocci_menhir.ml" - ) = Obj.magic ty in - let r00 : ( -# 51 "parser_cocci_menhir.mly" - (Data.clt) -# 12132 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let _startpos = _startpos_r00_ in - let _endpos = _endpos_ty1_ in - let _v : 'tv_generic_ctype_full = let q = - let r0 = r00 in - let s = - let r = r0 in - -# 591 "parser_cocci_menhir.mly" - ( function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,x)) ) -# 12143 "parser_cocci_menhir.ml" - - in - -# 594 "parser_cocci_menhir.mly" - ( function x -> s (Some x) ) -# 12149 "parser_cocci_menhir.ml" - - in - -# 478 "parser_cocci_menhir.mly" - ( q (Ast0.wrap - (Ast0.BaseType - (Ast.LongLongType, - [P.clt2mcode "long" ty;P.clt2mcode "long" ty1]))) ) -# 12158 "parser_cocci_menhir.ml" + let xs : 'tv_list_comma_decls_TEllipsis_name_opt_decl__ = Obj.magic xs in + let x : 'tv_comma_decls_TEllipsis_name_opt_decl_ = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_comma_decls_TEllipsis_name_opt_decl__ = +# 116 "standard.mly" + ( x :: xs ) +# 16917 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12165,44 +16924,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = ty1; - MenhirLib.EngineTypes.startp = _startpos_ty1_; - MenhirLib.EngineTypes.endp = _endpos_ty1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let ty1 : ( -# 49 "parser_cocci_menhir.mly" - (Data.clt) -# 12184 "parser_cocci_menhir.ml" - ) = Obj.magic ty1 in - let ty : ( -# 49 "parser_cocci_menhir.mly" - (Data.clt) -# 12189 "parser_cocci_menhir.ml" - ) = Obj.magic ty in - let _startpos = _startpos_ty_ in - let _endpos = _endpos_ty1_ in - let _v : 'tv_generic_ctype_full = let q = - -# 595 "parser_cocci_menhir.mly" - ( function x -> x ) -# 12197 "parser_cocci_menhir.ml" - - in - -# 478 "parser_cocci_menhir.mly" - ( q (Ast0.wrap - (Ast0.BaseType - (Ast.LongLongType, - [P.clt2mcode "long" ty;P.clt2mcode "long" ty1]))) ) -# 12206 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_list_designator_ = +# 114 "standard.mly" + ( [] ) +# 16934 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12214,29 +16942,42 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = s; - MenhirLib.EngineTypes.startp = _startpos_s_; - MenhirLib.EngineTypes.endp = _endpos_s_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let i : 'tv_ident = Obj.magic i in - let s : ( -# 50 "parser_cocci_menhir.mly" - (Data.clt) -# 12233 "parser_cocci_menhir.ml" - ) = Obj.magic s in - let _startpos = _startpos_s_ in - let _endpos = _endpos_i_ in - let _v : 'tv_generic_ctype_full = -# 483 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)) ) -# 12240 "parser_cocci_menhir.ml" + let xs : 'tv_list_designator_ = Obj.magic xs in + let x : 'tv_designator = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_designator_ = +# 116 "standard.mly" + ( x :: xs ) +# 16964 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_list_dp_comma_args_TEllipsis__ = +# 114 "standard.mly" + ( [] ) +# 16981 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12248,25 +16989,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = s; - MenhirLib.EngineTypes.startp = _startpos_s_; - MenhirLib.EngineTypes.endp = _endpos_s_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let i : 'tv_ident = Obj.magic i in - let s : 'tv_struct_or_union = Obj.magic s in - let _startpos = _startpos_s_ in - let _endpos = _endpos_i_ in - let _v : 'tv_generic_ctype_full = -# 485 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.StructUnionName(s, Some i)) ) -# 12270 "parser_cocci_menhir.ml" + let xs : 'tv_list_dp_comma_args_TEllipsis__ = Obj.magic xs in + let x : 'tv_dp_comma_args_TEllipsis_ = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_dp_comma_args_TEllipsis__ = +# 116 "standard.mly" + ( x :: xs ) +# 17011 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12277,57 +17018,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = r; - MenhirLib.EngineTypes.startp = _startpos_r_; - MenhirLib.EngineTypes.endp = _endpos_r_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = l; - MenhirLib.EngineTypes.startp = _startpos_l_; - MenhirLib.EngineTypes.endp = _endpos_l_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = s; - MenhirLib.EngineTypes.startp = _startpos_s_; - MenhirLib.EngineTypes.endp = _endpos_s_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - } = _menhir_stack in - let r : ( -# 101 "parser_cocci_menhir.mly" - (Data.clt) -# 12306 "parser_cocci_menhir.ml" - ) = Obj.magic r in - let d : 'tv_struct_decl_list = Obj.magic d in - let l : ( -# 101 "parser_cocci_menhir.mly" - (Data.clt) -# 12312 "parser_cocci_menhir.ml" - ) = Obj.magic l in - let s : 'tv_struct_or_union = Obj.magic s in - let _startpos = _startpos_s_ in - let _endpos = _endpos_r_ in - let _v : 'tv_generic_ctype_full = let i = - -# 39 "standard.mly" - ( None ) -# 12321 "parser_cocci_menhir.ml" - - in - -# 488 "parser_cocci_menhir.mly" - ( (if i = None && !Data.in_iso - then failwith "structures must be named in the iso file"); - Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)), - P.clt2mcode "{" l, - d, P.clt2mcode "}" r)) ) -# 12331 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_list_incl_ = +# 114 "standard.mly" + ( [] ) +# 17028 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12339,63 +17036,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = r; - MenhirLib.EngineTypes.startp = _startpos_r_; - MenhirLib.EngineTypes.endp = _endpos_r_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = l; - MenhirLib.EngineTypes.startp = _startpos_l_; - MenhirLib.EngineTypes.endp = _endpos_l_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = s; - MenhirLib.EngineTypes.startp = _startpos_s_; - MenhirLib.EngineTypes.endp = _endpos_s_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let r : ( -# 101 "parser_cocci_menhir.mly" - (Data.clt) -# 12372 "parser_cocci_menhir.ml" - ) = Obj.magic r in - let d : 'tv_struct_decl_list = Obj.magic d in - let l : ( -# 101 "parser_cocci_menhir.mly" - (Data.clt) -# 12378 "parser_cocci_menhir.ml" - ) = Obj.magic l in - let x0 : 'tv_ident = Obj.magic x0 in - let s : 'tv_struct_or_union = Obj.magic s in - let _startpos = _startpos_s_ in - let _endpos = _endpos_r_ in - let _v : 'tv_generic_ctype_full = let i = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 12389 "parser_cocci_menhir.ml" - - in - -# 488 "parser_cocci_menhir.mly" - ( (if i = None && !Data.in_iso - then failwith "structures must be named in the iso file"); - Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)), - P.clt2mcode "{" l, - d, P.clt2mcode "}" r)) ) -# 12399 "parser_cocci_menhir.ml" + let xs : 'tv_list_incl_ = Obj.magic xs in + let x : 'tv_incl = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_incl_ = +# 116 "standard.mly" + ( x :: xs ) +# 17058 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12406,54 +17065,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = r; - MenhirLib.EngineTypes.startp = _startpos_r_; - MenhirLib.EngineTypes.endp = _endpos_r_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = l; - MenhirLib.EngineTypes.startp = _startpos_l_; - MenhirLib.EngineTypes.endp = _endpos_l_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = s; - MenhirLib.EngineTypes.startp = _startpos_s_; - MenhirLib.EngineTypes.endp = _endpos_s_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - } = _menhir_stack in - let r : ( -# 101 "parser_cocci_menhir.mly" - (Data.clt) -# 12435 "parser_cocci_menhir.ml" - ) = Obj.magic r in - let d : 'tv_struct_decl_list = Obj.magic d in - let l : ( -# 101 "parser_cocci_menhir.mly" - (Data.clt) -# 12441 "parser_cocci_menhir.ml" - ) = Obj.magic l in - let s : ( -# 64 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 12446 "parser_cocci_menhir.ml" - ) = Obj.magic s in - let _startpos = _startpos_s_ in - let _endpos = _endpos_r_ in - let _v : 'tv_generic_ctype_full = -# 494 "parser_cocci_menhir.mly" - ( let (nm,pure,clt) = s in - let ty = - Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) in - Ast0.wrap - (Ast0.StructUnionDef(ty,P.clt2mcode "{" l,d,P.clt2mcode "}" r)) ) -# 12457 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_list_iso_ctype__ = +# 114 "standard.mly" + ( [] ) +# 17075 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12465,42 +17083,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = p; - MenhirLib.EngineTypes.startp = _startpos_p_; - MenhirLib.EngineTypes.endp = _endpos_p_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = r; - MenhirLib.EngineTypes.startp = _startpos_r_; - MenhirLib.EngineTypes.endp = _endpos_r_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let p : ( -# 59 "parser_cocci_menhir.mly" - (string * Data.clt) -# 12487 "parser_cocci_menhir.ml" - ) = Obj.magic p in - let r : ( -# 47 "parser_cocci_menhir.mly" - (string) -# 12492 "parser_cocci_menhir.ml" - ) = Obj.magic r in - let _startpos = _startpos_r_ in - let _endpos = _endpos_p_ in - let _v : 'tv_generic_ctype_full = -# 500 "parser_cocci_menhir.mly" - ( let nm = (r,P.id2name p) in - (* this is only possible when we are in a metavar decl. Otherwise, - it will be represented already as a MetaType *) - let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in - Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p), - Ast0.Impure (*will be ignored*))) ) -# 12504 "parser_cocci_menhir.ml" + let xs : 'tv_list_iso_ctype__ = Obj.magic xs in + let x : 'tv_iso_ctype_ = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_iso_ctype__ = +# 116 "standard.mly" + ( x :: xs ) +# 17105 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12511,24 +17112,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = p; - MenhirLib.EngineTypes.startp = _startpos_p_; - MenhirLib.EngineTypes.endp = _endpos_p_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let p : ( -# 59 "parser_cocci_menhir.mly" - (string * Data.clt) -# 12525 "parser_cocci_menhir.ml" - ) = Obj.magic p in - let _startpos = _startpos_p_ in - let _endpos = _endpos_p_ in - let _v : 'tv_generic_ctype_full = -# 507 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.TypeName(P.id2mcode p)) ) -# 12532 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_list_iso_decl_var__ = +# 114 "standard.mly" + ( [] ) +# 17122 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12540,50 +17130,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = p; - MenhirLib.EngineTypes.startp = _startpos_p_; - MenhirLib.EngineTypes.endp = _endpos_p_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = r00; - MenhirLib.EngineTypes.startp = _startpos_r00_; - MenhirLib.EngineTypes.endp = _endpos_r00_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let p : ( -# 64 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 12558 "parser_cocci_menhir.ml" - ) = Obj.magic p in - let r00 : ( -# 51 "parser_cocci_menhir.mly" - (Data.clt) -# 12563 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let _startpos = _startpos_r00_ in - let _endpos = _endpos_p_ in - let _v : 'tv_generic_ctype_full = let q = - let r0 = r00 in - let s = - let r = r0 in - -# 589 "parser_cocci_menhir.mly" - ( function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,x)) ) -# 12574 "parser_cocci_menhir.ml" - - in - -# 594 "parser_cocci_menhir.mly" - ( function x -> s (Some x) ) -# 12580 "parser_cocci_menhir.ml" - - in - -# 509 "parser_cocci_menhir.mly" - ( let (nm,pure,clt) = p in - q (Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure))) ) -# 12587 "parser_cocci_menhir.ml" + let xs : 'tv_list_iso_decl_var__ = Obj.magic xs in + let x : 'tv_iso_decl_var_ = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_iso_decl_var__ = +# 116 "standard.mly" + ( x :: xs ) +# 17152 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12594,51 +17159,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = p; - MenhirLib.EngineTypes.startp = _startpos_p_; - MenhirLib.EngineTypes.endp = _endpos_p_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = r00; - MenhirLib.EngineTypes.startp = _startpos_r00_; - MenhirLib.EngineTypes.endp = _endpos_r00_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let p : ( -# 64 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 12613 "parser_cocci_menhir.ml" - ) = Obj.magic p in - let r00 : ( -# 51 "parser_cocci_menhir.mly" - (Data.clt) -# 12618 "parser_cocci_menhir.ml" - ) = Obj.magic r00 in - let _startpos = _startpos_r00_ in - let _endpos = _endpos_p_ in - let _v : 'tv_generic_ctype_full = let q = - let r0 = r00 in - let s = - let r = r0 in - -# 591 "parser_cocci_menhir.mly" - ( function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,x)) ) -# 12629 "parser_cocci_menhir.ml" - - in - -# 594 "parser_cocci_menhir.mly" - ( function x -> s (Some x) ) -# 12635 "parser_cocci_menhir.ml" - - in - -# 509 "parser_cocci_menhir.mly" - ( let (nm,pure,clt) = p in - q (Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure))) ) -# 12642 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_list_iso_dexpr__ = +# 114 "standard.mly" + ( [] ) +# 17169 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12650,31 +17177,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = p; - MenhirLib.EngineTypes.startp = _startpos_p_; - MenhirLib.EngineTypes.endp = _endpos_p_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let p : ( -# 64 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 12663 "parser_cocci_menhir.ml" - ) = Obj.magic p in - let _startpos = _startpos_p_ in - let _endpos = _endpos_p_ in - let _v : 'tv_generic_ctype_full = let q = - -# 595 "parser_cocci_menhir.mly" - ( function x -> x ) -# 12671 "parser_cocci_menhir.ml" - - in - -# 509 "parser_cocci_menhir.mly" - ( let (nm,pure,clt) = p in - q (Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure))) ) -# 12678 "parser_cocci_menhir.ml" + let xs : 'tv_list_iso_dexpr__ = Obj.magic xs in + let x : 'tv_iso_dexpr_ = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_iso_dexpr__ = +# 116 "standard.mly" + ( x :: xs ) +# 17199 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12685,20 +17206,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let _1 : 'tv_pure_ident = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_ident = -# 1510 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) ) -# 12702 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_list_iso_nest_start__ = +# 114 "standard.mly" + ( [] ) +# 17216 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12710,24 +17224,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : ( -# 61 "parser_cocci_menhir.mly" - (Parse_aux.idinfo) -# 12723 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_ident = -# 1512 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,clt) = _1 in - Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,pure)) ) -# 12731 "parser_cocci_menhir.ml" + let xs : 'tv_list_iso_nest_start__ = Obj.magic xs in + let x : 'tv_iso_nest_start_ = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_iso_nest_start__ = +# 116 "standard.mly" + ( x :: xs ) +# 17246 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12738,20 +17253,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let i : 'tv_pure_ident = Obj.magic i in - let _startpos = _startpos_i_ in - let _endpos = _endpos_i_ in - let _v : 'tv_ident_or_const = -# 1464 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Ident(Ast0.wrap(Ast0.Id(P.id2mcode i)))) ) -# 12755 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_list_iso_single_statement__ = +# 114 "standard.mly" + ( [] ) +# 17263 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12763,24 +17271,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : ( -# 87 "parser_cocci_menhir.mly" - (string * Data.clt) -# 12776 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_ident_or_const = -# 1466 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) ) -# 12784 "parser_cocci_menhir.ml" + let xs : 'tv_list_iso_single_statement__ = Obj.magic xs in + let x : 'tv_iso_single_statement_ = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_iso_single_statement__ = +# 116 "standard.mly" + ( x :: xs ) +# 17293 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12791,28 +17300,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let _2 : ( -# 87 "parser_cocci_menhir.mly" - (string * Data.clt) -# 12809 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_incl = -# 257 "parser_cocci_menhir.mly" - ( Common.Left(P.id2name _2) ) -# 12816 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_list_mzl_ctype__ = +# 114 "standard.mly" + ( [] ) +# 17310 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12824,27 +17318,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : ( -# 79 "parser_cocci_menhir.mly" - (string) -# 12841 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_incl = -# 258 "parser_cocci_menhir.mly" - ( Common.Right _2 ) -# 12848 "parser_cocci_menhir.ml" + let xs : 'tv_list_mzl_ctype__ = Obj.magic xs in + let x : 'tv_mzl_ctype_ = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_mzl_ctype__ = +# 116 "standard.mly" + ( x :: xs ) +# 17340 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12855,28 +17347,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let _1 : 'tv_list_incl_ = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : ( -# 146 "parser_cocci_menhir.mly" - ((string,string) Common.either list) -# 12876 "parser_cocci_menhir.ml" - ) = -# 253 "parser_cocci_menhir.mly" - ( _1 ) -# 12880 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_list_mzl_eexpr__ = +# 114 "standard.mly" + ( [] ) +# 17357 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12888,27 +17365,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _1 : 'tv_list_incl_ = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : ( -# 146 "parser_cocci_menhir.mly" - ((string,string) Common.either list) -# 12908 "parser_cocci_menhir.ml" - ) = -# 254 "parser_cocci_menhir.mly" - ( _1 ) -# 12912 "parser_cocci_menhir.ml" + let xs : 'tv_list_mzl_eexpr__ = Obj.magic xs in + let x : 'tv_mzl_eexpr_ = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_mzl_eexpr__ = +# 116 "standard.mly" + ( x :: xs ) +# 17387 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12919,32 +17394,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let _1 : ( -# 80 "parser_cocci_menhir.mly" - (string * Data.clt) -# 12933 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_includes = -# 638 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.Include(P.clt2mcode "#include" (P.drop_aft (P.id2clt _1)), - let (arity,ln,lln,offset,col,strbef,straft,pos) = - P.id2clt _1 in - let clt = - (arity,ln,lln,offset,0,strbef,straft,pos) in - P.clt2mcode - (Ast.Local (Parse_aux.str2inc (P.id2name _1))) - (P.drop_bef clt))) ) -# 12948 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_list_mzl_fun_after_dots_or__ = +# 114 "standard.mly" + ( [] ) +# 17404 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12956,31 +17412,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : ( -# 80 "parser_cocci_menhir.mly" - (string * Data.clt) -# 12969 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_includes = -# 648 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.Include(P.clt2mcode "#include" (P.drop_aft (P.id2clt _1)), - let (arity,ln,lln,offset,col,strbef,straft,pos) = - P.id2clt _1 in - let clt = - (arity,ln,lln,offset,0,strbef,straft,pos) in - P.clt2mcode - (Ast.NonLocal (Parse_aux.str2inc (P.id2name _1))) - (P.drop_bef clt))) ) -# 12984 "parser_cocci_menhir.ml" + let xs : 'tv_list_mzl_fun_after_dots_or__ = Obj.magic xs in + let x : 'tv_mzl_fun_after_dots_or_ = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_mzl_fun_after_dots_or__ = +# 116 "standard.mly" + ( x :: xs ) +# 17434 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -12991,31 +17441,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let t : 'tv_ctype = Obj.magic t in - let d : 'tv_defineop = Obj.magic d in - let _startpos = _startpos_d_ in - let _endpos = _endpos__3_ in - let _v : 'tv_includes = -# 658 "parser_cocci_menhir.mly" - ( let ty = Ast0.wrap(Ast0.TopExp(Ast0.wrap(Ast0.TypeExp(t)))) in - d (Ast0.wrap(Ast0.DOTS([ty]))) ) -# 13019 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_list_mzl_fun_start__ = +# 114 "standard.mly" + ( [] ) +# 17451 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13027,37 +17459,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = b; - MenhirLib.EngineTypes.startp = _startpos_b_; - MenhirLib.EngineTypes.endp = _endpos_b_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let b : 'tv_toplevel_seq_start_toplevel_after_dots_ = Obj.magic b in - let _1 : 'tv_defineop = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_includes = -# 661 "parser_cocci_menhir.mly" - ( let body = - match b with - [e] -> - (match Ast0.unwrap e with - Ast0.Exp(e1) -> - [Ast0.rewrap e (Ast0.TopExp(Ast0.set_arg_exp (e1)))] - | _ -> b) - | _ -> b in - _1 (Ast0.wrap(Ast0.DOTS(body))) ) -# 13061 "parser_cocci_menhir.ml" + let xs : 'tv_list_mzl_fun_start__ = Obj.magic xs in + let x : 'tv_mzl_fun_start_ = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_mzl_fun_start__ = +# 116 "standard.mly" + ( x :: xs ) +# 17481 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13068,20 +17488,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let _1 : 'tv_eexpr = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_initialize = -# 1075 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.InitExpr(_1)) ) -# 13085 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_list_mzl_rule_elem_statement__ = +# 114 "standard.mly" + ( [] ) +# 17498 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13093,39 +17506,42 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _3 : ( -# 101 "parser_cocci_menhir.mly" - (Data.clt) -# 13116 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_initialize_list = Obj.magic _2 in - let _1 : ( -# 101 "parser_cocci_menhir.mly" - (Data.clt) -# 13122 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_initialize = -# 1077 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.InitList(P.clt2mcode "{" _1,_2,P.clt2mcode "}" _3)) ) -# 13129 "parser_cocci_menhir.ml" + let xs : 'tv_list_mzl_rule_elem_statement__ = Obj.magic xs in + let x : 'tv_mzl_rule_elem_statement_ = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_mzl_rule_elem_statement__ = +# 116 "standard.mly" + ( x :: xs ) +# 17528 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_list_mzl_statement__ = +# 114 "standard.mly" + ( [] ) +# 17545 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13137,35 +17553,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : ( -# 101 "parser_cocci_menhir.mly" - (Data.clt) -# 13155 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : ( -# 101 "parser_cocci_menhir.mly" - (Data.clt) -# 13160 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_initialize = -# 1079 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.InitList(P.clt2mcode "{" _1,Ast0.wrap(Ast0.DOTS []), - P.clt2mcode "}" _2)) ) -# 13169 "parser_cocci_menhir.ml" + let xs : 'tv_list_mzl_statement__ = Obj.magic xs in + let x : 'tv_mzl_statement_ = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_mzl_statement__ = +# 116 "standard.mly" + ( x :: xs ) +# 17575 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13176,25 +17582,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let _1 : ( -# 65 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 13190 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_initialize = -# 1083 "parser_cocci_menhir.mly" - (let (nm,pure,clt) = _1 in - Ast0.wrap(Ast0.MetaInit(P.clt2mcode nm clt,pure)) ) -# 13198 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_list_pair_edots_when_TEllipsis_eexpr__dexpr__ = +# 114 "standard.mly" + ( [] ) +# 17592 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13206,19 +17600,40 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = y0; + MenhirLib.EngineTypes.startp = _startpos_y0_; + MenhirLib.EngineTypes.endp = _endpos_y0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let _1 : 'tv_arith_expr_eexpr_invalid_ = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_initialize2 = -# 1089 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.InitExpr(_1)) ) -# 13222 "parser_cocci_menhir.ml" + let xs : 'tv_list_pair_edots_when_TEllipsis_eexpr__dexpr__ = Obj.magic xs in + let y0 : 'tv_dexpr = Obj.magic y0 in + let x0 : 'tv_edots_when_TEllipsis_eexpr_ = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_pair_edots_when_TEllipsis_eexpr__dexpr__ = let x = + let y = y0 in + let x = x0 in + +# 70 "standard.mly" + ( (x, y) ) +# 17631 "parser_cocci_menhir.ml" + + in + +# 116 "standard.mly" + ( x :: xs ) +# 17637 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13229,40 +17644,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let _3 : ( -# 101 "parser_cocci_menhir.mly" - (Data.clt) -# 13253 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_initialize_list = Obj.magic _2 in - let _1 : ( -# 101 "parser_cocci_menhir.mly" - (Data.clt) -# 13259 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_initialize2 = -# 1091 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.InitList(P.clt2mcode "{" _1,_2,P.clt2mcode "}" _3)) ) -# 13266 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_list_whenppdecs_ = +# 114 "standard.mly" + ( [] ) +# 17654 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13274,35 +17662,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : ( -# 101 "parser_cocci_menhir.mly" - (Data.clt) -# 13292 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : ( -# 101 "parser_cocci_menhir.mly" - (Data.clt) -# 13297 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_initialize2 = -# 1093 "parser_cocci_menhir.mly" - ( Ast0.wrap - (Ast0.InitList(P.clt2mcode "{" _1,Ast0.wrap(Ast0.DOTS []), - P.clt2mcode "}" _2)) ) -# 13306 "parser_cocci_menhir.ml" + let xs : 'tv_list_whenppdecs_ = Obj.magic xs in + let x : 'tv_whenppdecs = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_list_whenppdecs_ = +# 116 "standard.mly" + ( x :: xs ) +# 17684 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13313,36 +17691,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let _3 : 'tv_initialize2 = Obj.magic _3 in - let _2 : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 13338 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_list_designator_ = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_initialize2 = -# 1098 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.InitGccExt(_1,P.clt2mcode "=" _2,_3)) ) -# 13346 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_loption_choose_iso_ = +# 57 "standard.mly" + ( [] ) +# 17701 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13354,35 +17709,36 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _3 : 'tv_initialize2 = Obj.magic _3 in - let _2 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 13378 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_ident = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_initialize2 = -# 1100 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.InitGccName(_1,P.clt2mcode ":" _2,_3)) ) -# 13386 "parser_cocci_menhir.ml" + let x : 'tv_choose_iso = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_loption_choose_iso_ = +# 59 "standard.mly" + ( x ) +# 17725 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_loption_disable_ = +# 57 "standard.mly" + ( [] ) +# 17742 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13395,18 +17751,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_initialize_list_start = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_initialize_list = -# 1112 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.DOTS(_1)) ) -# 13410 "parser_cocci_menhir.ml" + let x : 'tv_disable = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_loption_disable_ = +# 59 "standard.mly" + ( x ) +# 17766 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13417,30 +17773,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let _2 : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 13436 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_initialize2 = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_initialize_list_start = -# 1115 "parser_cocci_menhir.mly" - ( [_1;Ast0.wrap(Ast0.IComma(P.clt2mcode "," _2))] ) -# 13444 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_loption_filespec_ = +# 57 "standard.mly" + ( [] ) +# 17783 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13452,35 +17791,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _3 : 'tv_initialize_list_start = Obj.magic _3 in - let _2 : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 13476 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_initialize2 = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_initialize_list_start = -# 1117 "parser_cocci_menhir.mly" - ( _1::Ast0.wrap(Ast0.IComma(P.clt2mcode "," _2))::_3 ) -# 13484 "parser_cocci_menhir.ml" + let x : 'tv_filespec = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_loption_filespec_ = +# 59 "standard.mly" + ( x ) +# 17807 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13491,27 +17814,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = r; - MenhirLib.EngineTypes.startp = _startpos_r_; - MenhirLib.EngineTypes.endp = _endpos_r_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let r : 'tv_comma_initializers_edots_when_TEllipsis_initialize__ = Obj.magic r in - let d : 'tv_edots_when_TEllipsis_initialize_ = Obj.magic d in - let _startpos = _startpos_d_ in - let _endpos = _endpos_r_ in - let _v : 'tv_initialize_list_start = -# 1120 "parser_cocci_menhir.mly" - ( (P.mkidots "..." d):: - (List.concat(List.map (function x -> x (P.mkidots "...")) r)) ) -# 13515 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_loption_minus_start_ = +# 57 "standard.mly" + ( [] ) +# 17824 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13524,16 +17833,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_invalid = -# 1213 "parser_cocci_menhir.mly" - ( raise (Semantic_cocci.Semantic "not matchable") ) -# 13537 "parser_cocci_menhir.ml" + let x : 'tv_minus_start = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_loption_minus_start_ = +# 59 "standard.mly" + ( x ) +# 17848 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13547,10 +17858,10 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in let _endpos = _startpos in - let _v : 'tv_is_expression = -# 249 "parser_cocci_menhir.mly" - ( false ) -# 13554 "parser_cocci_menhir.ml" + let _v : 'tv_loption_not_ceq_ = +# 57 "standard.mly" + ( [] ) +# 17865 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13563,16 +17874,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_is_expression = -# 250 "parser_cocci_menhir.mly" - ( true ) -# 13576 "parser_cocci_menhir.ml" + let x : 'tv_not_ceq = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_loption_not_ceq_ = +# 59 "standard.mly" + ( x ) +# 17889 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13583,24 +17896,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let t : 'tv_ctype = Obj.magic t in - let _startpos = _startpos__1_ in - let _endpos = _endpos_t_ in - let _v : 'tv_iso_ctype_ = -# 1866 "parser_cocci_menhir.mly" - ( Common.Left t ) -# 13604 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_loption_not_eq_ = +# 57 "standard.mly" + ( [] ) +# 17906 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13612,51 +17914,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let t : 'tv_ctype = Obj.magic t in - let _startpos = _startpos__1_ in - let _endpos = _endpos_t_ in - let _v : 'tv_iso_ctype_ = -# 1867 "parser_cocci_menhir.mly" - ( Common.Right t ) -# 13632 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; } = _menhir_stack in - let t : 'tv_decl_var = Obj.magic t in - let _startpos = _startpos__1_ in - let _endpos = _endpos_t_ in - let _v : 'tv_iso_decl_var_ = -# 1866 "parser_cocci_menhir.mly" - ( Common.Left t ) -# 13660 "parser_cocci_menhir.ml" + let x : 'tv_not_eq = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_loption_not_eq_ = +# 59 "standard.mly" + ( x ) +# 17930 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13667,24 +17937,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let t : 'tv_decl_var = Obj.magic t in - let _startpos = _startpos__1_ in - let _endpos = _endpos_t_ in - let _v : 'tv_iso_decl_var_ = -# 1867 "parser_cocci_menhir.mly" - ( Common.Right t ) -# 13688 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_loption_not_eqe_ = +# 57 "standard.mly" + ( [] ) +# 17947 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13696,23 +17955,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let t : 'tv_dexpr = Obj.magic t in - let _startpos = _startpos__1_ in - let _endpos = _endpos_t_ in - let _v : 'tv_iso_dexpr_ = -# 1866 "parser_cocci_menhir.mly" - ( Common.Left t ) -# 13716 "parser_cocci_menhir.ml" + let x : 'tv_not_eqe = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_loption_not_eqe_ = +# 59 "standard.mly" + ( x ) +# 17971 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13723,24 +17978,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let t : 'tv_dexpr = Obj.magic t in - let _startpos = _startpos__1_ in - let _endpos = _endpos_t_ in - let _v : 'tv_iso_dexpr_ = -# 1867 "parser_cocci_menhir.mly" - ( Common.Right t ) -# 13744 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_loption_not_pos_ = +# 57 "standard.mly" + ( [] ) +# 17988 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13752,23 +17996,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let t : 'tv_nest_start = Obj.magic t in - let _startpos = _startpos__1_ in - let _endpos = _endpos_t_ in - let _v : 'tv_iso_nest_start_ = -# 1866 "parser_cocci_menhir.mly" - ( Common.Left t ) -# 13772 "parser_cocci_menhir.ml" + let x : 'tv_not_pos = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_loption_not_pos_ = +# 59 "standard.mly" + ( x ) +# 18012 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13779,24 +18019,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let t : 'tv_nest_start = Obj.magic t in - let _startpos = _startpos__1_ in - let _endpos = _endpos_t_ in - let _v : 'tv_iso_nest_start_ = -# 1867 "parser_cocci_menhir.mly" - ( Common.Right t ) -# 13800 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_loption_plus_start_ = +# 57 "standard.mly" + ( [] ) +# 18029 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13808,23 +18037,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let t : 'tv_single_statement = Obj.magic t in - let _startpos = _startpos__1_ in - let _endpos = _endpos_t_ in - let _v : 'tv_iso_single_statement_ = -# 1866 "parser_cocci_menhir.mly" - ( Common.Left t ) -# 13828 "parser_cocci_menhir.ml" + let x : 'tv_plus_start = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_loption_plus_start_ = +# 59 "standard.mly" + ( x ) +# 18053 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13836,23 +18061,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { + MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = t; MenhirLib.EngineTypes.startp = _startpos_t_; MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let t : 'tv_single_statement = Obj.magic t in - let _startpos = _startpos__1_ in + let t : 'tv_typedef_ctype = Obj.magic t in + let _startpos = _startpos_t_ in let _endpos = _endpos_t_ in - let _v : 'tv_iso_single_statement_ = -# 1867 "parser_cocci_menhir.mly" - ( Common.Right t ) -# 13856 "parser_cocci_menhir.ml" + let _v : 'tv_meta_exp_type = +# 453 "parser_cocci_menhir.mly" + ( [Ast0_cocci.ast0_type_to_type t] ) +# 18077 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13864,16 +18085,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = el; - MenhirLib.EngineTypes.startp = _startpos_el_; - MenhirLib.EngineTypes.endp = _endpos_el_; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.startp = _startpos__1_; @@ -13883,18 +18104,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let el : 'tv_list_iso_dexpr__ = Obj.magic el in - let e1 : 'tv_dexpr = Obj.magic e1 in + let m : 'tv_list_TMul_ = Obj.magic m in + let t : 'tv_comma_list_ctype_ = Obj.magic t in let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : ( -# 162 "parser_cocci_menhir.mly" - (Ast0_cocci.anything list list) -# 13894 "parser_cocci_menhir.ml" - ) = -# 1838 "parser_cocci_menhir.mly" - ( P.iso_adjust (function x -> Ast0.ExprTag x) e1 el ) -# 13898 "parser_cocci_menhir.ml" + let _endpos = _endpos_m_ in + let _v : 'tv_meta_exp_type = +# 455 "parser_cocci_menhir.mly" + ( List.map + (function x -> P.ty_pointerify (Ast0_cocci.ast0_type_to_type x) m) + t ) +# 18117 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13906,37 +18125,61 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = el; - MenhirLib.EngineTypes.startp = _startpos_el_; - MenhirLib.EngineTypes.endp = _endpos_el_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let el : 'tv_list_iso_dexpr__ = Obj.magic el in - let e1 : 'tv_dexpr = Obj.magic e1 in + let _3 : 'tv_pure_ident = Obj.magic _3 in + let _1 : ( +# 47 "parser_cocci_menhir.mly" + (string) +# 18148 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in + let _endpos = _endpos__3_ in + let _v : 'tv_meta_ident = +# 1376 "parser_cocci_menhir.mly" + ( (Some _1,P.id2name _3) ) +# 18155 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let m : 'tv_metadec = Obj.magic m in + let _startpos = _startpos_m_ in + let _endpos = _endpos_m_ in let _v : ( -# 162 "parser_cocci_menhir.mly" - (Ast0_cocci.anything list list) -# 13936 "parser_cocci_menhir.ml" +# 157 "parser_cocci_menhir.mly" + ((Ast_cocci.metavar,Ast_cocci.metavar) Common.either list) +# 18179 "parser_cocci_menhir.ml" ) = -# 1840 "parser_cocci_menhir.mly" - ( P.iso_adjust (function x -> Ast0.ArgExprTag x) e1 el ) -# 13940 "parser_cocci_menhir.ml" +# 181 "parser_cocci_menhir.mly" + ( m (!Ast0.rule_name) ) +# 18183 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13948,37 +18191,48 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = el; - MenhirLib.EngineTypes.startp = _startpos_el_; - MenhirLib.EngineTypes.endp = _endpos_el_; + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ispure; + MenhirLib.EngineTypes.startp = _startpos_ispure_; + MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ar; + MenhirLib.EngineTypes.startp = _startpos_ar_; + MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; } = _menhir_stack in - let el : 'tv_list_iso_dexpr__ = Obj.magic el in - let e1 : 'tv_dexpr = Obj.magic e1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : ( -# 162 "parser_cocci_menhir.mly" - (Ast0_cocci.anything list list) -# 13978 "parser_cocci_menhir.ml" - ) = -# 1842 "parser_cocci_menhir.mly" - ( P.iso_adjust (function x -> Ast0.TestExprTag x) e1 el ) -# 13982 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in + let ispure : 'tv_pure = Obj.magic ispure in + let ar : 'tv_arity = Obj.magic ar in + let _startpos = _startpos_ar_ in + let _endpos = _endpos__5_ in + let _v : 'tv_metadec = let kindfn = + +# 318 "parser_cocci_menhir.mly" + ( (fun arity name pure check_meta -> + let tok = check_meta(Ast.MetaParamDecl(arity,name)) in + !Data.add_param_meta name pure; tok) ) +# 18230 "parser_cocci_menhir.ml" + + in + +# 263 "parser_cocci_menhir.mly" + ( P.create_metadec ar ispure kindfn ids ) +# 18236 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -13990,37 +18244,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = sl; - MenhirLib.EngineTypes.startp = _startpos_sl_; - MenhirLib.EngineTypes.endp = _endpos_sl_; + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = s1; - MenhirLib.EngineTypes.startp = _startpos_s1_; - MenhirLib.EngineTypes.endp = _endpos_s1_; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ispure; + MenhirLib.EngineTypes.startp = _startpos_ispure_; + MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ar; + MenhirLib.EngineTypes.startp = _startpos_ar_; + MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; }; } = _menhir_stack in - let sl : 'tv_list_iso_single_statement__ = Obj.magic sl in - let s1 : 'tv_single_statement = Obj.magic s1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : ( -# 162 "parser_cocci_menhir.mly" - (Ast0_cocci.anything list list) -# 14020 "parser_cocci_menhir.ml" - ) = -# 1844 "parser_cocci_menhir.mly" - ( P.iso_adjust (function x -> Ast0.StmtTag x) s1 sl ) -# 14024 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in + let ispure : 'tv_pure = Obj.magic ispure in + let ar : 'tv_arity = Obj.magic ar in + let _startpos = _startpos_ar_ in + let _endpos = _endpos__6_ in + let _v : 'tv_metadec = let kindfn = + +# 322 "parser_cocci_menhir.mly" + ( (fun arity name pure check_meta -> + let tok = check_meta(Ast.MetaParamListDecl(arity,name,None)) in + !Data.add_paramlist_meta name None pure; tok) ) +# 18287 "parser_cocci_menhir.ml" + + in + +# 263 "parser_cocci_menhir.mly" + ( P.create_metadec ar ispure kindfn ids ) +# 18293 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14032,37 +18301,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = tl; - MenhirLib.EngineTypes.startp = _startpos_tl_; - MenhirLib.EngineTypes.endp = _endpos_tl_; + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = t1; - MenhirLib.EngineTypes.startp = _startpos_t1_; - MenhirLib.EngineTypes.endp = _endpos_t1_; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ispure; + MenhirLib.EngineTypes.startp = _startpos_ispure_; + MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ar; + MenhirLib.EngineTypes.startp = _startpos_ar_; + MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; }; } = _menhir_stack in - let tl : 'tv_list_iso_ctype__ = Obj.magic tl in - let t1 : 'tv_ctype = Obj.magic t1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : ( -# 162 "parser_cocci_menhir.mly" - (Ast0_cocci.anything list list) -# 14062 "parser_cocci_menhir.ml" - ) = -# 1846 "parser_cocci_menhir.mly" - ( P.iso_adjust (function x -> Ast0.TypeCTag x) t1 tl ) -# 14066 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in + let ispure : 'tv_pure = Obj.magic ispure in + let ar : 'tv_arity = Obj.magic ar in + let _startpos = _startpos_ar_ in + let _endpos = _endpos__6_ in + let _v : 'tv_metadec = let kindfn = + +# 326 "parser_cocci_menhir.mly" + ( (fun arity name pure check_meta -> + let tok = check_meta(Ast.MetaExpListDecl(arity,name,None)) in + !Data.add_explist_meta name None pure; tok) ) +# 18344 "parser_cocci_menhir.ml" + + in + +# 263 "parser_cocci_menhir.mly" + ( P.create_metadec ar ispure kindfn ids ) +# 18350 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14074,37 +18358,48 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = el; - MenhirLib.EngineTypes.startp = _startpos_el_; - MenhirLib.EngineTypes.endp = _endpos_el_; + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ispure; + MenhirLib.EngineTypes.startp = _startpos_ispure_; + MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ar; + MenhirLib.EngineTypes.startp = _startpos_ar_; + MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; } = _menhir_stack in - let el : 'tv_list_iso_nest_start__ = Obj.magic el in - let e1 : 'tv_nest_start = Obj.magic e1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : ( -# 162 "parser_cocci_menhir.mly" - (Ast0_cocci.anything list list) -# 14104 "parser_cocci_menhir.ml" - ) = -# 1848 "parser_cocci_menhir.mly" - ( P.iso_adjust (function x -> Ast0.DotsStmtTag x) e1 el ) -# 14108 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in + let ispure : 'tv_pure = Obj.magic ispure in + let ar : 'tv_arity = Obj.magic ar in + let _startpos = _startpos_ar_ in + let _endpos = _endpos__5_ in + let _v : 'tv_metadec = let kindfn = + +# 330 "parser_cocci_menhir.mly" + ( (fun arity name pure check_meta -> + let tok = check_meta(Ast.MetaTypeDecl(arity,name)) in + !Data.add_type_meta name pure; tok) ) +# 18397 "parser_cocci_menhir.ml" + + in + +# 263 "parser_cocci_menhir.mly" + ( P.create_metadec ar ispure kindfn ids ) +# 18403 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14116,50 +18411,48 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = dl; - MenhirLib.EngineTypes.startp = _startpos_dl_; - MenhirLib.EngineTypes.endp = _endpos_dl_; + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d1; - MenhirLib.EngineTypes.startp = _startpos_d1_; - MenhirLib.EngineTypes.endp = _endpos_d1_; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ispure; + MenhirLib.EngineTypes.startp = _startpos_ispure_; + MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ar; + MenhirLib.EngineTypes.startp = _startpos_ar_; + MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; } = _menhir_stack in - let dl : 'tv_list_iso_decl_var__ = Obj.magic dl in - let d1 : 'tv_decl_var = Obj.magic d1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : ( -# 162 "parser_cocci_menhir.mly" - (Ast0_cocci.anything list list) -# 14146 "parser_cocci_menhir.ml" - ) = -# 1850 "parser_cocci_menhir.mly" - ( let check_one = function - [x] -> x - | _ -> - raise - (Semantic_cocci.Semantic - "only one variable per declaration in an isomorphism rule") in - let d1 = check_one d1 in - let dl = - List.map - (function - Common.Left x -> Common.Left(check_one x) - | Common.Right x -> Common.Right(check_one x)) - dl in - P.iso_adjust (function x -> Ast0.DeclTag x) d1 dl ) -# 14163 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in + let ispure : 'tv_pure = Obj.magic ispure in + let ar : 'tv_arity = Obj.magic ar in + let _startpos = _startpos_ar_ in + let _endpos = _endpos__5_ in + let _v : 'tv_metadec = let kindfn = + +# 334 "parser_cocci_menhir.mly" + ( (fun arity name pure check_meta -> + let tok = check_meta(Ast.MetaInitDecl(arity,name)) in + !Data.add_init_meta name pure; tok) ) +# 18450 "parser_cocci_menhir.ml" + + in + +# 263 "parser_cocci_menhir.mly" + ( P.create_metadec ar ispure kindfn ids ) +# 18456 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14171,23 +18464,48 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = m; - MenhirLib.EngineTypes.startp = _startpos_m_; - MenhirLib.EngineTypes.endp = _endpos_m_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ispure; + MenhirLib.EngineTypes.startp = _startpos_ispure_; + MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ar; + MenhirLib.EngineTypes.startp = _startpos_ar_; + MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; } = _menhir_stack in - let m : 'tv_metadec = Obj.magic m in - let _startpos = _startpos_m_ in - let _endpos = _endpos_m_ in - let _v : ( -# 165 "parser_cocci_menhir.mly" - ((Ast_cocci.metavar,Ast_cocci.metavar) Common.either list) -# 14187 "parser_cocci_menhir.ml" - ) = -# 182 "parser_cocci_menhir.mly" - ( m "" ) -# 14191 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in + let ispure : 'tv_pure = Obj.magic ispure in + let ar : 'tv_arity = Obj.magic ar in + let _startpos = _startpos_ar_ in + let _endpos = _endpos__5_ in + let _v : 'tv_metadec = let kindfn = + +# 338 "parser_cocci_menhir.mly" + ( (fun arity name pure check_meta -> + let tok = check_meta(Ast.MetaStmDecl(arity,name)) in + !Data.add_stm_meta name pure; tok) ) +# 18503 "parser_cocci_menhir.ml" + + in + +# 263 "parser_cocci_menhir.mly" + ( P.create_metadec ar ispure kindfn ids ) +# 18509 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14199,27 +18517,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = nm; - MenhirLib.EngineTypes.startp = _startpos_nm_; - MenhirLib.EngineTypes.endp = _endpos_nm_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ispure; + MenhirLib.EngineTypes.startp = _startpos_ispure_; + MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ar; + MenhirLib.EngineTypes.startp = _startpos_ar_; + MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; }; } = _menhir_stack in - let nm : 'tv_pure_ident = Obj.magic nm in - let _startpos = _startpos_nm_ in - let _endpos = _endpos__2_ in - let _v : ( -# 149 "parser_cocci_menhir.mly" - (Ast_cocci.rulename) -# 14219 "parser_cocci_menhir.ml" - ) = -# 197 "parser_cocci_menhir.mly" - ( P.make_iso_rule_name_result (P.id2name nm) ) -# 14223 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in + let ispure : 'tv_pure = Obj.magic ispure in + let ar : 'tv_arity = Obj.magic ar in + let _startpos = _startpos_ar_ in + let _endpos = _endpos__6_ in + let _v : 'tv_metadec = let kindfn = + +# 342 "parser_cocci_menhir.mly" + ( (fun arity name pure check_meta -> + let tok = check_meta(Ast.MetaStmListDecl(arity,name)) in + !Data.add_stmlist_meta name pure; tok) ) +# 18560 "parser_cocci_menhir.ml" + + in + +# 263 "parser_cocci_menhir.mly" + ( P.create_metadec ar ispure kindfn ids ) +# 18566 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14231,23 +18574,49 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ispure; + MenhirLib.EngineTypes.startp = _startpos_ispure_; + MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ar; + MenhirLib.EngineTypes.startp = _startpos_ar_; + MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; } = _menhir_stack in - let _1 : ( -# 59 "parser_cocci_menhir.mly" - (string * Data.clt) -# 14244 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_iter_ident = -# 1524 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Id(P.id2mcode _1)) ) -# 14251 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in + let ispure : 'tv_pure = Obj.magic ispure in + let ar : 'tv_arity = Obj.magic ar in + let _startpos = _startpos_ar_ in + let _endpos = _endpos__5_ in + let _v : 'tv_metadec = let kindfn = + +# 346 "parser_cocci_menhir.mly" + ( (fun arity (_,name) pure check_meta -> + if arity = Ast.NONE && pure = Ast0.Impure + then (!Data.add_type_name name; []) + else raise (Semantic_cocci.Semantic "bad typedef")) ) +# 18614 "parser_cocci_menhir.ml" + + in + +# 263 "parser_cocci_menhir.mly" + ( P.create_metadec ar ispure kindfn ids ) +# 18620 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14259,24 +18628,53 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ispure; + MenhirLib.EngineTypes.startp = _startpos_ispure_; + MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ar; + MenhirLib.EngineTypes.startp = _startpos_ar_; + MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; } = _menhir_stack in - let _1 : ( -# 62 "parser_cocci_menhir.mly" - (Parse_aux.idinfo) -# 14272 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_iter_ident = -# 1526 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,clt) = _1 in - Ast0.wrap(Ast0.MetaId(P.clt2mcode nm clt,constraints,pure)) ) -# 14280 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in + let ispure : 'tv_pure = Obj.magic ispure in + let ar : 'tv_arity = Obj.magic ar in + let _startpos = _startpos_ar_ in + let _endpos = _endpos__6_ in + let _v : 'tv_metadec = let kindfn = + +# 351 "parser_cocci_menhir.mly" + ( (fun arity (_,name) pure check_meta -> + if arity = Ast.NONE && pure = Ast0.Impure + then (!Data.add_declarer_name name; []) + else raise (Semantic_cocci.Semantic "bad declarer")) ) +# 18672 "parser_cocci_menhir.ml" + + in + +# 263 "parser_cocci_menhir.mly" + ( P.create_metadec ar ispure kindfn ids ) +# 18678 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14287,13 +18685,54 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_list_TMul_ = -# 114 "standard.mly" - ( [] ) -# 14297 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ispure; + MenhirLib.EngineTypes.startp = _startpos_ispure_; + MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ar; + MenhirLib.EngineTypes.startp = _startpos_ar_; + MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + } = _menhir_stack in + let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in + let ispure : 'tv_pure = Obj.magic ispure in + let ar : 'tv_arity = Obj.magic ar in + let _startpos = _startpos_ar_ in + let _endpos = _endpos__6_ in + let _v : 'tv_metadec = let kindfn = + +# 356 "parser_cocci_menhir.mly" + ( (fun arity (_,name) pure check_meta -> + if arity = Ast.NONE && pure = Ast0.Impure + then (!Data.add_iterator_name name; []) + else raise (Semantic_cocci.Semantic "bad iterator")) ) +# 18730 "parser_cocci_menhir.ml" + + in + +# 263 "parser_cocci_menhir.mly" + ( P.create_metadec ar ispure kindfn ids ) +# 18736 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14305,46 +18744,40 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; } = _menhir_stack in - let xs : 'tv_list_TMul_ = Obj.magic xs in - let x : ( -# 99 "parser_cocci_menhir.mly" - (Data.clt) -# 14324 "parser_cocci_menhir.ml" - ) = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_list_TMul_ = -# 116 "standard.mly" - ( x :: xs ) -# 14331 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_list_array_dec_ = -# 114 "standard.mly" - ( [] ) -# 14348 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_seed_ = Obj.magic ids in + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : 'tv_metadec = let kindfn = + +# 312 "parser_cocci_menhir.mly" + ( (fun name check_meta seed -> + let tok = check_meta(Ast.MetaFreshIdDecl(name,seed)) in + !Data.add_fresh_id_meta name; tok) ) +# 18775 "parser_cocci_menhir.ml" + + in + +# 266 "parser_cocci_menhir.mly" + ( P.create_fresh_metadec kindfn ids ) +# 18781 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14356,25 +18789,48 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ispure; + MenhirLib.EngineTypes.startp = _startpos_ispure_; + MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ar; + MenhirLib.EngineTypes.startp = _startpos_ar_; + MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; } = _menhir_stack in - let xs : 'tv_list_array_dec_ = Obj.magic xs in - let x : 'tv_array_dec = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_list_array_dec_ = -# 116 "standard.mly" - ( x :: xs ) -# 14378 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eq__ = Obj.magic ids in + let ispure : 'tv_pure = Obj.magic ispure in + let ar : 'tv_arity = Obj.magic ar in + let _startpos = _startpos_ar_ in + let _endpos = _endpos__5_ in + let _v : 'tv_metadec = let kindfn = + +# 364 "parser_cocci_menhir.mly" + ( (fun arity name pure check_meta constraints -> + let tok = check_meta(Ast.MetaIdDecl(arity,name)) in + !Data.add_id_meta name constraints pure; tok) ) +# 18828 "parser_cocci_menhir.ml" + + in + +# 270 "parser_cocci_menhir.mly" + ( P.create_metadec_ne ar ispure kindfn ids ) +# 18834 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14385,13 +18841,49 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_list_case_line_ = -# 114 "standard.mly" - ( [] ) -# 14395 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ispure; + MenhirLib.EngineTypes.startp = _startpos_ispure_; + MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ar; + MenhirLib.EngineTypes.startp = _startpos_ar_; + MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eq__ = Obj.magic ids in + let ispure : 'tv_pure = Obj.magic ispure in + let ar : 'tv_arity = Obj.magic ar in + let _startpos = _startpos_ar_ in + let _endpos = _endpos__5_ in + let _v : 'tv_metadec = let kindfn = + +# 368 "parser_cocci_menhir.mly" + ( (fun arity name pure check_meta constraints -> + let tok = check_meta(Ast.MetaFuncDecl(arity,name)) in + !Data.add_func_meta name constraints pure; tok) ) +# 18881 "parser_cocci_menhir.ml" + + in + +# 270 "parser_cocci_menhir.mly" + ( P.create_metadec_ne ar ispure kindfn ids ) +# 18887 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14403,25 +18895,53 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ispure; + MenhirLib.EngineTypes.startp = _startpos_ispure_; + MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ar; + MenhirLib.EngineTypes.startp = _startpos_ar_; + MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; }; } = _menhir_stack in - let xs : 'tv_list_case_line_ = Obj.magic xs in - let x : 'tv_case_line = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_list_case_line_ = -# 116 "standard.mly" - ( x :: xs ) -# 14425 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eq__ = Obj.magic ids in + let ispure : 'tv_pure = Obj.magic ispure in + let ar : 'tv_arity = Obj.magic ar in + let _startpos = _startpos_ar_ in + let _endpos = _endpos__6_ in + let _v : 'tv_metadec = let kindfn = + +# 372 "parser_cocci_menhir.mly" + ( (fun arity name pure check_meta constraints -> + let tok = check_meta(Ast.MetaLocalFuncDecl(arity,name)) in + !Data.add_local_func_meta name constraints pure; + tok) ) +# 18939 "parser_cocci_menhir.ml" + + in + +# 270 "parser_cocci_menhir.mly" + ( P.create_metadec_ne ar ispure kindfn ids ) +# 18945 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14432,13 +18952,49 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_list_comma_decls_TEllipsis_decl__ = -# 114 "standard.mly" - ( [] ) -# 14442 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ispure; + MenhirLib.EngineTypes.startp = _startpos_ispure_; + MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ar; + MenhirLib.EngineTypes.startp = _startpos_ar_; + MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eq__ = Obj.magic ids in + let ispure : 'tv_pure = Obj.magic ispure in + let ar : 'tv_arity = Obj.magic ar in + let _startpos = _startpos_ar_ in + let _endpos = _endpos__5_ in + let _v : 'tv_metadec = let kindfn = + +# 377 "parser_cocci_menhir.mly" + ( (fun arity name pure check_meta constraints -> + let tok = check_meta(Ast.MetaDeclarerDecl(arity,name)) in + !Data.add_declarer_meta name constraints pure; tok) ) +# 18992 "parser_cocci_menhir.ml" + + in + +# 270 "parser_cocci_menhir.mly" + ( P.create_metadec_ne ar ispure kindfn ids ) +# 18998 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14450,25 +19006,48 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ispure; + MenhirLib.EngineTypes.startp = _startpos_ispure_; + MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ar; + MenhirLib.EngineTypes.startp = _startpos_ar_; + MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; } = _menhir_stack in - let xs : 'tv_list_comma_decls_TEllipsis_decl__ = Obj.magic xs in - let x : 'tv_comma_decls_TEllipsis_decl_ = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_list_comma_decls_TEllipsis_decl__ = -# 116 "standard.mly" - ( x :: xs ) -# 14472 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eq__ = Obj.magic ids in + let ispure : 'tv_pure = Obj.magic ispure in + let ar : 'tv_arity = Obj.magic ar in + let _startpos = _startpos_ar_ in + let _endpos = _endpos__5_ in + let _v : 'tv_metadec = let kindfn = + +# 381 "parser_cocci_menhir.mly" + ( (fun arity name pure check_meta constraints -> + let tok = check_meta(Ast.MetaIteratorDecl(arity,name)) in + !Data.add_iterator_meta name constraints pure; tok) ) +# 19045 "parser_cocci_menhir.ml" + + in + +# 270 "parser_cocci_menhir.mly" + ( P.create_metadec_ne ar ispure kindfn ids ) +# 19051 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14479,13 +19058,49 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_list_comma_decls_TEllipsis_name_opt_decl__ = -# 114 "standard.mly" - ( [] ) -# 14489 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ispure; + MenhirLib.EngineTypes.startp = _startpos_ispure_; + MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ar; + MenhirLib.EngineTypes.startp = _startpos_ar_; + MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in + let ispure : 'tv_pure = Obj.magic ispure in + let ar : 'tv_arity = Obj.magic ar in + let _startpos = _startpos_ar_ in + let _endpos = _endpos__5_ in + let _v : 'tv_metadec = let kindfn = + +# 387 "parser_cocci_menhir.mly" + ( (fun arity name pure check_meta constraints -> + let tok = check_meta(Ast.MetaErrDecl(arity,name)) in + !Data.add_err_meta name constraints pure; tok) ) +# 19098 "parser_cocci_menhir.ml" + + in + +# 274 "parser_cocci_menhir.mly" + ( P.create_metadec_ne ar ispure kindfn ids ) +# 19104 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14497,25 +19112,67 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = l0; + MenhirLib.EngineTypes.startp = _startpos_l0_; + MenhirLib.EngineTypes.endp = _endpos_l0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ispure; + MenhirLib.EngineTypes.startp = _startpos_ispure_; + MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ar; + MenhirLib.EngineTypes.startp = _startpos_ar_; + MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; }; } = _menhir_stack in - let xs : 'tv_list_comma_decls_TEllipsis_name_opt_decl__ = Obj.magic xs in - let x : 'tv_comma_decls_TEllipsis_name_opt_decl_ = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_list_comma_decls_TEllipsis_name_opt_decl__ = -# 116 "standard.mly" - ( x :: xs ) -# 14519 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in + let l0 : 'tv_option_TLocal_ = Obj.magic l0 in + let ispure : 'tv_pure = Obj.magic ispure in + let ar : 'tv_arity = Obj.magic ar in + let _startpos = _startpos_ar_ in + let _endpos = _endpos__6_ in + let _v : 'tv_metadec = let kindfn = + let l = l0 in + let ty = + +# 39 "standard.mly" + ( None ) +# 19157 "parser_cocci_menhir.ml" + + in + +# 391 "parser_cocci_menhir.mly" + ( (fun arity name pure check_meta constraints -> + match l with + None -> + !Data.add_idexp_meta ty name constraints pure; + check_meta(Ast.MetaIdExpDecl(arity,name,ty)) + | Some _ -> + !Data.add_local_idexp_meta ty name constraints pure; + check_meta(Ast.MetaLocalIdExpDecl(arity,name,ty))) ) +# 19170 "parser_cocci_menhir.ml" + + in + +# 274 "parser_cocci_menhir.mly" + ( P.create_metadec_ne ar ispure kindfn ids ) +# 19176 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14526,13 +19183,76 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_list_designator_ = -# 114 "standard.mly" - ( [] ) -# 14536 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = x00; + MenhirLib.EngineTypes.startp = _startpos_x00_; + MenhirLib.EngineTypes.endp = _endpos_x00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = l0; + MenhirLib.EngineTypes.startp = _startpos_l0_; + MenhirLib.EngineTypes.endp = _endpos_l0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ispure; + MenhirLib.EngineTypes.startp = _startpos_ispure_; + MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ar; + MenhirLib.EngineTypes.startp = _startpos_ar_; + MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in + let x00 : 'tv_meta_exp_type = Obj.magic x00 in + let l0 : 'tv_option_TLocal_ = Obj.magic l0 in + let ispure : 'tv_pure = Obj.magic ispure in + let ar : 'tv_arity = Obj.magic ar in + let _startpos = _startpos_ar_ in + let _endpos = _endpos__7_ in + let _v : 'tv_metadec = let kindfn = + let x0 = x00 in + let l = l0 in + let ty = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 19237 "parser_cocci_menhir.ml" + + in + +# 391 "parser_cocci_menhir.mly" + ( (fun arity name pure check_meta constraints -> + match l with + None -> + !Data.add_idexp_meta ty name constraints pure; + check_meta(Ast.MetaIdExpDecl(arity,name,ty)) + | Some _ -> + !Data.add_local_idexp_meta ty name constraints pure; + check_meta(Ast.MetaLocalIdExpDecl(arity,name,ty))) ) +# 19250 "parser_cocci_menhir.ml" + + in + +# 274 "parser_cocci_menhir.mly" + ( P.create_metadec_ne ar ispure kindfn ids ) +# 19256 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14544,42 +19264,68 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = m0; + MenhirLib.EngineTypes.startp = _startpos_m0_; + MenhirLib.EngineTypes.endp = _endpos_m0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = l0; + MenhirLib.EngineTypes.startp = _startpos_l0_; + MenhirLib.EngineTypes.endp = _endpos_l0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ispure; + MenhirLib.EngineTypes.startp = _startpos_ispure_; + MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ar; + MenhirLib.EngineTypes.startp = _startpos_ar_; + MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; }; } = _menhir_stack in - let xs : 'tv_list_designator_ = Obj.magic xs in - let x : 'tv_designator = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_list_designator_ = -# 116 "standard.mly" - ( x :: xs ) -# 14566 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_list_dp_comma_args_TEllipsis__ = -# 114 "standard.mly" - ( [] ) -# 14583 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in + let m0 : 'tv_nonempty_list_TMul_ = Obj.magic m0 in + let l0 : 'tv_option_TLocal_ = Obj.magic l0 in + let ispure : 'tv_pure = Obj.magic ispure in + let ar : 'tv_arity = Obj.magic ar in + let _startpos = _startpos_ar_ in + let _endpos = _endpos__7_ in + let _v : 'tv_metadec = let kindfn = + let m = m0 in + let l = l0 in + +# 400 "parser_cocci_menhir.mly" + ( (fun arity name pure check_meta constraints -> + let ty = Some [P.ty_pointerify Type_cocci.Unknown m] in + match l with + None -> + !Data.add_idexp_meta ty name constraints pure; + check_meta(Ast.MetaIdExpDecl(arity,name,ty)) + | Some _ -> + !Data.add_local_idexp_meta ty name constraints pure; + check_meta(Ast.MetaLocalIdExpDecl(arity,name,ty))) ) +# 19323 "parser_cocci_menhir.ml" + + in + +# 274 "parser_cocci_menhir.mly" + ( P.create_metadec_ne ar ispure kindfn ids ) +# 19329 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14591,42 +19337,56 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = m0; + MenhirLib.EngineTypes.startp = _startpos_m0_; + MenhirLib.EngineTypes.endp = _endpos_m0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ispure; + MenhirLib.EngineTypes.startp = _startpos_ispure_; + MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ar; + MenhirLib.EngineTypes.startp = _startpos_ar_; + MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; }; } = _menhir_stack in - let xs : 'tv_list_dp_comma_args_TEllipsis__ = Obj.magic xs in - let x : 'tv_dp_comma_args_TEllipsis_ = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_list_dp_comma_args_TEllipsis__ = -# 116 "standard.mly" - ( x :: xs ) -# 14613 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_list_incl_ = -# 114 "standard.mly" - ( [] ) -# 14630 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in + let m0 : 'tv_nonempty_list_TMul_ = Obj.magic m0 in + let ispure : 'tv_pure = Obj.magic ispure in + let ar : 'tv_arity = Obj.magic ar in + let _startpos = _startpos_ar_ in + let _endpos = _endpos__6_ in + let _v : 'tv_metadec = let kindfn = + let m = m0 in + +# 410 "parser_cocci_menhir.mly" + ( (fun arity name pure check_meta constraints -> + let ty = Some [P.ty_pointerify Type_cocci.Unknown m] in + let tok = check_meta(Ast.MetaExpDecl(arity,name,ty)) in + !Data.add_exp_meta ty name constraints pure; tok) ) +# 19384 "parser_cocci_menhir.ml" + + in + +# 274 "parser_cocci_menhir.mly" + ( P.create_metadec_ne ar ispure kindfn ids ) +# 19390 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14638,42 +19398,60 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = vl0; + MenhirLib.EngineTypes.startp = _startpos_vl0_; + MenhirLib.EngineTypes.endp = _endpos_vl0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ispure; + MenhirLib.EngineTypes.startp = _startpos_ispure_; + MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ar; + MenhirLib.EngineTypes.startp = _startpos_ar_; + MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; }; } = _menhir_stack in - let xs : 'tv_list_incl_ = Obj.magic xs in - let x : 'tv_incl = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_list_incl_ = -# 116 "standard.mly" - ( x :: xs ) -# 14660 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_list_iso_ctype__ = -# 114 "standard.mly" - ( [] ) -# 14677 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in + let vl0 : 'tv_meta_exp_type = Obj.magic vl0 in + let ispure : 'tv_pure = Obj.magic ispure in + let ar : 'tv_arity = Obj.magic ar in + let _startpos = _startpos_ar_ in + let _endpos = _endpos__7_ in + let _v : 'tv_metadec = let kindfn = + let vl = vl0 in + +# 415 "parser_cocci_menhir.mly" + ( (fun arity name pure check_meta constraints -> + let ty = Some (List.map (function x -> Type_cocci.Array x) vl) in + let tok = check_meta(Ast.MetaExpDecl(arity,name,ty)) in + !Data.add_exp_meta ty name constraints pure; tok) ) +# 19449 "parser_cocci_menhir.ml" + + in + +# 274 "parser_cocci_menhir.mly" + ( P.create_metadec_ne ar ispure kindfn ids ) +# 19455 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14685,42 +19463,55 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ispure; + MenhirLib.EngineTypes.startp = _startpos_ispure_; + MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ar; + MenhirLib.EngineTypes.startp = _startpos_ar_; + MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; } = _menhir_stack in - let xs : 'tv_list_iso_ctype__ = Obj.magic xs in - let x : 'tv_iso_ctype_ = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_list_iso_ctype__ = -# 116 "standard.mly" - ( x :: xs ) -# 14707 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_list_iso_decl_var__ = -# 114 "standard.mly" - ( [] ) -# 14724 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in + let ispure : 'tv_pure = Obj.magic ispure in + let ar : 'tv_arity = Obj.magic ar in + let _startpos = _startpos_ar_ in + let _endpos = _endpos__5_ in + let _v : 'tv_metadec = let kindfn = + let ty = + +# 39 "standard.mly" + ( None ) +# 19501 "parser_cocci_menhir.ml" + + in + +# 420 "parser_cocci_menhir.mly" + ( (fun arity name pure check_meta constraints -> + let tok = check_meta(Ast.MetaConstDecl(arity,name,ty)) in + !Data.add_const_meta ty name constraints pure; tok) ) +# 19509 "parser_cocci_menhir.ml" + + in + +# 274 "parser_cocci_menhir.mly" + ( P.create_metadec_ne ar ispure kindfn ids ) +# 19515 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14732,42 +19523,63 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = x00; + MenhirLib.EngineTypes.startp = _startpos_x00_; + MenhirLib.EngineTypes.endp = _endpos_x00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ispure; + MenhirLib.EngineTypes.startp = _startpos_ispure_; + MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ar; + MenhirLib.EngineTypes.startp = _startpos_ar_; + MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; }; } = _menhir_stack in - let xs : 'tv_list_iso_decl_var__ = Obj.magic xs in - let x : 'tv_iso_decl_var_ = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_list_iso_decl_var__ = -# 116 "standard.mly" - ( x :: xs ) -# 14754 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_list_iso_dexpr__ = -# 114 "standard.mly" - ( [] ) -# 14771 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in + let x00 : 'tv_meta_exp_type = Obj.magic x00 in + let ispure : 'tv_pure = Obj.magic ispure in + let ar : 'tv_arity = Obj.magic ar in + let _startpos = _startpos_ar_ in + let _endpos = _endpos__6_ in + let _v : 'tv_metadec = let kindfn = + let x0 = x00 in + let ty = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 19569 "parser_cocci_menhir.ml" + + in + +# 420 "parser_cocci_menhir.mly" + ( (fun arity name pure check_meta constraints -> + let tok = check_meta(Ast.MetaConstDecl(arity,name,ty)) in + !Data.add_const_meta ty name constraints pure; tok) ) +# 19577 "parser_cocci_menhir.ml" + + in + +# 274 "parser_cocci_menhir.mly" + ( P.create_metadec_ne ar ispure kindfn ids ) +# 19583 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14779,25 +19591,48 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ispure; + MenhirLib.EngineTypes.startp = _startpos_ispure_; + MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ar; + MenhirLib.EngineTypes.startp = _startpos_ar_; + MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; } = _menhir_stack in - let xs : 'tv_list_iso_dexpr__ = Obj.magic xs in - let x : 'tv_iso_dexpr_ = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_list_iso_dexpr__ = -# 116 "standard.mly" - ( x :: xs ) -# 14801 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_ceq__ = Obj.magic ids in + let ispure : 'tv_pure = Obj.magic ispure in + let ar : 'tv_arity = Obj.magic ar in + let _startpos = _startpos_ar_ in + let _endpos = _endpos__5_ in + let _v : 'tv_metadec = let kindfn = + +# 426 "parser_cocci_menhir.mly" + ( (fun arity name pure check_meta constraints -> + let tok = check_meta(Ast.MetaExpDecl(arity,name,None)) in + !Data.add_exp_meta None name constraints pure; tok) ) +# 19630 "parser_cocci_menhir.ml" + + in + +# 278 "parser_cocci_menhir.mly" + ( P.create_metadec_ne ar ispure kindfn ids ) +# 19636 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14808,13 +19643,68 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_list_iso_nest_start__ = -# 114 "standard.mly" - ( [] ) -# 14818 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = vl0; + MenhirLib.EngineTypes.startp = _startpos_vl0_; + MenhirLib.EngineTypes.endp = _endpos_vl0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ispure; + MenhirLib.EngineTypes.startp = _startpos_ispure_; + MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ar; + MenhirLib.EngineTypes.startp = _startpos_ar_; + MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_ceq__ = Obj.magic ids in + let vl0 : 'tv_meta_exp_type = Obj.magic vl0 in + let ispure : 'tv_pure = Obj.magic ispure in + let ar : 'tv_arity = Obj.magic ar in + let _startpos = _startpos_ar_ in + let _endpos = _endpos__5_ in + let _v : 'tv_metadec = let kindfn = + let vl = vl0 in + +# 430 "parser_cocci_menhir.mly" + ( (fun arity name pure check_meta constraints -> + let ty = Some vl in + List.iter + (function c -> + match Ast0.unwrap c with + Ast0.Constant(_) -> + if not + (List.exists + (function + Type_cocci.BaseType(Type_cocci.IntType) -> true + | Type_cocci.BaseType(Type_cocci.ShortType) -> true + | Type_cocci.BaseType(Type_cocci.LongType) -> true + | _ -> false) + vl) + then failwith "metavariable with int constraint must be an int" + | _ -> ()) + constraints; + let tok = check_meta(Ast.MetaExpDecl(arity,name,ty)) in + !Data.add_exp_meta ty name constraints pure; tok) ) +# 19702 "parser_cocci_menhir.ml" + + in + +# 278 "parser_cocci_menhir.mly" + ( P.create_metadec_ne ar ispure kindfn ids ) +# 19708 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14826,42 +19716,45 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = a; + MenhirLib.EngineTypes.startp = _startpos_a_; + MenhirLib.EngineTypes.endp = _endpos_a_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ar; + MenhirLib.EngineTypes.startp = _startpos_ar_; + MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; } = _menhir_stack in - let xs : 'tv_list_iso_nest_start__ = Obj.magic xs in - let x : 'tv_iso_nest_start_ = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_list_iso_nest_start__ = -# 116 "standard.mly" - ( x :: xs ) -# 14848 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_list_iso_single_statement__ = -# 114 "standard.mly" - ( [] ) -# 14865 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_pos__ = Obj.magic ids in + let a : 'tv_option_TPosAny_ = Obj.magic a in + let ar : 'tv_arity = Obj.magic ar in + let _startpos = _startpos_ar_ in + let _endpos = _endpos__5_ in + let _v : 'tv_metadec = +# 284 "parser_cocci_menhir.mly" + ( (if !Data.in_generating + then failwith "position variables not allowed in a generated rule file"); + let kindfn arity name pure check_meta constraints = + let tok = check_meta(Ast.MetaPosDecl(arity,name)) in + let any = match a with None -> Ast.PER | Some _ -> Ast.ALL in + !Data.add_pos_meta name constraints any; tok in + P.create_metadec_ne ar false kindfn ids ) +# 19758 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14873,42 +19766,62 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.startp = _startpos__9_; + MenhirLib.EngineTypes.endp = _endpos__9_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = id; + MenhirLib.EngineTypes.startp = _startpos_id_; + MenhirLib.EngineTypes.endp = _endpos_id_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ispure; + MenhirLib.EngineTypes.startp = _startpos_ispure_; + MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ar; + MenhirLib.EngineTypes.startp = _startpos_ar_; + MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; }; } = _menhir_stack in - let xs : 'tv_list_iso_single_statement__ = Obj.magic xs in - let x : 'tv_iso_single_statement_ = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_list_iso_single_statement__ = -# 116 "standard.mly" - ( x :: xs ) -# 14895 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_list_mzl_ctype__ = -# 114 "standard.mly" - ( [] ) -# 14912 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in + let id : 'tv_pure_ident_or_meta_ident = Obj.magic id in + let ispure : 'tv_pure = Obj.magic ispure in + let ar : 'tv_arity = Obj.magic ar in + let _startpos = _startpos_ar_ in + let _endpos = _endpos__9_ in + let _v : 'tv_metadec = +# 294 "parser_cocci_menhir.mly" + ( P.create_len_metadec ar ispure + (fun lenname arity name pure check_meta -> + let tok = + check_meta(Ast.MetaParamListDecl(arity,name,Some lenname)) in + !Data.add_paramlist_meta name (Some lenname) pure; tok) + id ids ) +# 19825 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14920,25 +19833,62 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.startp = _startpos__9_; + MenhirLib.EngineTypes.endp = _endpos__9_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ids; + MenhirLib.EngineTypes.startp = _startpos_ids_; + MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = id; + MenhirLib.EngineTypes.startp = _startpos_id_; + MenhirLib.EngineTypes.endp = _endpos_id_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ispure; + MenhirLib.EngineTypes.startp = _startpos_ispure_; + MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ar; + MenhirLib.EngineTypes.startp = _startpos_ar_; + MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; }; } = _menhir_stack in - let xs : 'tv_list_mzl_ctype__ = Obj.magic xs in - let x : 'tv_mzl_ctype_ = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_list_mzl_ctype__ = -# 116 "standard.mly" - ( x :: xs ) -# 14942 "parser_cocci_menhir.ml" + let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in + let id : 'tv_pure_ident_or_meta_ident = Obj.magic id in + let ispure : 'tv_pure = Obj.magic ispure in + let ar : 'tv_arity = Obj.magic ar in + let _startpos = _startpos_ar_ in + let _endpos = _endpos__9_ in + let _v : 'tv_metadec = +# 303 "parser_cocci_menhir.mly" + ( P.create_len_metadec ar ispure + (fun lenname arity name pure check_meta -> + let tok = + check_meta(Ast.MetaExpListDecl(arity,name,Some lenname)) in + !Data.add_explist_meta name (Some lenname) pure; tok) + id ids ) +# 19892 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14949,13 +19899,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_list_mzl_eexpr__ = -# 114 "standard.mly" - ( [] ) -# 14959 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.semv = b; + MenhirLib.EngineTypes.startp = _startpos_b_; + MenhirLib.EngineTypes.endp = _endpos_b_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = a; + MenhirLib.EngineTypes.startp = _startpos_a_; + MenhirLib.EngineTypes.endp = _endpos_a_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let b : 'tv_list_mzl_ctype__ = Obj.magic b in + let a : 'tv_ctype = Obj.magic a in + let _startpos = _startpos_a_ in + let _endpos = _endpos_b_ in + let _v : 'tv_midzero_list_ctype_ctype_ = +# 1816 "parser_cocci_menhir.mly" + ( let (mids,code) = List.split b in (mids,(a::code)) ) +# 19922 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14967,25 +19930,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = b; + MenhirLib.EngineTypes.startp = _startpos_b_; + MenhirLib.EngineTypes.endp = _endpos_b_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = a; + MenhirLib.EngineTypes.startp = _startpos_a_; + MenhirLib.EngineTypes.endp = _endpos_a_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let xs : 'tv_list_mzl_eexpr__ = Obj.magic xs in - let x : 'tv_mzl_eexpr_ = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_list_mzl_eexpr__ = -# 116 "standard.mly" - ( x :: xs ) -# 14989 "parser_cocci_menhir.ml" + let b : 'tv_list_mzl_eexpr__ = Obj.magic b in + let a : 'tv_eexpr = Obj.magic a in + let _startpos = _startpos_a_ in + let _endpos = _endpos_b_ in + let _v : 'tv_midzero_list_eexpr_eexpr_ = +# 1816 "parser_cocci_menhir.mly" + ( let (mids,code) = List.split b in (mids,(a::code)) ) +# 19952 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -14996,13 +19959,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_list_mzl_fun_after_dots_or__ = -# 114 "standard.mly" - ( [] ) -# 15006 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.semv = b; + MenhirLib.EngineTypes.startp = _startpos_b_; + MenhirLib.EngineTypes.endp = _endpos_b_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = a; + MenhirLib.EngineTypes.startp = _startpos_a_; + MenhirLib.EngineTypes.endp = _endpos_a_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let b : 'tv_list_mzl_eexpr__ = Obj.magic b in + let a : 'tv_expr = Obj.magic a in + let _startpos = _startpos_a_ in + let _endpos = _endpos_b_ in + let _v : 'tv_midzero_list_expr_eexpr_ = +# 1816 "parser_cocci_menhir.mly" + ( let (mids,code) = List.split b in (mids,(a::code)) ) +# 19982 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15014,25 +19990,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = b; + MenhirLib.EngineTypes.startp = _startpos_b_; + MenhirLib.EngineTypes.endp = _endpos_b_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = a; + MenhirLib.EngineTypes.startp = _startpos_a_; + MenhirLib.EngineTypes.endp = _endpos_a_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let xs : 'tv_list_mzl_fun_after_dots_or__ = Obj.magic xs in - let x : 'tv_mzl_fun_after_dots_or_ = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_list_mzl_fun_after_dots_or__ = -# 116 "standard.mly" - ( x :: xs ) -# 15036 "parser_cocci_menhir.ml" + let b : 'tv_list_mzl_fun_after_dots_or__ = Obj.magic b in + let a : 'tv_fun_after_stm = Obj.magic a in + let _startpos = _startpos_a_ in + let _endpos = _endpos_b_ in + let _v : 'tv_midzero_list_fun_after_stm_fun_after_dots_or_ = +# 1816 "parser_cocci_menhir.mly" + ( let (mids,code) = List.split b in (mids,(a::code)) ) +# 20012 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15043,13 +20019,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_list_mzl_fun_start__ = -# 114 "standard.mly" - ( [] ) -# 15053 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.semv = b; + MenhirLib.EngineTypes.startp = _startpos_b_; + MenhirLib.EngineTypes.endp = _endpos_b_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = a; + MenhirLib.EngineTypes.startp = _startpos_a_; + MenhirLib.EngineTypes.endp = _endpos_a_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let b : 'tv_list_mzl_fun_start__ = Obj.magic b in + let a : 'tv_fun_start = Obj.magic a in + let _startpos = _startpos_a_ in + let _endpos = _endpos_b_ in + let _v : 'tv_midzero_list_fun_start_fun_start_ = +# 1816 "parser_cocci_menhir.mly" + ( let (mids,code) = List.split b in (mids,(a::code)) ) +# 20042 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15061,25 +20050,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = b; + MenhirLib.EngineTypes.startp = _startpos_b_; + MenhirLib.EngineTypes.endp = _endpos_b_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = a; + MenhirLib.EngineTypes.startp = _startpos_a_; + MenhirLib.EngineTypes.endp = _endpos_a_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let xs : 'tv_list_mzl_fun_start__ = Obj.magic xs in - let x : 'tv_mzl_fun_start_ = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_list_mzl_fun_start__ = -# 116 "standard.mly" - ( x :: xs ) -# 15083 "parser_cocci_menhir.ml" + let b : 'tv_list_mzl_rule_elem_statement__ = Obj.magic b in + let a : 'tv_rule_elem_statement = Obj.magic a in + let _startpos = _startpos_a_ in + let _endpos = _endpos_b_ in + let _v : 'tv_midzero_list_rule_elem_statement_rule_elem_statement_ = +# 1816 "parser_cocci_menhir.mly" + ( let (mids,code) = List.split b in (mids,(a::code)) ) +# 20072 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15090,13 +20079,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_list_mzl_rule_elem_statement__ = -# 114 "standard.mly" - ( [] ) -# 15100 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.semv = b; + MenhirLib.EngineTypes.startp = _startpos_b_; + MenhirLib.EngineTypes.endp = _endpos_b_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = a; + MenhirLib.EngineTypes.startp = _startpos_a_; + MenhirLib.EngineTypes.endp = _endpos_a_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let b : 'tv_list_mzl_statement__ = Obj.magic b in + let a : 'tv_statement = Obj.magic a in + let _startpos = _startpos_a_ in + let _endpos = _endpos_b_ in + let _v : 'tv_midzero_list_statement_statement_ = +# 1816 "parser_cocci_menhir.mly" + ( let (mids,code) = List.split b in (mids,(a::code)) ) +# 20102 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15108,25 +20110,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = b; + MenhirLib.EngineTypes.startp = _startpos_b_; + MenhirLib.EngineTypes.endp = _endpos_b_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = f; + MenhirLib.EngineTypes.startp = _startpos_f_; + MenhirLib.EngineTypes.endp = _endpos_f_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let xs : 'tv_list_mzl_rule_elem_statement__ = Obj.magic xs in - let x : 'tv_mzl_rule_elem_statement_ = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_list_mzl_rule_elem_statement__ = -# 116 "standard.mly" - ( x :: xs ) -# 15130 "parser_cocci_menhir.ml" + let b : 'tv_loption_minus_start_ = Obj.magic b in + let f : 'tv_loption_filespec_ = Obj.magic f in + let _startpos = _startpos_f_ in + let _endpos = _endpos_b_ in + let _v : 'tv_minus_body = +# 597 "parser_cocci_menhir.mly" + ( match f@b(*@ew*) with + [] -> raise (Semantic_cocci.Semantic "minus slice can't be empty") + | code -> Top_level.top_level code ) +# 20134 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15137,13 +20141,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_list_mzl_statement__ = -# 114 "standard.mly" - ( [] ) -# 15147 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.semv = b; + MenhirLib.EngineTypes.startp = _startpos_b_; + MenhirLib.EngineTypes.endp = _endpos_b_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = f; + MenhirLib.EngineTypes.startp = _startpos_f_; + MenhirLib.EngineTypes.endp = _endpos_f_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let b : 'tv_top_eexpr = Obj.magic b in + let f : 'tv_loption_filespec_ = Obj.magic f in + let _startpos = _startpos_f_ in + let _endpos = _endpos_b_ in + let _v : 'tv_minus_exp_body = +# 611 "parser_cocci_menhir.mly" + ( match f@[b](*@ew*) with + [] -> raise (Semantic_cocci.Semantic "minus slice can't be empty") + | code -> Top_level.top_level code ) +# 20166 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15155,25 +20174,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let xs : 'tv_list_mzl_statement__ = Obj.magic xs in - let x : 'tv_mzl_statement_ = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_list_mzl_statement__ = -# 116 "standard.mly" - ( x :: xs ) -# 15177 "parser_cocci_menhir.ml" + let _1 : 'tv_minus_exp_body = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : ( +# 137 "parser_cocci_menhir.mly" + (Ast0_cocci.rule) +# 20194 "parser_cocci_menhir.ml" + ) = +# 177 "parser_cocci_menhir.mly" + ( _1 ) +# 20198 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15184,13 +20205,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_list_pair_edots_when_TEllipsis_eexpr__dexpr__ = -# 114 "standard.mly" - ( [] ) -# 15194 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let m : 'tv_minus_exp_body = Obj.magic m in + let _startpos = _startpos_m_ in + let _endpos = _endpos__2_ in + let _v : ( +# 137 "parser_cocci_menhir.mly" + (Ast0_cocci.rule) +# 20226 "parser_cocci_menhir.ml" + ) = +# 177 "parser_cocci_menhir.mly" + ( m ) +# 20230 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15202,40 +20238,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = y0; - MenhirLib.EngineTypes.startp = _startpos_y0_; - MenhirLib.EngineTypes.endp = _endpos_y0_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let xs : 'tv_list_pair_edots_when_TEllipsis_eexpr__dexpr__ = Obj.magic xs in - let y0 : 'tv_dexpr = Obj.magic y0 in - let x0 : 'tv_edots_when_TEllipsis_eexpr_ = Obj.magic x0 in - let _startpos = _startpos_x0_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_list_pair_edots_when_TEllipsis_eexpr__dexpr__ = let x = - let y = y0 in - let x = x0 in - -# 70 "standard.mly" - ( (x, y) ) -# 15233 "parser_cocci_menhir.ml" - - in - -# 116 "standard.mly" - ( x :: xs ) -# 15239 "parser_cocci_menhir.ml" + let m : 'tv_minus_exp_body = Obj.magic m in + let _startpos = _startpos_m_ in + let _endpos = _endpos__2_ in + let _v : ( +# 137 "parser_cocci_menhir.mly" + (Ast0_cocci.rule) +# 20258 "parser_cocci_menhir.ml" + ) = +# 178 "parser_cocci_menhir.mly" + ( m ) +# 20262 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15246,13 +20269,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_list_whenppdecs_ = -# 114 "standard.mly" - ( [] ) -# 15256 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _1 : 'tv_minus_body = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : ( +# 134 "parser_cocci_menhir.mly" + (Ast0_cocci.rule) +# 20290 "parser_cocci_menhir.ml" + ) = +# 173 "parser_cocci_menhir.mly" + ( _1 ) +# 20294 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15264,25 +20302,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let xs : 'tv_list_whenppdecs_ = Obj.magic xs in - let x : 'tv_whenppdecs = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_list_whenppdecs_ = -# 116 "standard.mly" - ( x :: xs ) -# 15286 "parser_cocci_menhir.ml" + let m : 'tv_minus_body = Obj.magic m in + let _startpos = _startpos_m_ in + let _endpos = _endpos__2_ in + let _v : ( +# 134 "parser_cocci_menhir.mly" + (Ast0_cocci.rule) +# 20322 "parser_cocci_menhir.ml" + ) = +# 173 "parser_cocci_menhir.mly" + ( m ) +# 20326 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15293,13 +20333,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_loption_choose_iso_ = -# 57 "standard.mly" - ( [] ) -# 15303 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let m : 'tv_minus_body = Obj.magic m in + let _startpos = _startpos_m_ in + let _endpos = _endpos__2_ in + let _v : ( +# 134 "parser_cocci_menhir.mly" + (Ast0_cocci.rule) +# 20354 "parser_cocci_menhir.ml" + ) = +# 174 "parser_cocci_menhir.mly" + ( m ) +# 20358 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15312,18 +20367,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let x : 'tv_choose_iso = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_loption_choose_iso_ = -# 59 "standard.mly" - ( x ) -# 15327 "parser_cocci_menhir.ml" + let _1 : 'tv_fundecl = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_minus_start = +# 1625 "parser_cocci_menhir.mly" + ( [Ast0.wrap(Ast0.DECL(_1))] ) +# 20382 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15334,13 +20389,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_loption_disable_ = -# 57 "standard.mly" - ( [] ) -# 15344 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_ctype = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_minus_start = +# 1626 "parser_cocci_menhir.mly" + ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Ty(_1))))] ) +# 20406 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15353,18 +20415,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let x : 'tv_disable = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_loption_disable_ = -# 59 "standard.mly" - ( x ) -# 15368 "parser_cocci_menhir.ml" + let _1 : 'tv_top_init = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_minus_start = +# 1627 "parser_cocci_menhir.mly" + ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.TopInit(_1))))] ) +# 20430 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15375,13 +20437,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_loption_error_words_ = -# 57 "standard.mly" - ( [] ) -# 15385 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_minus_start = +# 1629 "parser_cocci_menhir.mly" + ( List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1 ) +# 20454 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15393,19 +20462,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = b; + MenhirLib.EngineTypes.startp = _startpos_b_; + MenhirLib.EngineTypes.endp = _endpos_b_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = a; + MenhirLib.EngineTypes.startp = _startpos_a_; + MenhirLib.EngineTypes.endp = _endpos_a_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let x : 'tv_error_words = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_loption_error_words_ = -# 59 "standard.mly" - ( x ) -# 15409 "parser_cocci_menhir.ml" + let b : 'tv_ctype = Obj.magic b in + let a : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 20481 "parser_cocci_menhir.ml" + ) = Obj.magic a in + let _startpos = _startpos_a_ in + let _endpos = _endpos_b_ in + let _v : 'tv_mzl_ctype_ = +# 1819 "parser_cocci_menhir.mly" + ( (P.clt2mcode "|" a, b) ) +# 20488 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15416,13 +20495,30 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_loption_filespec_ = -# 57 "standard.mly" - ( [] ) -# 15426 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.semv = b; + MenhirLib.EngineTypes.startp = _startpos_b_; + MenhirLib.EngineTypes.endp = _endpos_b_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = a; + MenhirLib.EngineTypes.startp = _startpos_a_; + MenhirLib.EngineTypes.endp = _endpos_a_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let b : 'tv_eexpr = Obj.magic b in + let a : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 20515 "parser_cocci_menhir.ml" + ) = Obj.magic a in + let _startpos = _startpos_a_ in + let _endpos = _endpos_b_ in + let _v : 'tv_mzl_eexpr_ = +# 1819 "parser_cocci_menhir.mly" + ( (P.clt2mcode "|" a, b) ) +# 20522 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15434,19 +20530,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = b; + MenhirLib.EngineTypes.startp = _startpos_b_; + MenhirLib.EngineTypes.endp = _endpos_b_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = a; + MenhirLib.EngineTypes.startp = _startpos_a_; + MenhirLib.EngineTypes.endp = _endpos_a_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let x : 'tv_filespec = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_loption_filespec_ = -# 59 "standard.mly" - ( x ) -# 15450 "parser_cocci_menhir.ml" + let b : 'tv_fun_after_dots_or = Obj.magic b in + let a : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 20549 "parser_cocci_menhir.ml" + ) = Obj.magic a in + let _startpos = _startpos_a_ in + let _endpos = _endpos_b_ in + let _v : 'tv_mzl_fun_after_dots_or_ = +# 1819 "parser_cocci_menhir.mly" + ( (P.clt2mcode "|" a, b) ) +# 20556 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15457,13 +20563,30 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_loption_minus_start_ = -# 57 "standard.mly" - ( [] ) -# 15467 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.semv = b; + MenhirLib.EngineTypes.startp = _startpos_b_; + MenhirLib.EngineTypes.endp = _endpos_b_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = a; + MenhirLib.EngineTypes.startp = _startpos_a_; + MenhirLib.EngineTypes.endp = _endpos_a_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let b : 'tv_fun_start = Obj.magic b in + let a : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 20583 "parser_cocci_menhir.ml" + ) = Obj.magic a in + let _startpos = _startpos_a_ in + let _endpos = _endpos_b_ in + let _v : 'tv_mzl_fun_start_ = +# 1819 "parser_cocci_menhir.mly" + ( (P.clt2mcode "|" a, b) ) +# 20590 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15475,19 +20598,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = b; + MenhirLib.EngineTypes.startp = _startpos_b_; + MenhirLib.EngineTypes.endp = _endpos_b_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = a; + MenhirLib.EngineTypes.startp = _startpos_a_; + MenhirLib.EngineTypes.endp = _endpos_a_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let x : 'tv_minus_start = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_loption_minus_start_ = -# 59 "standard.mly" - ( x ) -# 15491 "parser_cocci_menhir.ml" + let b : 'tv_rule_elem_statement = Obj.magic b in + let a : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 20617 "parser_cocci_menhir.ml" + ) = Obj.magic a in + let _startpos = _startpos_a_ in + let _endpos = _endpos_b_ in + let _v : 'tv_mzl_rule_elem_statement_ = +# 1819 "parser_cocci_menhir.mly" + ( (P.clt2mcode "|" a, b) ) +# 20624 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15498,13 +20631,30 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_loption_not_ceq_ = -# 57 "standard.mly" - ( [] ) -# 15508 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.semv = b; + MenhirLib.EngineTypes.startp = _startpos_b_; + MenhirLib.EngineTypes.endp = _endpos_b_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = a; + MenhirLib.EngineTypes.startp = _startpos_a_; + MenhirLib.EngineTypes.endp = _endpos_a_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let b : 'tv_statement = Obj.magic b in + let a : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 20651 "parser_cocci_menhir.ml" + ) = Obj.magic a in + let _startpos = _startpos_a_ in + let _endpos = _endpos_b_ in + let _v : 'tv_mzl_statement_ = +# 1819 "parser_cocci_menhir.mly" + ( (P.clt2mcode "|" a, b) ) +# 20658 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15517,18 +20667,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let x : 'tv_not_ceq = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_loption_not_ceq_ = -# 59 "standard.mly" - ( x ) -# 15532 "parser_cocci_menhir.ml" + let _1 : 'tv_decl = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_name_opt_decl = +# 818 "parser_cocci_menhir.mly" + ( _1 ) +# 20682 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15539,13 +20689,81 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_loption_not_eq_ = -# 57 "standard.mly" - ( [] ) -# 15549 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.semv = rp1; + MenhirLib.EngineTypes.startp = _startpos_rp1_; + MenhirLib.EngineTypes.endp = _endpos_rp1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = lp1; + MenhirLib.EngineTypes.startp = _startpos_lp1_; + MenhirLib.EngineTypes.endp = _endpos_lp1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = rp; + MenhirLib.EngineTypes.startp = _startpos_rp_; + MenhirLib.EngineTypes.endp = _endpos_rp_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = s; + MenhirLib.EngineTypes.startp = _startpos_s_; + MenhirLib.EngineTypes.endp = _endpos_s_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = lp; + MenhirLib.EngineTypes.startp = _startpos_lp_; + MenhirLib.EngineTypes.endp = _endpos_lp_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let rp1 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 20733 "parser_cocci_menhir.ml" + ) = Obj.magic rp1 in + let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in + let lp1 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 20739 "parser_cocci_menhir.ml" + ) = Obj.magic lp1 in + let rp : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 20744 "parser_cocci_menhir.ml" + ) = Obj.magic rp in + let s : ( +# 99 "parser_cocci_menhir.mly" + (Data.clt) +# 20749 "parser_cocci_menhir.ml" + ) = Obj.magic s in + let lp : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 20754 "parser_cocci_menhir.ml" + ) = Obj.magic lp in + let t : 'tv_ctype = Obj.magic t in + let _startpos = _startpos_t_ in + let _endpos = _endpos_rp1_ in + let _v : 'tv_name_opt_decl = +# 821 "parser_cocci_menhir.mly" + ( let fnptr = + Ast0.wrap + (Ast0.FunctionPointer + (t,P.clt2mcode "(" lp,P.clt2mcode "*" s,P.clt2mcode ")" rp, + P.clt2mcode "(" lp1,d,P.clt2mcode ")" rp1)) in + Ast0.wrap(Ast0.Param(fnptr, None)) ) +# 20767 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15557,19 +20775,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let x : 'tv_not_eq = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_loption_not_eq_ = -# 59 "standard.mly" - ( x ) -# 15573 "parser_cocci_menhir.ml" + let _2 : 'tv_nest_after_stm = Obj.magic _2 in + let _1 : 'tv_decl_statement_expr = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_nest_after_dots = +# 1740 "parser_cocci_menhir.mly" + (_1@_2) +# 20797 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15580,13 +20804,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_loption_not_eqe_ = -# 57 "standard.mly" - ( [] ) -# 15590 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : 'tv_nest_after_exp = Obj.magic _2 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_nest_after_dots = +# 1741 "parser_cocci_menhir.mly" + (_2) +# 20825 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15598,19 +20833,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let x : 'tv_not_eqe = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_loption_not_eqe_ = -# 59 "standard.mly" - ( x ) -# 15614 "parser_cocci_menhir.ml" + let _2 : 'tv_nest_after_exp = Obj.magic _2 in + let _1 : 'tv_expr = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_nest_after_dots = +# 1742 "parser_cocci_menhir.mly" + ((Ast0.wrap(Ast0.Exp(_1)))::_2) +# 20855 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15624,10 +20865,10 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in let _endpos = _startpos in - let _v : 'tv_loption_not_pos_ = -# 57 "standard.mly" - ( [] ) -# 15631 "parser_cocci_menhir.ml" + let _v : 'tv_nest_after_exp = +# 1750 "parser_cocci_menhir.mly" + ([]) +# 20872 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15639,19 +20880,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let x : 'tv_not_pos = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_loption_not_pos_ = -# 59 "standard.mly" - ( x ) -# 15655 "parser_cocci_menhir.ml" + let _2 : 'tv_nest_after_dots = Obj.magic _2 in + let _1 : 'tv_stm_dots = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_nest_after_exp = +# 1751 "parser_cocci_menhir.mly" + (_1::_2) +# 20902 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15665,10 +20912,10 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in let _endpos = _startpos in - let _v : 'tv_loption_plus_start_ = -# 57 "standard.mly" - ( [] ) -# 15672 "parser_cocci_menhir.ml" + let _v : 'tv_nest_after_stm = +# 1745 "parser_cocci_menhir.mly" + ([]) +# 20919 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15680,19 +20927,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let x : 'tv_plus_start = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_loption_plus_start_ = -# 59 "standard.mly" - ( x ) -# 15696 "parser_cocci_menhir.ml" + let _2 : 'tv_nest_after_dots = Obj.magic _2 in + let _1 : 'tv_stm_dots = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_nest_after_stm = +# 1746 "parser_cocci_menhir.mly" + (_1::_2) +# 20949 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15704,19 +20957,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let t : 'tv_ctype = Obj.magic t in - let _startpos = _startpos_t_ in - let _endpos = _endpos_t_ in - let _v : 'tv_meta_exp_type = -# 453 "parser_cocci_menhir.mly" - ( [Ast0_cocci.ast0_type_to_type t] ) -# 15720 "parser_cocci_menhir.ml" + let _2 : 'tv_nest_after_stm = Obj.magic _2 in + let _1 : 'tv_decl_statement = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_nest_after_stm = +# 1747 "parser_cocci_menhir.mly" + (_1@_2) +# 20979 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15728,35 +20987,41 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = m; - MenhirLib.EngineTypes.startp = _startpos_m_; - MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.semv = c; + MenhirLib.EngineTypes.startp = _startpos_c_; + MenhirLib.EngineTypes.endp = _endpos_c_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let m : 'tv_list_TMul_ = Obj.magic m in - let t : 'tv_comma_list_ctype_ = Obj.magic t in + let c : ( +# 73 "parser_cocci_menhir.mly" + (Data.clt) +# 21010 "parser_cocci_menhir.ml" + ) = Obj.magic c in + let e : 'tv_expr_dots_TEllipsis_ = Obj.magic e in + let _1 : ( +# 73 "parser_cocci_menhir.mly" + (Data.clt) +# 21016 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos_m_ in - let _v : 'tv_meta_exp_type = -# 455 "parser_cocci_menhir.mly" - ( List.map - (function x -> P.ty_pointerify (Ast0_cocci.ast0_type_to_type x) m) - t ) -# 15760 "parser_cocci_menhir.ml" + let _endpos = _endpos_c_ in + let _v : 'tv_nest_expressions = +# 1199 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.NestExpr(P.clt2mcode "<..." _1, + Ast0.wrap(Ast0.DOTS(e (P.mkedots "..."))), + P.clt2mcode "...>" c, None, false)) ) +# 21025 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15768,12 +21033,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = c; + MenhirLib.EngineTypes.startp = _startpos_c_; + MenhirLib.EngineTypes.endp = _endpos_c_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -15783,18 +21049,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let _3 : 'tv_pure_ident = Obj.magic _3 in + let c : ( +# 73 "parser_cocci_menhir.mly" + (Data.clt) +# 21056 "parser_cocci_menhir.ml" + ) = Obj.magic c in + let e : 'tv_expr_dots_TEllipsis_ = Obj.magic e in let _1 : ( -# 47 "parser_cocci_menhir.mly" - (string) -# 15791 "parser_cocci_menhir.ml" +# 73 "parser_cocci_menhir.mly" + (Data.clt) +# 21062 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_meta_ident = -# 1399 "parser_cocci_menhir.mly" - ( (Some _1,P.id2name _3) ) -# 15798 "parser_cocci_menhir.ml" + let _endpos = _endpos_c_ in + let _v : 'tv_nest_expressions = +# 1203 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.NestExpr(P.clt2mcode "<+..." _1, + Ast0.wrap(Ast0.DOTS(e (P.mkedots "..."))), + P.clt2mcode "...+>" c, None, true)) ) +# 21071 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15807,22 +21080,74 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = m; - MenhirLib.EngineTypes.startp = _startpos_m_; - MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_nest_after_dots = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_nest_start = +# 1737 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.DOTS(_1)) ) +# 21095 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : ( +# 168 "parser_cocci_menhir.mly" + (unit) +# 21117 "parser_cocci_menhir.ml" + ) = +# 1882 "parser_cocci_menhir.mly" + ( () ) +# 21121 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let m : 'tv_metadec = Obj.magic m in - let _startpos = _startpos_m_ in - let _endpos = _endpos_m_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in let _v : ( -# 157 "parser_cocci_menhir.mly" - ((Ast_cocci.metavar,Ast_cocci.metavar) Common.either list) -# 15822 "parser_cocci_menhir.ml" +# 168 "parser_cocci_menhir.mly" + (unit) +# 21147 "parser_cocci_menhir.ml" ) = -# 181 "parser_cocci_menhir.mly" - ( m (!Ast0.rule_name) ) -# 15826 "parser_cocci_menhir.ml" +# 1883 "parser_cocci_menhir.mly" + ( () ) +# 21151 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15834,48 +21159,21 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ispure; - MenhirLib.EngineTypes.startp = _startpos_ispure_; - MenhirLib.EngineTypes.endp = _endpos_ispure_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ar; - MenhirLib.EngineTypes.startp = _startpos_ar_; - MenhirLib.EngineTypes.endp = _endpos_ar_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in - let ispure : 'tv_pure = Obj.magic ispure in - let ar : 'tv_arity = Obj.magic ar in - let _startpos = _startpos_ar_ in - let _endpos = _endpos__5_ in - let _v : 'tv_metadec = let kindfn = - -# 318 "parser_cocci_menhir.mly" - ( (fun arity name pure check_meta -> - let tok = check_meta(Ast.MetaParamDecl(arity,name)) in - !Data.add_param_meta name pure; tok) ) -# 15873 "parser_cocci_menhir.ml" - - in - -# 263 "parser_cocci_menhir.mly" - ( P.create_metadec ar ispure kindfn ids ) -# 15879 "parser_cocci_menhir.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : ( +# 168 "parser_cocci_menhir.mly" + (unit) +# 21173 "parser_cocci_menhir.ml" + ) = +# 1884 "parser_cocci_menhir.mly" + ( () ) +# 21177 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15887,52 +21185,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.semv = dg; + MenhirLib.EngineTypes.startp = _startpos_dg_; + MenhirLib.EngineTypes.endp = _endpos_dg_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ispure; - MenhirLib.EngineTypes.startp = _startpos_ispure_; - MenhirLib.EngineTypes.endp = _endpos_ispure_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ar; - MenhirLib.EngineTypes.startp = _startpos_ar_; - MenhirLib.EngineTypes.endp = _endpos_ar_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = g; + MenhirLib.EngineTypes.startp = _startpos_g_; + MenhirLib.EngineTypes.endp = _endpos_g_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in - let ispure : 'tv_pure = Obj.magic ispure in - let ar : 'tv_arity = Obj.magic ar in - let _startpos = _startpos_ar_ in - let _endpos = _endpos__6_ in - let _v : 'tv_metadec = let kindfn = - -# 322 "parser_cocci_menhir.mly" - ( (fun arity name pure check_meta -> - let tok = check_meta(Ast.MetaParamListDecl(arity,name,None)) in - !Data.add_paramlist_meta name None pure; tok) ) -# 15930 "parser_cocci_menhir.ml" - - in - -# 263 "parser_cocci_menhir.mly" - ( P.create_metadec ar ispure kindfn ids ) -# 15936 "parser_cocci_menhir.ml" + let dg : 'tv_list_pair_edots_when_TEllipsis_eexpr__dexpr__ = Obj.magic dg in + let g : 'tv_dexpr = Obj.magic g in + let _startpos = _startpos_g_ in + let _endpos = _endpos_dg_ in + let _v : 'tv_no_dot_start_end_dexpr_edots_when_TEllipsis_eexpr__ = +# 1367 "parser_cocci_menhir.mly" + ( function dot_builder -> + g :: (List.concat(List.map (function (d,g) -> [dot_builder d;g]) dg)) ) +# 21208 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -15944,52 +21216,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ispure; - MenhirLib.EngineTypes.startp = _startpos_ispure_; - MenhirLib.EngineTypes.endp = _endpos_ispure_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ar; - MenhirLib.EngineTypes.startp = _startpos_ar_; - MenhirLib.EngineTypes.endp = _endpos_ar_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in - let ispure : 'tv_pure = Obj.magic ispure in - let ar : 'tv_arity = Obj.magic ar in - let _startpos = _startpos_ar_ in - let _endpos = _endpos__6_ in - let _v : 'tv_metadec = let kindfn = - -# 326 "parser_cocci_menhir.mly" - ( (fun arity name pure check_meta -> - let tok = check_meta(Ast.MetaExpListDecl(arity,name,None)) in - !Data.add_explist_meta name None pure; tok) ) -# 15987 "parser_cocci_menhir.ml" - - in - -# 263 "parser_cocci_menhir.mly" - ( P.create_metadec ar ispure kindfn ids ) -# 15993 "parser_cocci_menhir.ml" + let x : ( +# 99 "parser_cocci_menhir.mly" + (Data.clt) +# 21229 "parser_cocci_menhir.ml" + ) = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_nonempty_list_TMul_ = +# 124 "standard.mly" + ( [ x ] ) +# 21236 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16001,48 +21244,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ispure; - MenhirLib.EngineTypes.startp = _startpos_ispure_; - MenhirLib.EngineTypes.endp = _endpos_ispure_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ar; - MenhirLib.EngineTypes.startp = _startpos_ar_; - MenhirLib.EngineTypes.endp = _endpos_ar_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in - let ispure : 'tv_pure = Obj.magic ispure in - let ar : 'tv_arity = Obj.magic ar in - let _startpos = _startpos_ar_ in - let _endpos = _endpos__5_ in - let _v : 'tv_metadec = let kindfn = - -# 330 "parser_cocci_menhir.mly" - ( (fun arity name pure check_meta -> - let tok = check_meta(Ast.MetaTypeDecl(arity,name)) in - !Data.add_type_meta name pure; tok) ) -# 16040 "parser_cocci_menhir.ml" - - in - -# 263 "parser_cocci_menhir.mly" - ( P.create_metadec ar ispure kindfn ids ) -# 16046 "parser_cocci_menhir.ml" + let xs : 'tv_nonempty_list_TMul_ = Obj.magic xs in + let x : ( +# 99 "parser_cocci_menhir.mly" + (Data.clt) +# 21263 "parser_cocci_menhir.ml" + ) = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_nonempty_list_TMul_ = +# 126 "standard.mly" + ( x :: xs ) +# 21270 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16053,49 +21277,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ispure; - MenhirLib.EngineTypes.startp = _startpos_ispure_; - MenhirLib.EngineTypes.endp = _endpos_ispure_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ar; - MenhirLib.EngineTypes.startp = _startpos_ar_; - MenhirLib.EngineTypes.endp = _endpos_ar_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; + let { + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in - let ispure : 'tv_pure = Obj.magic ispure in - let ar : 'tv_arity = Obj.magic ar in - let _startpos = _startpos_ar_ in - let _endpos = _endpos__5_ in - let _v : 'tv_metadec = let kindfn = - -# 334 "parser_cocci_menhir.mly" - ( (fun arity name pure check_meta -> - let tok = check_meta(Ast.MetaInitDecl(arity,name)) in - !Data.add_init_meta name pure; tok) ) -# 16093 "parser_cocci_menhir.ml" - - in - -# 263 "parser_cocci_menhir.mly" - ( P.create_metadec ar ispure kindfn ids ) -# 16099 "parser_cocci_menhir.ml" + let i : 'tv_ident_or_const = Obj.magic i in + let _startpos = _startpos__1_ in + let _endpos = _endpos_i_ in + let _v : 'tv_not_ceq = +# 1458 "parser_cocci_menhir.mly" + ( (if !Data.in_iso + then failwith "constraints not allowed in iso file"); + (if !Data.in_generating + then failwith "constraints not allowed in a generated rule file"); + [i] ) +# 21302 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16107,48 +21310,35 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.semv = l; + MenhirLib.EngineTypes.startp = _startpos_l_; + MenhirLib.EngineTypes.endp = _endpos_l_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ispure; - MenhirLib.EngineTypes.startp = _startpos_ispure_; - MenhirLib.EngineTypes.endp = _endpos_ispure_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ar; - MenhirLib.EngineTypes.startp = _startpos_ar_; - MenhirLib.EngineTypes.endp = _endpos_ar_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in - let ispure : 'tv_pure = Obj.magic ispure in - let ar : 'tv_arity = Obj.magic ar in - let _startpos = _startpos_ar_ in - let _endpos = _endpos__5_ in - let _v : 'tv_metadec = let kindfn = - -# 338 "parser_cocci_menhir.mly" - ( (fun arity name pure check_meta -> - let tok = check_meta(Ast.MetaStmDecl(arity,name)) in - !Data.add_stm_meta name pure; tok) ) -# 16146 "parser_cocci_menhir.ml" - - in - -# 263 "parser_cocci_menhir.mly" - ( P.create_metadec ar ispure kindfn ids ) -# 16152 "parser_cocci_menhir.ml" + let l : 'tv_comma_list_ident_or_const_ = Obj.magic l in + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : 'tv_not_ceq = +# 1464 "parser_cocci_menhir.mly" + ( (if !Data.in_iso + then failwith "constraints not allowed in iso file"); + (if !Data.in_generating + then failwith "constraints not allowed in a generated rule file"); + l ) +# 21342 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16160,52 +21350,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ispure; - MenhirLib.EngineTypes.startp = _startpos_ispure_; - MenhirLib.EngineTypes.endp = _endpos_ispure_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ar; - MenhirLib.EngineTypes.startp = _startpos_ar_; - MenhirLib.EngineTypes.endp = _endpos_ar_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in - let ispure : 'tv_pure = Obj.magic ispure in - let ar : 'tv_arity = Obj.magic ar in - let _startpos = _startpos_ar_ in - let _endpos = _endpos__6_ in - let _v : 'tv_metadec = let kindfn = - -# 342 "parser_cocci_menhir.mly" - ( (fun arity name pure check_meta -> - let tok = check_meta(Ast.MetaStmListDecl(arity,name)) in - !Data.add_stmlist_meta name pure; tok) ) -# 16203 "parser_cocci_menhir.ml" - - in - -# 263 "parser_cocci_menhir.mly" - ( P.create_metadec ar ispure kindfn ids ) -# 16209 "parser_cocci_menhir.ml" + let i : 'tv_pure_ident = Obj.magic i in + let _startpos = _startpos__1_ in + let _endpos = _endpos_i_ in + let _v : 'tv_not_eq = +# 1425 "parser_cocci_menhir.mly" + ( (if !Data.in_iso + then failwith "constraints not allowed in iso file"); + (if !Data.in_generating + (* pb: constraints not stored with metavars; too lazy to search for + them in the pattern *) + then failwith "constraints not allowed in a generated rule file"); + [Ast0.wrap(Ast0.Id(P.id2mcode i))] ) +# 21376 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16217,49 +21384,35 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.semv = l; + MenhirLib.EngineTypes.startp = _startpos_l_; + MenhirLib.EngineTypes.endp = _endpos_l_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ispure; - MenhirLib.EngineTypes.startp = _startpos_ispure_; - MenhirLib.EngineTypes.endp = _endpos_ispure_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ar; - MenhirLib.EngineTypes.startp = _startpos_ar_; - MenhirLib.EngineTypes.endp = _endpos_ar_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in - let ispure : 'tv_pure = Obj.magic ispure in - let ar : 'tv_arity = Obj.magic ar in - let _startpos = _startpos_ar_ in - let _endpos = _endpos__5_ in - let _v : 'tv_metadec = let kindfn = - -# 346 "parser_cocci_menhir.mly" - ( (fun arity (_,name) pure check_meta -> - if arity = Ast.NONE && pure = Ast0.Impure - then (!Data.add_type_name name; []) - else raise (Semantic_cocci.Semantic "bad typedef")) ) -# 16257 "parser_cocci_menhir.ml" - - in - -# 263 "parser_cocci_menhir.mly" - ( P.create_metadec ar ispure kindfn ids ) -# 16263 "parser_cocci_menhir.ml" + let l : 'tv_comma_list_pure_ident_ = Obj.magic l in + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : 'tv_not_eq = +# 1433 "parser_cocci_menhir.mly" + ( (if !Data.in_iso + then failwith "constraints not allowed in iso file"); + (if !Data.in_generating + then failwith "constraints not allowed in a generated rule file"); + List.map (function i -> Ast0.wrap(Ast0.Id(P.id2mcode i))) l ) +# 21416 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16271,53 +21424,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ispure; - MenhirLib.EngineTypes.startp = _startpos_ispure_; - MenhirLib.EngineTypes.endp = _endpos_ispure_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ar; - MenhirLib.EngineTypes.startp = _startpos_ar_; - MenhirLib.EngineTypes.endp = _endpos_ar_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in - let ispure : 'tv_pure = Obj.magic ispure in - let ar : 'tv_arity = Obj.magic ar in - let _startpos = _startpos_ar_ in - let _endpos = _endpos__6_ in - let _v : 'tv_metadec = let kindfn = - -# 351 "parser_cocci_menhir.mly" - ( (fun arity (_,name) pure check_meta -> - if arity = Ast.NONE && pure = Ast0.Impure - then (!Data.add_declarer_name name; []) - else raise (Semantic_cocci.Semantic "bad declarer")) ) -# 16315 "parser_cocci_menhir.ml" - - in - -# 263 "parser_cocci_menhir.mly" - ( P.create_metadec ar ispure kindfn ids ) -# 16321 "parser_cocci_menhir.ml" + let i : 'tv_pure_ident = Obj.magic i in + let _startpos = _startpos__1_ in + let _endpos = _endpos_i_ in + let _v : 'tv_not_eqe = +# 1441 "parser_cocci_menhir.mly" + ( (if !Data.in_iso + then failwith "constraints not allowed in iso file"); + (if !Data.in_generating + then failwith "constraints not allowed in a generated rule file"); + [Ast0.wrap(Ast0.Ident(Ast0.wrap(Ast0.Id(P.id2mcode i))))] ) +# 21448 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16329,53 +21456,75 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.semv = l; + MenhirLib.EngineTypes.startp = _startpos_l_; + MenhirLib.EngineTypes.endp = _endpos_l_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ispure; - MenhirLib.EngineTypes.startp = _startpos_ispure_; - MenhirLib.EngineTypes.endp = _endpos_ispure_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ar; - MenhirLib.EngineTypes.startp = _startpos_ar_; - MenhirLib.EngineTypes.endp = _endpos_ar_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in - let ispure : 'tv_pure = Obj.magic ispure in - let ar : 'tv_arity = Obj.magic ar in - let _startpos = _startpos_ar_ in - let _endpos = _endpos__6_ in - let _v : 'tv_metadec = let kindfn = - -# 356 "parser_cocci_menhir.mly" - ( (fun arity (_,name) pure check_meta -> - if arity = Ast.NONE && pure = Ast0.Impure - then (!Data.add_iterator_name name; []) - else raise (Semantic_cocci.Semantic "bad iterator")) ) -# 16373 "parser_cocci_menhir.ml" - - in - -# 263 "parser_cocci_menhir.mly" - ( P.create_metadec ar ispure kindfn ids ) -# 16379 "parser_cocci_menhir.ml" + let l : 'tv_comma_list_pure_ident_ = Obj.magic l in + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : 'tv_not_eqe = +# 1447 "parser_cocci_menhir.mly" + ( (if !Data.in_iso + then failwith "constraints not allowed in iso file"); + (if !Data.in_generating + then failwith "constraints not allowed in a generated rule file"); + List.map + (function i -> + Ast0.wrap(Ast0.Ident(Ast0.wrap(Ast0.Id(P.id2mcode i))))) + l ) +# 21491 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let i : 'tv_meta_ident = Obj.magic i in + let _startpos = _startpos__1_ in + let _endpos = _endpos_i_ in + let _v : 'tv_not_pos = +# 1478 "parser_cocci_menhir.mly" + ( (if !Data.in_iso + then failwith "constraints not allowed in iso file"); + (if !Data.in_generating + then failwith "constraints not allowed in a generated rule file"); + match i with + (None,_) -> failwith "constraint must be an inherited variable" + | (Some rule,name) -> + let i = (rule,name) in + P.check_meta(Ast.MetaPosDecl(Ast.NONE,i)); + [i] ) +# 21528 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16390,9 +21539,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.startp = _startpos__4_; MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.semv = l; + MenhirLib.EngineTypes.startp = _startpos_l_; + MenhirLib.EngineTypes.endp = _endpos_l_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; @@ -16405,22 +21554,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_seed_ = Obj.magic ids in + let l : 'tv_comma_list_meta_ident_ = Obj.magic l in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in - let _v : 'tv_metadec = let kindfn = - -# 312 "parser_cocci_menhir.mly" - ( (fun name check_meta seed -> - let tok = check_meta(Ast.MetaFreshIdDecl(name,seed)) in - !Data.add_fresh_id_meta name; tok) ) -# 16418 "parser_cocci_menhir.ml" - - in - -# 266 "parser_cocci_menhir.mly" - ( P.create_fresh_metadec kindfn ids ) -# 16424 "parser_cocci_menhir.ml" + let _v : 'tv_not_pos = +# 1489 "parser_cocci_menhir.mly" + ( (if !Data.in_iso + then failwith "constraints not allowed in iso file"); + (if !Data.in_generating + then failwith "constraints not allowed in a generated rule file"); + List.map + (function + (None,_) -> + failwith "constraint must be an inherited variable" + | (Some rule,name) -> + let i = (rule,name) in + P.check_meta(Ast.MetaPosDecl(Ast.NONE,i)); + i) + l ) +# 21576 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16432,48 +21584,111 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ispure; - MenhirLib.EngineTypes.startp = _startpos_ispure_; - MenhirLib.EngineTypes.endp = _endpos_ispure_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ar; - MenhirLib.EngineTypes.startp = _startpos_ar_; - MenhirLib.EngineTypes.endp = _endpos_ar_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eq__ = Obj.magic ids in - let ispure : 'tv_pure = Obj.magic ispure in - let ar : 'tv_arity = Obj.magic ar in - let _startpos = _startpos_ar_ in - let _endpos = _endpos__5_ in - let _v : 'tv_metadec = let kindfn = - -# 364 "parser_cocci_menhir.mly" - ( (fun arity name pure check_meta constraints -> - let tok = check_meta(Ast.MetaIdDecl(arity,name)) in - !Data.add_id_meta name constraints pure; tok) ) -# 16471 "parser_cocci_menhir.ml" - - in - -# 270 "parser_cocci_menhir.mly" - ( P.create_metadec_ne ar ispure kindfn ids ) -# 16477 "parser_cocci_menhir.ml" + let _1 : 'tv_decl = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_one_dec_decl_ = +# 1563 "parser_cocci_menhir.mly" + ( _1 ) +# 21600 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : ( +# 66 "parser_cocci_menhir.mly" + (Parse_aux.list_info) +# 21621 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_one_dec_decl_ = +# 1565 "parser_cocci_menhir.mly" + ( let (nm,lenname,pure,clt) = _1 in + let nm = P.clt2mcode nm clt in + let lenname = + match lenname with + Some nm -> Some(P.clt2mcode nm clt) + | None -> None in + Ast0.wrap(Ast0.MetaParamList(nm,lenname,pure)) ) +# 21634 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_name_opt_decl = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_one_dec_name_opt_decl_ = +# 1563 "parser_cocci_menhir.mly" + ( _1 ) +# 21658 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : ( +# 66 "parser_cocci_menhir.mly" + (Parse_aux.list_info) +# 21679 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_one_dec_name_opt_decl_ = +# 1565 "parser_cocci_menhir.mly" + ( let (nm,lenname,pure,clt) = _1 in + let nm = P.clt2mcode nm clt in + let lenname = + match lenname with + Some nm -> Some(P.clt2mcode nm clt) + | None -> None in + Ast0.wrap(Ast0.MetaParamList(nm,lenname,pure)) ) +# 21692 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16485,48 +21700,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ispure; - MenhirLib.EngineTypes.startp = _startpos_ispure_; - MenhirLib.EngineTypes.endp = _endpos_ispure_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ar; - MenhirLib.EngineTypes.startp = _startpos_ar_; - MenhirLib.EngineTypes.endp = _endpos_ar_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eq__ = Obj.magic ids in - let ispure : 'tv_pure = Obj.magic ispure in - let ar : 'tv_arity = Obj.magic ar in - let _startpos = _startpos_ar_ in - let _endpos = _endpos__5_ in - let _v : 'tv_metadec = let kindfn = - -# 368 "parser_cocci_menhir.mly" - ( (fun arity name pure check_meta constraints -> - let tok = check_meta(Ast.MetaFuncDecl(arity,name)) in - !Data.add_func_meta name constraints pure; tok) ) -# 16524 "parser_cocci_menhir.ml" - - in - -# 270 "parser_cocci_menhir.mly" - ( P.create_metadec_ne ar ispure kindfn ids ) -# 16530 "parser_cocci_menhir.ml" + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 21718 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let t : 'tv_ctype = Obj.magic t in + let _startpos = _startpos_t_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_one_decl_var = +# 988 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.TyDecl(t,P.clt2mcode ";" pv)) ) +# 21726 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16538,53 +21734,43 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ispure; - MenhirLib.EngineTypes.startp = _startpos_ispure_; - MenhirLib.EngineTypes.endp = _endpos_ispure_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ar; - MenhirLib.EngineTypes.startp = _startpos_ar_; - MenhirLib.EngineTypes.endp = _endpos_ar_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eq__ = Obj.magic ids in - let ispure : 'tv_pure = Obj.magic ispure in - let ar : 'tv_arity = Obj.magic ar in - let _startpos = _startpos_ar_ in - let _endpos = _endpos__6_ in - let _v : 'tv_metadec = let kindfn = + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 21757 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let d : 'tv_d_ident = Obj.magic d in + let t : 'tv_ctype = Obj.magic t in + let _startpos = _startpos_t_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_one_decl_var = let s = -# 372 "parser_cocci_menhir.mly" - ( (fun arity name pure check_meta constraints -> - let tok = check_meta(Ast.MetaLocalFuncDecl(arity,name)) in - !Data.add_local_func_meta name constraints pure; - tok) ) -# 16582 "parser_cocci_menhir.ml" +# 39 "standard.mly" + ( None ) +# 21767 "parser_cocci_menhir.ml" in -# 270 "parser_cocci_menhir.mly" - ( P.create_metadec_ne ar ispure kindfn ids ) -# 16588 "parser_cocci_menhir.ml" +# 990 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)) ) +# 21774 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16596,48 +21782,50 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ispure; - MenhirLib.EngineTypes.startp = _startpos_ispure_; - MenhirLib.EngineTypes.endp = _endpos_ispure_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ar; - MenhirLib.EngineTypes.startp = _startpos_ar_; - MenhirLib.EngineTypes.endp = _endpos_ar_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eq__ = Obj.magic ids in - let ispure : 'tv_pure = Obj.magic ispure in - let ar : 'tv_arity = Obj.magic ar in - let _startpos = _startpos_ar_ in - let _endpos = _endpos__5_ in - let _v : 'tv_metadec = let kindfn = + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 21810 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let d : 'tv_d_ident = Obj.magic d in + let t : 'tv_ctype = Obj.magic t in + let x0 : 'tv_storage = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_one_decl_var = let s = + let x = x0 in -# 377 "parser_cocci_menhir.mly" - ( (fun arity name pure check_meta constraints -> - let tok = check_meta(Ast.MetaDeclarerDecl(arity,name)) in - !Data.add_declarer_meta name constraints pure; tok) ) -# 16635 "parser_cocci_menhir.ml" +# 41 "standard.mly" + ( Some x ) +# 21822 "parser_cocci_menhir.ml" in -# 270 "parser_cocci_menhir.mly" - ( P.create_metadec_ne ar ispure kindfn ids ) -# 16641 "parser_cocci_menhir.ml" +# 990 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)) ) +# 21829 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16649,48 +21837,83 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = f; + MenhirLib.EngineTypes.startp = _startpos_f_; + MenhirLib.EngineTypes.endp = _endpos_f_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let f : 'tv_funproto = Obj.magic f in + let _startpos = _startpos_f_ in + let _endpos = _endpos_f_ in + let _v : 'tv_one_decl_var = +# 992 "parser_cocci_menhir.mly" + ( f ) +# 21853 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.semv = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = q; + MenhirLib.EngineTypes.startp = _startpos_q_; + MenhirLib.EngineTypes.endp = _endpos_q_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ispure; - MenhirLib.EngineTypes.startp = _startpos_ispure_; - MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ar; - MenhirLib.EngineTypes.startp = _startpos_ar_; - MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eq__ = Obj.magic ids in - let ispure : 'tv_pure = Obj.magic ispure in - let ar : 'tv_arity = Obj.magic ar in - let _startpos = _startpos_ar_ in - let _endpos = _endpos__5_ in - let _v : 'tv_metadec = let kindfn = + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 21894 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 21900 "parser_cocci_menhir.ml" + ) = Obj.magic q in + let d : 'tv_d_ident = Obj.magic d in + let t : 'tv_ctype = Obj.magic t in + let _startpos = _startpos_t_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_one_decl_var = let s = -# 381 "parser_cocci_menhir.mly" - ( (fun arity name pure check_meta constraints -> - let tok = check_meta(Ast.MetaIteratorDecl(arity,name)) in - !Data.add_iterator_meta name constraints pure; tok) ) -# 16688 "parser_cocci_menhir.ml" +# 39 "standard.mly" + ( None ) +# 21910 "parser_cocci_menhir.ml" in -# 270 "parser_cocci_menhir.mly" - ( P.create_metadec_ne ar ispure kindfn ids ) -# 16694 "parser_cocci_menhir.ml" +# 994 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv)) ) +# 21917 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16702,48 +21925,66 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.semv = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = q; + MenhirLib.EngineTypes.startp = _startpos_q_; + MenhirLib.EngineTypes.endp = _endpos_q_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ispure; - MenhirLib.EngineTypes.startp = _startpos_ispure_; - MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ar; - MenhirLib.EngineTypes.startp = _startpos_ar_; - MenhirLib.EngineTypes.endp = _endpos_ar_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in - let ispure : 'tv_pure = Obj.magic ispure in - let ar : 'tv_arity = Obj.magic ar in - let _startpos = _startpos_ar_ in - let _endpos = _endpos__5_ in - let _v : 'tv_metadec = let kindfn = + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 21963 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 21969 "parser_cocci_menhir.ml" + ) = Obj.magic q in + let d : 'tv_d_ident = Obj.magic d in + let t : 'tv_ctype = Obj.magic t in + let x0 : 'tv_storage = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_one_decl_var = let s = + let x = x0 in -# 387 "parser_cocci_menhir.mly" - ( (fun arity name pure check_meta constraints -> - let tok = check_meta(Ast.MetaErrDecl(arity,name)) in - !Data.add_err_meta name constraints pure; tok) ) -# 16741 "parser_cocci_menhir.ml" +# 41 "standard.mly" + ( Some x ) +# 21981 "parser_cocci_menhir.ml" in -# 274 "parser_cocci_menhir.mly" - ( P.create_metadec_ne ar ispure kindfn ids ) -# 16747 "parser_cocci_menhir.ml" +# 994 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv)) ) +# 21988 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16755,67 +21996,51 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = l0; - MenhirLib.EngineTypes.startp = _startpos_l0_; - MenhirLib.EngineTypes.endp = _endpos_l0_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ispure; - MenhirLib.EngineTypes.startp = _startpos_ispure_; - MenhirLib.EngineTypes.endp = _endpos_ispure_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ar; - MenhirLib.EngineTypes.startp = _startpos_ar_; - MenhirLib.EngineTypes.endp = _endpos_ar_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in - let l0 : 'tv_option_TLocal_ = Obj.magic l0 in - let ispure : 'tv_pure = Obj.magic ispure in - let ar : 'tv_arity = Obj.magic ar in - let _startpos = _startpos_ar_ in - let _endpos = _endpos__6_ in - let _v : 'tv_metadec = let kindfn = - let l = l0 in - let ty = - + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 22019 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let d : 'tv_d_ident = Obj.magic d in + let i : 'tv_pure_ident = Obj.magic i in + let _startpos = _startpos_i_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_one_decl_var = let cv = + # 39 "standard.mly" ( None ) -# 16800 "parser_cocci_menhir.ml" - - in +# 22029 "parser_cocci_menhir.ml" -# 391 "parser_cocci_menhir.mly" - ( (fun arity name pure check_meta constraints -> - match l with - None -> - !Data.add_idexp_meta ty name constraints pure; - check_meta(Ast.MetaIdExpDecl(arity,name,ty)) - | Some _ -> - !Data.add_local_idexp_meta ty name constraints pure; - check_meta(Ast.MetaLocalIdExpDecl(arity,name,ty))) ) -# 16813 "parser_cocci_menhir.ml" + in + let s = + +# 39 "standard.mly" + ( None ) +# 22036 "parser_cocci_menhir.ml" in -# 274 "parser_cocci_menhir.mly" - ( P.create_metadec_ne ar ispure kindfn ids ) -# 16819 "parser_cocci_menhir.ml" +# 999 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in + Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)) ) +# 22044 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16827,75 +22052,121 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = x00; - MenhirLib.EngineTypes.startp = _startpos_x00_; - MenhirLib.EngineTypes.endp = _endpos_x00_; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = l0; - MenhirLib.EngineTypes.startp = _startpos_l0_; - MenhirLib.EngineTypes.endp = _endpos_l0_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ispure; - MenhirLib.EngineTypes.startp = _startpos_ispure_; - MenhirLib.EngineTypes.endp = _endpos_ispure_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ar; - MenhirLib.EngineTypes.startp = _startpos_ar_; - MenhirLib.EngineTypes.endp = _endpos_ar_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in - let x00 : 'tv_meta_exp_type = Obj.magic x00 in - let l0 : 'tv_option_TLocal_ = Obj.magic l0 in - let ispure : 'tv_pure = Obj.magic ispure in - let ar : 'tv_arity = Obj.magic ar in - let _startpos = _startpos_ar_ in - let _endpos = _endpos__7_ in - let _v : 'tv_metadec = let kindfn = - let x0 = x00 in - let l = l0 in - let ty = - let x = x0 in - + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 22080 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let d : 'tv_d_ident = Obj.magic d in + let i : 'tv_pure_ident = Obj.magic i in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_one_decl_var = let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 22092 "parser_cocci_menhir.ml" + + in + let s = + +# 39 "standard.mly" + ( None ) +# 22099 "parser_cocci_menhir.ml" + + in + +# 999 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in + Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)) ) +# 22107 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + } = _menhir_stack in + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 22143 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let d : 'tv_d_ident = Obj.magic d in + let i : 'tv_pure_ident = Obj.magic i in + let x0 : 'tv_storage = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_one_decl_var = let cv = + +# 39 "standard.mly" + ( None ) +# 22154 "parser_cocci_menhir.ml" + + in + let s = + let x = x0 in + # 41 "standard.mly" ( Some x ) -# 16880 "parser_cocci_menhir.ml" - - in - -# 391 "parser_cocci_menhir.mly" - ( (fun arity name pure check_meta constraints -> - match l with - None -> - !Data.add_idexp_meta ty name constraints pure; - check_meta(Ast.MetaIdExpDecl(arity,name,ty)) - | Some _ -> - !Data.add_local_idexp_meta ty name constraints pure; - check_meta(Ast.MetaLocalIdExpDecl(arity,name,ty))) ) -# 16893 "parser_cocci_menhir.ml" +# 22162 "parser_cocci_menhir.ml" in -# 274 "parser_cocci_menhir.mly" - ( P.create_metadec_ne ar ispure kindfn ids ) -# 16899 "parser_cocci_menhir.ml" +# 999 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in + Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)) ) +# 22170 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16907,68 +22178,65 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = m0; - MenhirLib.EngineTypes.startp = _startpos_m0_; - MenhirLib.EngineTypes.endp = _endpos_m0_; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = x1; + MenhirLib.EngineTypes.startp = _startpos_x1_; + MenhirLib.EngineTypes.endp = _endpos_x1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = l0; - MenhirLib.EngineTypes.startp = _startpos_l0_; - MenhirLib.EngineTypes.endp = _endpos_l0_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ispure; - MenhirLib.EngineTypes.startp = _startpos_ispure_; - MenhirLib.EngineTypes.endp = _endpos_ispure_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ar; - MenhirLib.EngineTypes.startp = _startpos_ar_; - MenhirLib.EngineTypes.endp = _endpos_ar_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in - let m0 : 'tv_nonempty_list_TMul_ = Obj.magic m0 in - let l0 : 'tv_option_TLocal_ = Obj.magic l0 in - let ispure : 'tv_pure = Obj.magic ispure in - let ar : 'tv_arity = Obj.magic ar in - let _startpos = _startpos_ar_ in - let _endpos = _endpos__7_ in - let _v : 'tv_metadec = let kindfn = - let m = m0 in - let l = l0 in + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 22211 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let d : 'tv_d_ident = Obj.magic d in + let i : 'tv_pure_ident = Obj.magic i in + let x1 : 'tv_const_vol = Obj.magic x1 in + let x0 : 'tv_storage = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_one_decl_var = let cv = + let x = x1 in -# 400 "parser_cocci_menhir.mly" - ( (fun arity name pure check_meta constraints -> - let ty = Some [P.ty_pointerify Type_cocci.Unknown m] in - match l with - None -> - !Data.add_idexp_meta ty name constraints pure; - check_meta(Ast.MetaIdExpDecl(arity,name,ty)) - | Some _ -> - !Data.add_local_idexp_meta ty name constraints pure; - check_meta(Ast.MetaLocalIdExpDecl(arity,name,ty))) ) -# 16966 "parser_cocci_menhir.ml" +# 41 "standard.mly" + ( Some x ) +# 22224 "parser_cocci_menhir.ml" + + in + let s = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 22232 "parser_cocci_menhir.ml" in -# 274 "parser_cocci_menhir.mly" - ( P.create_metadec_ne ar ispure kindfn ids ) -# 16972 "parser_cocci_menhir.ml" +# 999 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in + Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)) ) +# 22240 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -16980,56 +22248,69 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.semv = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = m0; - MenhirLib.EngineTypes.startp = _startpos_m0_; - MenhirLib.EngineTypes.endp = _endpos_m0_; + MenhirLib.EngineTypes.semv = q; + MenhirLib.EngineTypes.startp = _startpos_q_; + MenhirLib.EngineTypes.endp = _endpos_q_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ispure; - MenhirLib.EngineTypes.startp = _startpos_ispure_; - MenhirLib.EngineTypes.endp = _endpos_ispure_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ar; - MenhirLib.EngineTypes.startp = _startpos_ar_; - MenhirLib.EngineTypes.endp = _endpos_ar_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in - let m0 : 'tv_nonempty_list_TMul_ = Obj.magic m0 in - let ispure : 'tv_pure = Obj.magic ispure in - let ar : 'tv_arity = Obj.magic ar in - let _startpos = _startpos_ar_ in - let _endpos = _endpos__6_ in - let _v : 'tv_metadec = let kindfn = - let m = m0 in + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 22281 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 22287 "parser_cocci_menhir.ml" + ) = Obj.magic q in + let d : 'tv_d_ident = Obj.magic d in + let i : 'tv_pure_ident = Obj.magic i in + let _startpos = _startpos_i_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_one_decl_var = let cv = -# 410 "parser_cocci_menhir.mly" - ( (fun arity name pure check_meta constraints -> - let ty = Some [P.ty_pointerify Type_cocci.Unknown m] in - let tok = check_meta(Ast.MetaExpDecl(arity,name,ty)) in - !Data.add_exp_meta ty name constraints pure; tok) ) -# 17027 "parser_cocci_menhir.ml" +# 39 "standard.mly" + ( None ) +# 22297 "parser_cocci_menhir.ml" + + in + let s = + +# 39 "standard.mly" + ( None ) +# 22304 "parser_cocci_menhir.ml" in -# 274 "parser_cocci_menhir.mly" - ( P.create_metadec_ne ar ispure kindfn ids ) -# 17033 "parser_cocci_menhir.ml" +# 1004 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + !Data.add_type_name (P.id2name i); + let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in + Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e, + P.clt2mcode ";" pv)) ) +# 22314 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17041,60 +22322,76 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.semv = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = q; + MenhirLib.EngineTypes.startp = _startpos_q_; + MenhirLib.EngineTypes.endp = _endpos_q_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = vl0; - MenhirLib.EngineTypes.startp = _startpos_vl0_; - MenhirLib.EngineTypes.endp = _endpos_vl0_; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ispure; - MenhirLib.EngineTypes.startp = _startpos_ispure_; - MenhirLib.EngineTypes.endp = _endpos_ispure_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ar; - MenhirLib.EngineTypes.startp = _startpos_ar_; - MenhirLib.EngineTypes.endp = _endpos_ar_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in - let vl0 : 'tv_meta_exp_type = Obj.magic vl0 in - let ispure : 'tv_pure = Obj.magic ispure in - let ar : 'tv_arity = Obj.magic ar in - let _startpos = _startpos_ar_ in - let _endpos = _endpos__7_ in - let _v : 'tv_metadec = let kindfn = - let vl = vl0 in + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 22360 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 22366 "parser_cocci_menhir.ml" + ) = Obj.magic q in + let d : 'tv_d_ident = Obj.magic d in + let i : 'tv_pure_ident = Obj.magic i in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_one_decl_var = let cv = + let x = x0 in -# 415 "parser_cocci_menhir.mly" - ( (fun arity name pure check_meta constraints -> - let ty = Some (List.map (function x -> Type_cocci.Array x) vl) in - let tok = check_meta(Ast.MetaExpDecl(arity,name,ty)) in - !Data.add_exp_meta ty name constraints pure; tok) ) -# 17092 "parser_cocci_menhir.ml" +# 41 "standard.mly" + ( Some x ) +# 22378 "parser_cocci_menhir.ml" + + in + let s = + +# 39 "standard.mly" + ( None ) +# 22385 "parser_cocci_menhir.ml" in -# 274 "parser_cocci_menhir.mly" - ( P.create_metadec_ne ar ispure kindfn ids ) -# 17098 "parser_cocci_menhir.ml" +# 1004 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + !Data.add_type_name (P.id2name i); + let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in + Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e, + P.clt2mcode ";" pv)) ) +# 22395 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17106,55 +22403,76 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.semv = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = q; + MenhirLib.EngineTypes.startp = _startpos_q_; + MenhirLib.EngineTypes.endp = _endpos_q_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ispure; - MenhirLib.EngineTypes.startp = _startpos_ispure_; - MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ar; - MenhirLib.EngineTypes.startp = _startpos_ar_; - MenhirLib.EngineTypes.endp = _endpos_ar_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in - let ispure : 'tv_pure = Obj.magic ispure in - let ar : 'tv_arity = Obj.magic ar in - let _startpos = _startpos_ar_ in - let _endpos = _endpos__5_ in - let _v : 'tv_metadec = let kindfn = - let ty = - + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 22441 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 22447 "parser_cocci_menhir.ml" + ) = Obj.magic q in + let d : 'tv_d_ident = Obj.magic d in + let i : 'tv_pure_ident = Obj.magic i in + let x0 : 'tv_storage = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_one_decl_var = let cv = + # 39 "standard.mly" ( None ) -# 17144 "parser_cocci_menhir.ml" - - in +# 22458 "parser_cocci_menhir.ml" -# 420 "parser_cocci_menhir.mly" - ( (fun arity name pure check_meta constraints -> - let tok = check_meta(Ast.MetaConstDecl(arity,name,ty)) in - !Data.add_const_meta ty name constraints pure; tok) ) -# 17152 "parser_cocci_menhir.ml" + in + let s = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 22466 "parser_cocci_menhir.ml" in -# 274 "parser_cocci_menhir.mly" - ( P.create_metadec_ne ar ispure kindfn ids ) -# 17158 "parser_cocci_menhir.ml" +# 1004 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + !Data.add_type_name (P.id2name i); + let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in + Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e, + P.clt2mcode ";" pv)) ) +# 22476 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17166,63 +22484,83 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.semv = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = x00; - MenhirLib.EngineTypes.startp = _startpos_x00_; - MenhirLib.EngineTypes.endp = _endpos_x00_; + MenhirLib.EngineTypes.semv = q; + MenhirLib.EngineTypes.startp = _startpos_q_; + MenhirLib.EngineTypes.endp = _endpos_q_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ispure; - MenhirLib.EngineTypes.startp = _startpos_ispure_; - MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ar; - MenhirLib.EngineTypes.startp = _startpos_ar_; - MenhirLib.EngineTypes.endp = _endpos_ar_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = x1; + MenhirLib.EngineTypes.startp = _startpos_x1_; + MenhirLib.EngineTypes.endp = _endpos_x1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic ids in - let x00 : 'tv_meta_exp_type = Obj.magic x00 in - let ispure : 'tv_pure = Obj.magic ispure in - let ar : 'tv_arity = Obj.magic ar in - let _startpos = _startpos_ar_ in - let _endpos = _endpos__6_ in - let _v : 'tv_metadec = let kindfn = - let x0 = x00 in - let ty = - let x = x0 in - + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 22527 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 22533 "parser_cocci_menhir.ml" + ) = Obj.magic q in + let d : 'tv_d_ident = Obj.magic d in + let i : 'tv_pure_ident = Obj.magic i in + let x1 : 'tv_const_vol = Obj.magic x1 in + let x0 : 'tv_storage = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_one_decl_var = let cv = + let x = x1 in + # 41 "standard.mly" ( Some x ) -# 17212 "parser_cocci_menhir.ml" - - in +# 22546 "parser_cocci_menhir.ml" -# 420 "parser_cocci_menhir.mly" - ( (fun arity name pure check_meta constraints -> - let tok = check_meta(Ast.MetaConstDecl(arity,name,ty)) in - !Data.add_const_meta ty name constraints pure; tok) ) -# 17220 "parser_cocci_menhir.ml" + in + let s = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 22554 "parser_cocci_menhir.ml" in -# 274 "parser_cocci_menhir.mly" - ( P.create_metadec_ne ar ispure kindfn ids ) -# 17226 "parser_cocci_menhir.ml" +# 1004 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + !Data.add_type_name (P.id2name i); + let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in + Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e, + P.clt2mcode ";" pv)) ) +# 22564 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17234,48 +22572,104 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.semv = rp2; + MenhirLib.EngineTypes.startp = _startpos_rp2_; + MenhirLib.EngineTypes.endp = _endpos_rp2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = p; + MenhirLib.EngineTypes.startp = _startpos_p_; + MenhirLib.EngineTypes.endp = _endpos_p_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ispure; - MenhirLib.EngineTypes.startp = _startpos_ispure_; - MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.semv = lp2; + MenhirLib.EngineTypes.startp = _startpos_lp2_; + MenhirLib.EngineTypes.endp = _endpos_lp2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ar; - MenhirLib.EngineTypes.startp = _startpos_ar_; - MenhirLib.EngineTypes.endp = _endpos_ar_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = rp1; + MenhirLib.EngineTypes.startp = _startpos_rp1_; + MenhirLib.EngineTypes.endp = _endpos_rp1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = st; + MenhirLib.EngineTypes.startp = _startpos_st_; + MenhirLib.EngineTypes.endp = _endpos_st_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = lp1; + MenhirLib.EngineTypes.startp = _startpos_lp1_; + MenhirLib.EngineTypes.endp = _endpos_lp1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; }; }; }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_ceq__ = Obj.magic ids in - let ispure : 'tv_pure = Obj.magic ispure in - let ar : 'tv_arity = Obj.magic ar in - let _startpos = _startpos_ar_ in - let _endpos = _endpos__5_ in - let _v : 'tv_metadec = let kindfn = + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 22625 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let rp2 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 22630 "parser_cocci_menhir.ml" + ) = Obj.magic rp2 in + let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in + let lp2 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 22636 "parser_cocci_menhir.ml" + ) = Obj.magic lp2 in + let rp1 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 22641 "parser_cocci_menhir.ml" + ) = Obj.magic rp1 in + let d : 'tv_d_ident = Obj.magic d in + let st : ( +# 99 "parser_cocci_menhir.mly" + (Data.clt) +# 22647 "parser_cocci_menhir.ml" + ) = Obj.magic st in + let lp1 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 22652 "parser_cocci_menhir.ml" + ) = Obj.magic lp1 in + let t : 'tv_ctype = Obj.magic t in + let _startpos = _startpos_t_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_one_decl_var = let s = -# 426 "parser_cocci_menhir.mly" - ( (fun arity name pure check_meta constraints -> - let tok = check_meta(Ast.MetaExpDecl(arity,name,None)) in - !Data.add_exp_meta None name constraints pure; tok) ) -# 17273 "parser_cocci_menhir.ml" +# 39 "standard.mly" + ( None ) +# 22661 "parser_cocci_menhir.ml" in -# 278 "parser_cocci_menhir.mly" - ( P.create_metadec_ne ar ispure kindfn ids ) -# 17279 "parser_cocci_menhir.ml" +# 1014 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + let t = + Ast0.wrap + (Ast0.FunctionPointer + (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1, + P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in + Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)) ) +# 22673 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17287,67 +22681,111 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.semv = rp2; + MenhirLib.EngineTypes.startp = _startpos_rp2_; + MenhirLib.EngineTypes.endp = _endpos_rp2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = vl0; - MenhirLib.EngineTypes.startp = _startpos_vl0_; - MenhirLib.EngineTypes.endp = _endpos_vl0_; + MenhirLib.EngineTypes.semv = p; + MenhirLib.EngineTypes.startp = _startpos_p_; + MenhirLib.EngineTypes.endp = _endpos_p_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ispure; - MenhirLib.EngineTypes.startp = _startpos_ispure_; - MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.semv = lp2; + MenhirLib.EngineTypes.startp = _startpos_lp2_; + MenhirLib.EngineTypes.endp = _endpos_lp2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ar; - MenhirLib.EngineTypes.startp = _startpos_ar_; - MenhirLib.EngineTypes.endp = _endpos_ar_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = rp1; + MenhirLib.EngineTypes.startp = _startpos_rp1_; + MenhirLib.EngineTypes.endp = _endpos_rp1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = st; + MenhirLib.EngineTypes.startp = _startpos_st_; + MenhirLib.EngineTypes.endp = _endpos_st_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = lp1; + MenhirLib.EngineTypes.startp = _startpos_lp1_; + MenhirLib.EngineTypes.endp = _endpos_lp1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; }; }; }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_ceq__ = Obj.magic ids in - let vl0 : 'tv_meta_exp_type = Obj.magic vl0 in - let ispure : 'tv_pure = Obj.magic ispure in - let ar : 'tv_arity = Obj.magic ar in - let _startpos = _startpos_ar_ in - let _endpos = _endpos__5_ in - let _v : 'tv_metadec = let kindfn = - let vl = vl0 in + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 22739 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let rp2 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 22744 "parser_cocci_menhir.ml" + ) = Obj.magic rp2 in + let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in + let lp2 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 22750 "parser_cocci_menhir.ml" + ) = Obj.magic lp2 in + let rp1 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 22755 "parser_cocci_menhir.ml" + ) = Obj.magic rp1 in + let d : 'tv_d_ident = Obj.magic d in + let st : ( +# 99 "parser_cocci_menhir.mly" + (Data.clt) +# 22761 "parser_cocci_menhir.ml" + ) = Obj.magic st in + let lp1 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 22766 "parser_cocci_menhir.ml" + ) = Obj.magic lp1 in + let t : 'tv_ctype = Obj.magic t in + let x0 : 'tv_storage = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_one_decl_var = let s = + let x = x0 in -# 430 "parser_cocci_menhir.mly" - ( (fun arity name pure check_meta constraints -> - let ty = Some vl in - List.iter - (function c -> - match Ast0.unwrap c with - Ast0.Constant(_) -> - if not - (List.exists - (function - Type_cocci.BaseType(Type_cocci.IntType) -> true - | Type_cocci.BaseType(Type_cocci.ShortType) -> true - | Type_cocci.BaseType(Type_cocci.LongType) -> true - | _ -> false) - vl) - then failwith "metavariable with int constraint must be an int" - | _ -> ()) - constraints; - let tok = check_meta(Ast.MetaExpDecl(arity,name,ty)) in - !Data.add_exp_meta ty name constraints pure; tok) ) -# 17345 "parser_cocci_menhir.ml" +# 41 "standard.mly" + ( Some x ) +# 22777 "parser_cocci_menhir.ml" in -# 278 "parser_cocci_menhir.mly" - ( P.create_metadec_ne ar ispure kindfn ids ) -# 17351 "parser_cocci_menhir.ml" +# 1014 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + let t = + Ast0.wrap + (Ast0.FunctionPointer + (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1, + P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in + Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)) ) +# 22789 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17359,45 +22797,56 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { + MenhirLib.EngineTypes.semv = _5; MenhirLib.EngineTypes.startp = _startpos__5_; MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = a; - MenhirLib.EngineTypes.startp = _startpos_a_; - MenhirLib.EngineTypes.endp = _endpos_a_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ar; - MenhirLib.EngineTypes.startp = _startpos_ar_; - MenhirLib.EngineTypes.endp = _endpos_ar_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_with_not_eq_not_pos__ = Obj.magic ids in - let a : 'tv_option_TPosAny_ = Obj.magic a in - let ar : 'tv_arity = Obj.magic ar in - let _startpos = _startpos_ar_ in + let _5 : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 22830 "parser_cocci_menhir.ml" + ) = Obj.magic _5 in + let _4 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 22835 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr_list_option = Obj.magic _3 in + let _2 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 22841 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_decl_ident = Obj.magic _1 in + let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in - let _v : 'tv_metadec = -# 284 "parser_cocci_menhir.mly" - ( (if !Data.in_generating - then failwith "position variables not allowed in a generated rule file"); - let kindfn arity name pure check_meta constraints = - let tok = check_meta(Ast.MetaPosDecl(arity,name)) in - let any = match a with None -> Ast.PER | Some _ -> Ast.ALL in - !Data.add_pos_meta name constraints any; tok in - P.create_metadec_ne ar false kindfn ids ) -# 17401 "parser_cocci_menhir.ml" + let _v : 'tv_one_decl_var = +# 1022 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.MacroDecl(_1,P.clt2mcode "(" _2,_3, + P.clt2mcode ")" _4,P.clt2mcode ";" _5)) ) +# 22850 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17409,38 +22858,53 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__9_; - MenhirLib.EngineTypes.endp = _endpos__9_; + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.semv = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = q; + MenhirLib.EngineTypes.startp = _startpos_q_; + MenhirLib.EngineTypes.endp = _endpos_q_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = id; - MenhirLib.EngineTypes.startp = _startpos_id_; - MenhirLib.EngineTypes.endp = _endpos_id_; + MenhirLib.EngineTypes.semv = rp2; + MenhirLib.EngineTypes.startp = _startpos_rp2_; + MenhirLib.EngineTypes.endp = _endpos_rp2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = p; + MenhirLib.EngineTypes.startp = _startpos_p_; + MenhirLib.EngineTypes.endp = _endpos_p_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = lp2; + MenhirLib.EngineTypes.startp = _startpos_lp2_; + MenhirLib.EngineTypes.endp = _endpos_lp2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = rp1; + MenhirLib.EngineTypes.startp = _startpos_rp1_; + MenhirLib.EngineTypes.endp = _endpos_rp1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ispure; - MenhirLib.EngineTypes.startp = _startpos_ispure_; - MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ar; - MenhirLib.EngineTypes.startp = _startpos_ar_; - MenhirLib.EngineTypes.endp = _endpos_ar_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = st; + MenhirLib.EngineTypes.startp = _startpos_st_; + MenhirLib.EngineTypes.endp = _endpos_st_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = lp1; + MenhirLib.EngineTypes.startp = _startpos_lp1_; + MenhirLib.EngineTypes.endp = _endpos_lp1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; }; @@ -17450,21 +22914,64 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in - let id : 'tv_pure_ident_or_meta_ident = Obj.magic id in - let ispure : 'tv_pure = Obj.magic ispure in - let ar : 'tv_arity = Obj.magic ar in - let _startpos = _startpos_ar_ in - let _endpos = _endpos__9_ in - let _v : 'tv_metadec = -# 294 "parser_cocci_menhir.mly" - ( P.create_len_metadec ar ispure - (fun lenname arity name pure check_meta -> - let tok = - check_meta(Ast.MetaParamListDecl(arity,name,Some lenname)) in - !Data.add_paramlist_meta name (Some lenname) pure; tok) - id ids ) -# 17468 "parser_cocci_menhir.ml" + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 22921 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 22927 "parser_cocci_menhir.ml" + ) = Obj.magic q in + let rp2 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 22932 "parser_cocci_menhir.ml" + ) = Obj.magic rp2 in + let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in + let lp2 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 22938 "parser_cocci_menhir.ml" + ) = Obj.magic lp2 in + let rp1 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 22943 "parser_cocci_menhir.ml" + ) = Obj.magic rp1 in + let d : 'tv_d_ident = Obj.magic d in + let st : ( +# 99 "parser_cocci_menhir.mly" + (Data.clt) +# 22949 "parser_cocci_menhir.ml" + ) = Obj.magic st in + let lp1 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 22954 "parser_cocci_menhir.ml" + ) = Obj.magic lp1 in + let t : 'tv_ctype = Obj.magic t in + let _startpos = _startpos_t_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_one_decl_var = let s = + +# 39 "standard.mly" + ( None ) +# 22963 "parser_cocci_menhir.ml" + + in + +# 1028 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + let t = + Ast0.wrap + (Ast0.FunctionPointer + (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1, + P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in + Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))) +# 22975 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17476,38 +22983,58 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__9_; - MenhirLib.EngineTypes.endp = _endpos__9_; + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ids; - MenhirLib.EngineTypes.startp = _startpos_ids_; - MenhirLib.EngineTypes.endp = _endpos_ids_; + MenhirLib.EngineTypes.semv = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = q; + MenhirLib.EngineTypes.startp = _startpos_q_; + MenhirLib.EngineTypes.endp = _endpos_q_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = id; - MenhirLib.EngineTypes.startp = _startpos_id_; - MenhirLib.EngineTypes.endp = _endpos_id_; + MenhirLib.EngineTypes.semv = rp2; + MenhirLib.EngineTypes.startp = _startpos_rp2_; + MenhirLib.EngineTypes.endp = _endpos_rp2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = p; + MenhirLib.EngineTypes.startp = _startpos_p_; + MenhirLib.EngineTypes.endp = _endpos_p_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = lp2; + MenhirLib.EngineTypes.startp = _startpos_lp2_; + MenhirLib.EngineTypes.endp = _endpos_lp2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = rp1; + MenhirLib.EngineTypes.startp = _startpos_rp1_; + MenhirLib.EngineTypes.endp = _endpos_rp1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ispure; - MenhirLib.EngineTypes.startp = _startpos_ispure_; - MenhirLib.EngineTypes.endp = _endpos_ispure_; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ar; - MenhirLib.EngineTypes.startp = _startpos_ar_; - MenhirLib.EngineTypes.endp = _endpos_ar_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = st; + MenhirLib.EngineTypes.startp = _startpos_st_; + MenhirLib.EngineTypes.endp = _endpos_st_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = lp1; + MenhirLib.EngineTypes.startp = _startpos_lp1_; + MenhirLib.EngineTypes.endp = _endpos_lp1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; }; }; @@ -17517,51 +23044,66 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let ids : 'tv_comma_list_pure_ident_or_meta_ident_ = Obj.magic ids in - let id : 'tv_pure_ident_or_meta_ident = Obj.magic id in - let ispure : 'tv_pure = Obj.magic ispure in - let ar : 'tv_arity = Obj.magic ar in - let _startpos = _startpos_ar_ in - let _endpos = _endpos__9_ in - let _v : 'tv_metadec = -# 303 "parser_cocci_menhir.mly" - ( P.create_len_metadec ar ispure - (fun lenname arity name pure check_meta -> - let tok = - check_meta(Ast.MetaExpListDecl(arity,name,Some lenname)) in - !Data.add_explist_meta name (Some lenname) pure; tok) - id ids ) -# 17535 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = b; - MenhirLib.EngineTypes.startp = _startpos_b_; - MenhirLib.EngineTypes.endp = _endpos_b_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = a; - MenhirLib.EngineTypes.startp = _startpos_a_; - MenhirLib.EngineTypes.endp = _endpos_a_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let b : 'tv_list_mzl_ctype__ = Obj.magic b in - let a : 'tv_ctype = Obj.magic a in - let _startpos = _startpos_a_ in - let _endpos = _endpos_b_ in - let _v : 'tv_midzero_list_ctype_ctype_ = -# 1803 "parser_cocci_menhir.mly" - ( let (mids,code) = List.split b in (mids,(a::code)) ) -# 17565 "parser_cocci_menhir.ml" + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 23051 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let e : 'tv_initialize = Obj.magic e in + let q : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 23057 "parser_cocci_menhir.ml" + ) = Obj.magic q in + let rp2 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 23062 "parser_cocci_menhir.ml" + ) = Obj.magic rp2 in + let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in + let lp2 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 23068 "parser_cocci_menhir.ml" + ) = Obj.magic lp2 in + let rp1 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 23073 "parser_cocci_menhir.ml" + ) = Obj.magic rp1 in + let d : 'tv_d_ident = Obj.magic d in + let st : ( +# 99 "parser_cocci_menhir.mly" + (Data.clt) +# 23079 "parser_cocci_menhir.ml" + ) = Obj.magic st in + let lp1 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 23084 "parser_cocci_menhir.ml" + ) = Obj.magic lp1 in + let t : 'tv_ctype = Obj.magic t in + let x0 : 'tv_storage = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_one_decl_var = let s = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 23095 "parser_cocci_menhir.ml" + + in + +# 1028 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + let t = + Ast0.wrap + (Ast0.FunctionPointer + (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1, + P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in + Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))) +# 23107 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17572,26 +23114,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = b; - MenhirLib.EngineTypes.startp = _startpos_b_; - MenhirLib.EngineTypes.endp = _endpos_b_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = a; - MenhirLib.EngineTypes.startp = _startpos_a_; - MenhirLib.EngineTypes.endp = _endpos_a_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let b : 'tv_list_mzl_eexpr__ = Obj.magic b in - let a : 'tv_eexpr = Obj.magic a in - let _startpos = _startpos_a_ in - let _endpos = _endpos_b_ in - let _v : 'tv_midzero_list_eexpr_eexpr_ = -# 1803 "parser_cocci_menhir.mly" - ( let (mids,code) = List.split b in (mids,(a::code)) ) -# 17595 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_option_TLocal_ = +# 29 "standard.mly" + ( None ) +# 23124 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17603,25 +23132,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = b; - MenhirLib.EngineTypes.startp = _startpos_b_; - MenhirLib.EngineTypes.endp = _endpos_b_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = a; - MenhirLib.EngineTypes.startp = _startpos_a_; - MenhirLib.EngineTypes.endp = _endpos_a_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let b : 'tv_list_mzl_eexpr__ = Obj.magic b in - let a : 'tv_expr = Obj.magic a in - let _startpos = _startpos_a_ in - let _endpos = _endpos_b_ in - let _v : 'tv_midzero_list_expr_eexpr_ = -# 1803 "parser_cocci_menhir.mly" - ( let (mids,code) = List.split b in (mids,(a::code)) ) -# 17625 "parser_cocci_menhir.ml" + let x : unit = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_option_TLocal_ = +# 31 "standard.mly" + ( Some x ) +# 23148 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17632,26 +23155,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = b; - MenhirLib.EngineTypes.startp = _startpos_b_; - MenhirLib.EngineTypes.endp = _endpos_b_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = a; - MenhirLib.EngineTypes.startp = _startpos_a_; - MenhirLib.EngineTypes.endp = _endpos_a_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let b : 'tv_list_mzl_fun_after_dots_or__ = Obj.magic b in - let a : 'tv_fun_after_stm = Obj.magic a in - let _startpos = _startpos_a_ in - let _endpos = _endpos_b_ in - let _v : 'tv_midzero_list_fun_after_stm_fun_after_dots_or_ = -# 1803 "parser_cocci_menhir.mly" - ( let (mids,code) = List.split b in (mids,(a::code)) ) -# 17655 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_option_TPosAny_ = +# 29 "standard.mly" + ( None ) +# 23165 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17663,25 +23173,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = b; - MenhirLib.EngineTypes.startp = _startpos_b_; - MenhirLib.EngineTypes.endp = _endpos_b_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = a; - MenhirLib.EngineTypes.startp = _startpos_a_; - MenhirLib.EngineTypes.endp = _endpos_a_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let b : 'tv_list_mzl_fun_start__ = Obj.magic b in - let a : 'tv_fun_start = Obj.magic a in - let _startpos = _startpos_a_ in - let _endpos = _endpos_b_ in - let _v : 'tv_midzero_list_fun_start_fun_start_ = -# 1803 "parser_cocci_menhir.mly" - ( let (mids,code) = List.split b in (mids,(a::code)) ) -# 17685 "parser_cocci_menhir.ml" + let x : unit = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_option_TPosAny_ = +# 31 "standard.mly" + ( Some x ) +# 23189 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17692,26 +23196,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = b; - MenhirLib.EngineTypes.startp = _startpos_b_; - MenhirLib.EngineTypes.endp = _endpos_b_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = a; - MenhirLib.EngineTypes.startp = _startpos_a_; - MenhirLib.EngineTypes.endp = _endpos_a_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let b : 'tv_list_mzl_rule_elem_statement__ = Obj.magic b in - let a : 'tv_rule_elem_statement = Obj.magic a in - let _startpos = _startpos_a_ in - let _endpos = _endpos_b_ in - let _v : 'tv_midzero_list_rule_elem_statement_rule_elem_statement_ = -# 1803 "parser_cocci_menhir.mly" - ( let (mids,code) = List.split b in (mids,(a::code)) ) -# 17715 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_option_eexpr_ = +# 29 "standard.mly" + ( None ) +# 23206 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17723,25 +23214,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = b; - MenhirLib.EngineTypes.startp = _startpos_b_; - MenhirLib.EngineTypes.endp = _endpos_b_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = a; - MenhirLib.EngineTypes.startp = _startpos_a_; - MenhirLib.EngineTypes.endp = _endpos_a_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let b : 'tv_list_mzl_statement__ = Obj.magic b in - let a : 'tv_statement = Obj.magic a in - let _startpos = _startpos_a_ in - let _endpos = _endpos_b_ in - let _v : 'tv_midzero_list_statement_statement_ = -# 1803 "parser_cocci_menhir.mly" - ( let (mids,code) = List.split b in (mids,(a::code)) ) -# 17745 "parser_cocci_menhir.ml" + let x : 'tv_eexpr = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_option_eexpr_ = +# 31 "standard.mly" + ( Some x ) +# 23230 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17752,34 +23237,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = ew; - MenhirLib.EngineTypes.startp = _startpos_ew_; - MenhirLib.EngineTypes.endp = _endpos_ew_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = b; - MenhirLib.EngineTypes.startp = _startpos_b_; - MenhirLib.EngineTypes.endp = _endpos_b_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = f; - MenhirLib.EngineTypes.startp = _startpos_f_; - MenhirLib.EngineTypes.endp = _endpos_f_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let ew : 'tv_loption_error_words_ = Obj.magic ew in - let b : 'tv_loption_minus_start_ = Obj.magic b in - let f : 'tv_loption_filespec_ = Obj.magic f in - let _startpos = _startpos_f_ in - let _endpos = _endpos_ew_ in - let _v : 'tv_minus_body = -# 606 "parser_cocci_menhir.mly" - ( match f@b@ew with - [] -> raise (Semantic_cocci.Semantic "minus slice can't be empty") - | code -> Top_level.top_level code ) -# 17783 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_plus_after_dots = +# 1687 "parser_cocci_menhir.mly" + ([]) +# 23247 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17791,33 +23255,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = ew; - MenhirLib.EngineTypes.startp = _startpos_ew_; - MenhirLib.EngineTypes.endp = _endpos_ew_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = b; - MenhirLib.EngineTypes.startp = _startpos_b_; - MenhirLib.EngineTypes.endp = _endpos_b_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = f; - MenhirLib.EngineTypes.startp = _startpos_f_; - MenhirLib.EngineTypes.endp = _endpos_f_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let ew : 'tv_loption_error_words_ = Obj.magic ew in - let b : 'tv_top_eexpr = Obj.magic b in - let f : 'tv_loption_filespec_ = Obj.magic f in - let _startpos = _startpos_f_ in - let _endpos = _endpos_ew_ in - let _v : 'tv_minus_exp_body = -# 620 "parser_cocci_menhir.mly" - ( match f@[b]@ew with - [] -> raise (Semantic_cocci.Semantic "minus slice can't be empty") - | code -> Top_level.top_level code ) -# 17821 "parser_cocci_menhir.ml" + let _2 : 'tv_plus_after_exp = Obj.magic _2 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_plus_after_dots = +# 1688 "parser_cocci_menhir.mly" + (_2) +# 23275 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17829,6 +23283,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { + MenhirLib.EngineTypes.semv = _2; MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { @@ -17839,17 +23294,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _1 : 'tv_minus_exp_body = Obj.magic _1 in + let _2 : 'tv_plus_after_exp = Obj.magic _2 in + let _1 : 'tv_expr = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : ( -# 137 "parser_cocci_menhir.mly" - (Ast0_cocci.rule) -# 17849 "parser_cocci_menhir.ml" - ) = -# 177 "parser_cocci_menhir.mly" - ( _1 ) -# 17853 "parser_cocci_menhir.ml" + let _v : 'tv_plus_after_dots = +# 1690 "parser_cocci_menhir.mly" + ( (Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Exp(_1)))))::_2 ) +# 23305 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17861,27 +23313,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { + MenhirLib.EngineTypes.semv = _2; MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = m; - MenhirLib.EngineTypes.startp = _startpos_m_; - MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let m : 'tv_minus_exp_body = Obj.magic m in - let _startpos = _startpos_m_ in + let _2 : 'tv_plus_after_stm = Obj.magic _2 in + let _1 : 'tv_fundecl = Obj.magic _1 in + let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : ( -# 137 "parser_cocci_menhir.mly" - (Ast0_cocci.rule) -# 17881 "parser_cocci_menhir.ml" - ) = -# 177 "parser_cocci_menhir.mly" - ( m ) -# 17885 "parser_cocci_menhir.ml" + let _v : 'tv_plus_after_dots = +# 1691 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.DECL(_1))::_2 ) +# 23335 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17893,27 +23343,42 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { + MenhirLib.EngineTypes.semv = _2; MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = m; - MenhirLib.EngineTypes.startp = _startpos_m_; - MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let m : 'tv_minus_exp_body = Obj.magic m in - let _startpos = _startpos_m_ in + let _2 : 'tv_plus_after_stm = Obj.magic _2 in + let _1 : 'tv_decl_statement_expr = Obj.magic _1 in + let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : ( -# 137 "parser_cocci_menhir.mly" - (Ast0_cocci.rule) -# 17913 "parser_cocci_menhir.ml" - ) = -# 178 "parser_cocci_menhir.mly" - ( m ) -# 17917 "parser_cocci_menhir.ml" + let _v : 'tv_plus_after_dots = +# 1693 "parser_cocci_menhir.mly" + ( (List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1)@_2 ) +# 23365 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_plus_after_exp = +# 1683 "parser_cocci_menhir.mly" + ([]) +# 23382 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17925,6 +23390,7 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { + MenhirLib.EngineTypes.semv = _2; MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { @@ -17935,17 +23401,31 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _1 : 'tv_minus_body = Obj.magic _1 in + let _2 : 'tv_plus_after_dots = Obj.magic _2 in + let _1 : 'tv_stm_dots = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : ( -# 134 "parser_cocci_menhir.mly" - (Ast0_cocci.rule) -# 17945 "parser_cocci_menhir.ml" - ) = -# 173 "parser_cocci_menhir.mly" - ( _1 ) -# 17949 "parser_cocci_menhir.ml" + let _v : 'tv_plus_after_exp = +# 1684 "parser_cocci_menhir.mly" + ( (Ast0.wrap(Ast0.OTHER(_1)))::_2 ) +# 23412 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_plus_after_stm = +# 1696 "parser_cocci_menhir.mly" + ([]) +# 23429 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17957,27 +23437,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { + MenhirLib.EngineTypes.semv = _2; MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = m; - MenhirLib.EngineTypes.startp = _startpos_m_; - MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let m : 'tv_minus_body = Obj.magic m in - let _startpos = _startpos_m_ in + let _2 : 'tv_plus_after_dots = Obj.magic _2 in + let _1 : 'tv_stm_dots = Obj.magic _1 in + let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : ( -# 134 "parser_cocci_menhir.mly" - (Ast0_cocci.rule) -# 17977 "parser_cocci_menhir.ml" - ) = -# 173 "parser_cocci_menhir.mly" - ( m ) -# 17981 "parser_cocci_menhir.ml" + let _v : 'tv_plus_after_stm = +# 1697 "parser_cocci_menhir.mly" + ( (Ast0.wrap(Ast0.OTHER(_1)))::_2 ) +# 23459 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -17989,27 +23467,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { + MenhirLib.EngineTypes.semv = _2; MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = m; - MenhirLib.EngineTypes.startp = _startpos_m_; - MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let m : 'tv_minus_body = Obj.magic m in - let _startpos = _startpos_m_ in + let _2 : 'tv_plus_after_stm = Obj.magic _2 in + let _1 : 'tv_fundecl = Obj.magic _1 in + let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : ( -# 134 "parser_cocci_menhir.mly" - (Ast0_cocci.rule) -# 18009 "parser_cocci_menhir.ml" - ) = -# 174 "parser_cocci_menhir.mly" - ( m ) -# 18013 "parser_cocci_menhir.ml" + let _v : 'tv_plus_after_stm = +# 1698 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.DECL(_1))::_2 ) +# 23489 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18021,19 +23497,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : 'tv_fundecl = Obj.magic _1 in + let _2 : 'tv_plus_after_stm = Obj.magic _2 in + let _1 : 'tv_decl_statement = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_minus_start = -# 1612 "parser_cocci_menhir.mly" - ( [Ast0.wrap(Ast0.DECL(_1))] ) -# 18037 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_plus_after_stm = +# 1700 "parser_cocci_menhir.mly" + ( (List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1)@_2 ) +# 23519 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18045,19 +23527,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = b; + MenhirLib.EngineTypes.startp = _startpos_b_; + MenhirLib.EngineTypes.endp = _endpos_b_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = f; + MenhirLib.EngineTypes.startp = _startpos_f_; + MenhirLib.EngineTypes.endp = _endpos_f_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : 'tv_ctype = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_minus_start = -# 1613 "parser_cocci_menhir.mly" - ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Ty(_1))))] ) -# 18061 "parser_cocci_menhir.ml" + let b : 'tv_loption_plus_start_ = Obj.magic b in + let f : 'tv_loption_filespec_ = Obj.magic f in + let _startpos = _startpos_f_ in + let _endpos = _endpos_b_ in + let _v : 'tv_plus_body = +# 605 "parser_cocci_menhir.mly" + ( Top_level.top_level (f@b(*@ew*)) ) +# 23549 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18069,19 +23557,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = b; + MenhirLib.EngineTypes.startp = _startpos_b_; + MenhirLib.EngineTypes.endp = _endpos_b_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = f; + MenhirLib.EngineTypes.startp = _startpos_f_; + MenhirLib.EngineTypes.endp = _endpos_f_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : 'tv_top_init = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_minus_start = -# 1614 "parser_cocci_menhir.mly" - ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.TopInit(_1))))] ) -# 18085 "parser_cocci_menhir.ml" + let b : 'tv_top_eexpr = Obj.magic b in + let f : 'tv_loption_filespec_ = Obj.magic f in + let _startpos = _startpos_f_ in + let _endpos = _endpos_b_ in + let _v : 'tv_plus_exp_body = +# 619 "parser_cocci_menhir.mly" + ( Top_level.top_level (f@[b](*@ew*)) ) +# 23579 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18093,19 +23587,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = Obj.magic _1 in + let _1 : 'tv_plus_exp_body = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_minus_start = -# 1616 "parser_cocci_menhir.mly" - ( List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1 ) -# 18109 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : ( +# 143 "parser_cocci_menhir.mly" + (Ast0_cocci.rule) +# 23607 "parser_cocci_menhir.ml" + ) = +# 179 "parser_cocci_menhir.mly" + ( _1 ) +# 23611 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18117,29 +23619,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = b; - MenhirLib.EngineTypes.startp = _startpos_b_; - MenhirLib.EngineTypes.endp = _endpos_b_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = a; - MenhirLib.EngineTypes.startp = _startpos_a_; - MenhirLib.EngineTypes.endp = _endpos_a_; + MenhirLib.EngineTypes.semv = p; + MenhirLib.EngineTypes.startp = _startpos_p_; + MenhirLib.EngineTypes.endp = _endpos_p_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let b : 'tv_ctype = Obj.magic b in - let a : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 18136 "parser_cocci_menhir.ml" - ) = Obj.magic a in - let _startpos = _startpos_a_ in - let _endpos = _endpos_b_ in - let _v : 'tv_mzl_ctype_ = -# 1806 "parser_cocci_menhir.mly" - ( (P.clt2mcode "|" a, b) ) -# 18143 "parser_cocci_menhir.ml" + let p : 'tv_plus_exp_body = Obj.magic p in + let _startpos = _startpos_p_ in + let _endpos = _endpos__2_ in + let _v : ( +# 143 "parser_cocci_menhir.mly" + (Ast0_cocci.rule) +# 23639 "parser_cocci_menhir.ml" + ) = +# 179 "parser_cocci_menhir.mly" + ( p ) +# 23643 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18151,29 +23651,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = b; - MenhirLib.EngineTypes.startp = _startpos_b_; - MenhirLib.EngineTypes.endp = _endpos_b_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = a; - MenhirLib.EngineTypes.startp = _startpos_a_; - MenhirLib.EngineTypes.endp = _endpos_a_; + MenhirLib.EngineTypes.semv = p; + MenhirLib.EngineTypes.startp = _startpos_p_; + MenhirLib.EngineTypes.endp = _endpos_p_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let b : 'tv_eexpr = Obj.magic b in - let a : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 18170 "parser_cocci_menhir.ml" - ) = Obj.magic a in - let _startpos = _startpos_a_ in - let _endpos = _endpos_b_ in - let _v : 'tv_mzl_eexpr_ = -# 1806 "parser_cocci_menhir.mly" - ( (P.clt2mcode "|" a, b) ) -# 18177 "parser_cocci_menhir.ml" + let p : 'tv_plus_exp_body = Obj.magic p in + let _startpos = _startpos_p_ in + let _endpos = _endpos__2_ in + let _v : ( +# 143 "parser_cocci_menhir.mly" + (Ast0_cocci.rule) +# 23671 "parser_cocci_menhir.ml" + ) = +# 180 "parser_cocci_menhir.mly" + ( p ) +# 23675 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18185,29 +23683,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = b; - MenhirLib.EngineTypes.startp = _startpos_b_; - MenhirLib.EngineTypes.endp = _endpos_b_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = a; - MenhirLib.EngineTypes.startp = _startpos_a_; - MenhirLib.EngineTypes.endp = _endpos_a_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let b : 'tv_fun_after_dots_or = Obj.magic b in - let a : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 18204 "parser_cocci_menhir.ml" - ) = Obj.magic a in - let _startpos = _startpos_a_ in - let _endpos = _endpos_b_ in - let _v : 'tv_mzl_fun_after_dots_or_ = -# 1806 "parser_cocci_menhir.mly" - ( (P.clt2mcode "|" a, b) ) -# 18211 "parser_cocci_menhir.ml" + let _1 : 'tv_plus_body = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : ( +# 140 "parser_cocci_menhir.mly" + (Ast0_cocci.rule) +# 23703 "parser_cocci_menhir.ml" + ) = +# 175 "parser_cocci_menhir.mly" + ( _1 ) +# 23707 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18219,29 +23715,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = b; - MenhirLib.EngineTypes.startp = _startpos_b_; - MenhirLib.EngineTypes.endp = _endpos_b_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = a; - MenhirLib.EngineTypes.startp = _startpos_a_; - MenhirLib.EngineTypes.endp = _endpos_a_; + MenhirLib.EngineTypes.semv = p; + MenhirLib.EngineTypes.startp = _startpos_p_; + MenhirLib.EngineTypes.endp = _endpos_p_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let b : 'tv_fun_start = Obj.magic b in - let a : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 18238 "parser_cocci_menhir.ml" - ) = Obj.magic a in - let _startpos = _startpos_a_ in - let _endpos = _endpos_b_ in - let _v : 'tv_mzl_fun_start_ = -# 1806 "parser_cocci_menhir.mly" - ( (P.clt2mcode "|" a, b) ) -# 18245 "parser_cocci_menhir.ml" + let p : 'tv_plus_body = Obj.magic p in + let _startpos = _startpos_p_ in + let _endpos = _endpos__2_ in + let _v : ( +# 140 "parser_cocci_menhir.mly" + (Ast0_cocci.rule) +# 23735 "parser_cocci_menhir.ml" + ) = +# 175 "parser_cocci_menhir.mly" + ( p ) +# 23739 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18253,29 +23747,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = b; - MenhirLib.EngineTypes.startp = _startpos_b_; - MenhirLib.EngineTypes.endp = _endpos_b_; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = a; - MenhirLib.EngineTypes.startp = _startpos_a_; - MenhirLib.EngineTypes.endp = _endpos_a_; + MenhirLib.EngineTypes.semv = p; + MenhirLib.EngineTypes.startp = _startpos_p_; + MenhirLib.EngineTypes.endp = _endpos_p_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let b : 'tv_rule_elem_statement = Obj.magic b in - let a : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 18272 "parser_cocci_menhir.ml" - ) = Obj.magic a in - let _startpos = _startpos_a_ in - let _endpos = _endpos_b_ in - let _v : 'tv_mzl_rule_elem_statement_ = -# 1806 "parser_cocci_menhir.mly" - ( (P.clt2mcode "|" a, b) ) -# 18279 "parser_cocci_menhir.ml" + let p : 'tv_plus_body = Obj.magic p in + let _startpos = _startpos_p_ in + let _endpos = _endpos__2_ in + let _v : ( +# 140 "parser_cocci_menhir.mly" + (Ast0_cocci.rule) +# 23767 "parser_cocci_menhir.ml" + ) = +# 176 "parser_cocci_menhir.mly" + ( p ) +# 23771 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18287,29 +23779,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = b; - MenhirLib.EngineTypes.startp = _startpos_b_; - MenhirLib.EngineTypes.endp = _endpos_b_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = a; - MenhirLib.EngineTypes.startp = _startpos_a_; - MenhirLib.EngineTypes.endp = _endpos_a_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let b : 'tv_statement = Obj.magic b in - let a : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 18306 "parser_cocci_menhir.ml" - ) = Obj.magic a in - let _startpos = _startpos_a_ in - let _endpos = _endpos_b_ in - let _v : 'tv_mzl_statement_ = -# 1806 "parser_cocci_menhir.mly" - ( (P.clt2mcode "|" a, b) ) -# 18313 "parser_cocci_menhir.ml" + let _1 : 'tv_ctype = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_plus_start = +# 1672 "parser_cocci_menhir.mly" + ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Ty(_1))))] ) +# 23795 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18327,13 +23809,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_decl = Obj.magic _1 in + let _1 : 'tv_top_init = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_name_opt_decl = -# 840 "parser_cocci_menhir.mly" - ( _1 ) -# 18337 "parser_cocci_menhir.ml" + let _v : 'tv_plus_start = +# 1673 "parser_cocci_menhir.mly" + ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.TopInit(_1))))] ) +# 23819 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18345,19 +23827,55 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : 'tv_plus_after_dots = Obj.magic _2 in + let _1 : 'tv_stm_dots = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_plus_start = +# 1675 "parser_cocci_menhir.mly" + ( (Ast0.wrap(Ast0.OTHER(_1)))::_2 ) +# 23849 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let t : 'tv_ctype = Obj.magic t in - let _startpos = _startpos_t_ in - let _endpos = _endpos_t_ in - let _v : 'tv_name_opt_decl = -# 841 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Param(t, None)) ) -# 18361 "parser_cocci_menhir.ml" + let _2 : 'tv_plus_after_exp = Obj.magic _2 in + let _1 : 'tv_expr = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_plus_start = +# 1677 "parser_cocci_menhir.mly" + ( (Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Exp(_1)))))::_2 ) +# 23879 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18369,80 +23887,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = rp1; - MenhirLib.EngineTypes.startp = _startpos_rp1_; - MenhirLib.EngineTypes.endp = _endpos_rp1_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lp1; - MenhirLib.EngineTypes.startp = _startpos_lp1_; - MenhirLib.EngineTypes.endp = _endpos_lp1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = rp; - MenhirLib.EngineTypes.startp = _startpos_rp_; - MenhirLib.EngineTypes.endp = _endpos_rp_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = s; - MenhirLib.EngineTypes.startp = _startpos_s_; - MenhirLib.EngineTypes.endp = _endpos_s_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lp; - MenhirLib.EngineTypes.startp = _startpos_lp_; - MenhirLib.EngineTypes.endp = _endpos_lp_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let rp1 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 18412 "parser_cocci_menhir.ml" - ) = Obj.magic rp1 in - let d : 'tv_decl_list_name_opt_decl_ = Obj.magic d in - let lp1 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 18418 "parser_cocci_menhir.ml" - ) = Obj.magic lp1 in - let rp : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 18423 "parser_cocci_menhir.ml" - ) = Obj.magic rp in - let s : ( -# 99 "parser_cocci_menhir.mly" - (Data.clt) -# 18428 "parser_cocci_menhir.ml" - ) = Obj.magic s in - let lp : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 18433 "parser_cocci_menhir.ml" - ) = Obj.magic lp in - let t : 'tv_fn_ctype = Obj.magic t in - let _startpos = _startpos_t_ in - let _endpos = _endpos_rp1_ in - let _v : 'tv_name_opt_decl = -# 844 "parser_cocci_menhir.mly" - ( let fnptr = - Ast0.wrap - (Ast0.FunctionPointer - (t,P.clt2mcode "(" lp,P.clt2mcode "*" s,P.clt2mcode ")" rp, - P.clt2mcode "(" lp1,d,P.clt2mcode ")" rp1)) in - Ast0.wrap(Ast0.Param(fnptr, None)) ) -# 18446 "parser_cocci_menhir.ml" + let _2 : 'tv_plus_after_stm = Obj.magic _2 in + let _1 : 'tv_fundecl = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_plus_start = +# 1678 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.DECL(_1))::_2 ) +# 23909 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18465,14 +23928,42 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : 'tv_nest_after_stm = Obj.magic _2 in + let _2 : 'tv_plus_after_stm = Obj.magic _2 in let _1 : 'tv_decl_statement_expr = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : 'tv_nest_after_dots = -# 1727 "parser_cocci_menhir.mly" - (_1@_2) -# 18476 "parser_cocci_menhir.ml" + let _v : 'tv_plus_start = +# 1680 "parser_cocci_menhir.mly" + ( (List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1)@_2 ) +# 23939 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : ( +# 47 "parser_cocci_menhir.mly" + (string) +# 23960 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_pnrule = +# 230 "parser_cocci_menhir.mly" + ( Ast.Dep _1 ) +# 23967 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18494,13 +23985,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : 'tv_nest_after_exp = Obj.magic _2 in + let _2 : ( +# 47 "parser_cocci_menhir.mly" + (string) +# 23992 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : 'tv_nest_after_dots = -# 1728 "parser_cocci_menhir.mly" - (_2) -# 18504 "parser_cocci_menhir.ml" + let _v : 'tv_pnrule = +# 231 "parser_cocci_menhir.mly" + ( Ast.AntiDep _2 ) +# 23999 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18517,20 +24012,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : 'tv_nest_after_exp = Obj.magic _2 in - let _1 : 'tv_expr = Obj.magic _1 in + let _2 : ( +# 47 "parser_cocci_menhir.mly" + (string) +# 24024 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : 'tv_nest_after_dots = -# 1729 "parser_cocci_menhir.mly" - ((Ast0.wrap(Ast0.Exp(_1)))::_2) -# 18534 "parser_cocci_menhir.ml" + let _v : 'tv_pnrule = +# 232 "parser_cocci_menhir.mly" + ( Ast.EverDep _2 ) +# 24031 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18541,13 +24038,28 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_nest_after_exp = -# 1737 "parser_cocci_menhir.mly" - ([]) -# 18551 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : ( +# 47 "parser_cocci_menhir.mly" + (string) +# 24056 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_pnrule = +# 233 "parser_cocci_menhir.mly" + ( Ast.NeverDep _2 ) +# 24063 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18559,25 +24071,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let _2 : 'tv_nest_after_dots = Obj.magic _2 in - let _1 : 'tv_stm_dots = Obj.magic _1 in + let _2 : 'tv_dep = Obj.magic _2 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_nest_after_exp = -# 1738 "parser_cocci_menhir.mly" - (_1::_2) -# 18581 "parser_cocci_menhir.ml" + let _endpos = _endpos__3_ in + let _v : 'tv_pnrule = +# 234 "parser_cocci_menhir.mly" + ( _2 ) +# 24095 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18588,13 +24102,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_nest_after_stm = -# 1732 "parser_cocci_menhir.mly" - ([]) -# 18598 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_primary_expr_eexpr_dot_expressions_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = +# 1300 "parser_cocci_menhir.mly" + ( _1 ) +# 24119 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18606,25 +24127,127 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; } = _menhir_stack in - let _2 : 'tv_nest_after_dots = Obj.magic _2 in - let _1 : 'tv_stm_dots = Obj.magic _1 in + let _4 : ( +# 102 "parser_cocci_menhir.mly" + (Data.clt) +# 24155 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr = Obj.magic _3 in + let _2 : ( +# 102 "parser_cocci_menhir.mly" + (Data.clt) +# 24161 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_nest_after_stm = -# 1733 "parser_cocci_menhir.mly" - (_1::_2) -# 18628 "parser_cocci_menhir.ml" + let _endpos = _endpos__4_ in + let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = +# 1302 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3, + P.clt2mcode "]" _4)) ) +# 24170 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _3 : 'tv_ident = Obj.magic _3 in + let _2 : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 24202 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = +# 1305 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) ) +# 24210 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _3 : 'tv_ident = Obj.magic _3 in + let _2 : ( +# 104 "parser_cocci_menhir.mly" + (Data.clt) +# 24242 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = +# 1307 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2, + _3)) ) +# 24251 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18647,14 +24270,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : 'tv_nest_after_stm = Obj.magic _2 in - let _1 : 'tv_decl_statement = Obj.magic _1 in + let _2 : ( +# 85 "parser_cocci_menhir.mly" + (Data.clt) +# 24277 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : 'tv_nest_after_stm = -# 1734 "parser_cocci_menhir.mly" - (_1@_2) -# 18658 "parser_cocci_menhir.ml" + let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = +# 1310 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) ) +# 24285 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18666,41 +24293,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = c; - MenhirLib.EngineTypes.startp = _startpos_c_; - MenhirLib.EngineTypes.endp = _endpos_c_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let c : ( -# 73 "parser_cocci_menhir.mly" - (Data.clt) -# 18689 "parser_cocci_menhir.ml" - ) = Obj.magic c in - let e : 'tv_expr_dots_TEllipsis_ = Obj.magic e in - let _1 : ( -# 73 "parser_cocci_menhir.mly" + let _2 : ( +# 85 "parser_cocci_menhir.mly" (Data.clt) -# 18695 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in +# 24311 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos_c_ in - let _v : 'tv_nest_expressions = -# 1222 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.NestExpr(P.clt2mcode "<..." _1, - Ast0.wrap(Ast0.DOTS(e (P.mkedots "..."))), - P.clt2mcode "...>" c, None, false)) ) -# 18704 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = +# 1312 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) ) +# 24319 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18712,41 +24327,47 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = c; - MenhirLib.EngineTypes.startp = _startpos_c_; - MenhirLib.EngineTypes.endp = _endpos_c_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in - let c : ( -# 73 "parser_cocci_menhir.mly" + let _4 : ( +# 77 "parser_cocci_menhir.mly" (Data.clt) -# 18735 "parser_cocci_menhir.ml" - ) = Obj.magic c in - let e : 'tv_expr_dots_TEllipsis_ = Obj.magic e in - let _1 : ( -# 73 "parser_cocci_menhir.mly" +# 24355 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr_list_option = Obj.magic _3 in + let _2 : ( +# 76 "parser_cocci_menhir.mly" (Data.clt) -# 18741 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in +# 24361 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos_c_ in - let _v : 'tv_nest_expressions = -# 1226 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.NestExpr(P.clt2mcode "<+..." _1, - Ast0.wrap(Ast0.DOTS(e (P.mkedots "..."))), - P.clt2mcode "...+>" c, None, true)) ) -# 18750 "parser_cocci_menhir.ml" + let _endpos = _endpos__4_ in + let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = +# 1314 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2, + _3, + P.clt2mcode ")" _4)) ) +# 24371 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18764,39 +24385,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_nest_after_dots = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_nest_start = -# 1724 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.DOTS(_1)) ) -# 18774 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in + let _1 : 'tv_primary_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : ( -# 168 "parser_cocci_menhir.mly" - (unit) -# 18796 "parser_cocci_menhir.ml" - ) = -# 1874 "parser_cocci_menhir.mly" - ( () ) -# 18800 "parser_cocci_menhir.ml" + let _v : 'tv_postfix_expr_eexpr_invalid_ = +# 1300 "parser_cocci_menhir.mly" + ( _1 ) +# 24395 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18808,51 +24403,46 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; } = _menhir_stack in + let _4 : ( +# 102 "parser_cocci_menhir.mly" + (Data.clt) +# 24431 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr = Obj.magic _3 in + let _2 : ( +# 102 "parser_cocci_menhir.mly" + (Data.clt) +# 24437 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : ( -# 168 "parser_cocci_menhir.mly" - (unit) -# 18826 "parser_cocci_menhir.ml" - ) = -# 1875 "parser_cocci_menhir.mly" - ( () ) -# 18830 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : ( -# 168 "parser_cocci_menhir.mly" - (unit) -# 18852 "parser_cocci_menhir.ml" - ) = -# 1876 "parser_cocci_menhir.mly" - ( () ) -# 18856 "parser_cocci_menhir.ml" + let _endpos = _endpos__4_ in + let _v : 'tv_postfix_expr_eexpr_invalid_ = +# 1302 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3, + P.clt2mcode "]" _4)) ) +# 24446 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18864,26 +24454,35 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = dg; - MenhirLib.EngineTypes.startp = _startpos_dg_; - MenhirLib.EngineTypes.endp = _endpos_dg_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = g; - MenhirLib.EngineTypes.startp = _startpos_g_; - MenhirLib.EngineTypes.endp = _endpos_g_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let dg : 'tv_list_pair_edots_when_TEllipsis_eexpr__dexpr__ = Obj.magic dg in - let g : 'tv_dexpr = Obj.magic g in - let _startpos = _startpos_g_ in - let _endpos = _endpos_dg_ in - let _v : 'tv_no_dot_start_end_dexpr_edots_when_TEllipsis_eexpr__ = -# 1390 "parser_cocci_menhir.mly" - ( function dot_builder -> - g :: (List.concat(List.map (function (d,g) -> [dot_builder d;g]) dg)) ) -# 18887 "parser_cocci_menhir.ml" + let _3 : 'tv_ident = Obj.magic _3 in + let _2 : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 24478 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_postfix_expr_eexpr_invalid_ = +# 1305 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) ) +# 24486 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18894,24 +24493,37 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + let { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let x : ( -# 99 "parser_cocci_menhir.mly" + let _3 : 'tv_ident = Obj.magic _3 in + let _2 : ( +# 104 "parser_cocci_menhir.mly" (Data.clt) -# 18908 "parser_cocci_menhir.ml" - ) = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_nonempty_list_TMul_ = -# 124 "standard.mly" - ( [ x ] ) -# 18915 "parser_cocci_menhir.ml" +# 24518 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_postfix_expr_eexpr_invalid_ = +# 1307 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2, + _3)) ) +# 24527 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18923,29 +24535,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let xs : 'tv_nonempty_list_TMul_ = Obj.magic xs in - let x : ( -# 99 "parser_cocci_menhir.mly" + let _2 : ( +# 85 "parser_cocci_menhir.mly" (Data.clt) -# 18942 "parser_cocci_menhir.ml" - ) = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_nonempty_list_TMul_ = -# 126 "standard.mly" - ( x :: xs ) -# 18949 "parser_cocci_menhir.ml" +# 24553 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_postfix_expr_eexpr_invalid_ = +# 1310 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) ) +# 24561 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18957,27 +24569,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let i : 'tv_ident_or_const = Obj.magic i in + let _2 : ( +# 85 "parser_cocci_menhir.mly" + (Data.clt) +# 24587 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos_i_ in - let _v : 'tv_not_ceq = -# 1451 "parser_cocci_menhir.mly" - ( (if !Data.in_iso - then failwith "constraints not allowed in iso file"); - (if !Data.in_generating - then failwith "constraints not allowed in a generated rule file"); - [i] ) -# 18981 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_postfix_expr_eexpr_invalid_ = +# 1312 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) ) +# 24595 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -18989,17 +24603,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { + MenhirLib.EngineTypes.semv = _4; MenhirLib.EngineTypes.startp = _startpos__4_; MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = l; - MenhirLib.EngineTypes.startp = _startpos_l_; - MenhirLib.EngineTypes.endp = _endpos_l_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; @@ -19007,17 +24624,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let l : 'tv_comma_list_ident_or_const_ = Obj.magic l in + let _4 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 24631 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr_list_option = Obj.magic _3 in + let _2 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 24637 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in - let _v : 'tv_not_ceq = -# 1457 "parser_cocci_menhir.mly" - ( (if !Data.in_iso - then failwith "constraints not allowed in iso file"); - (if !Data.in_generating - then failwith "constraints not allowed in a generated rule file"); - l ) -# 19021 "parser_cocci_menhir.ml" + let _v : 'tv_postfix_expr_eexpr_invalid_ = +# 1314 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2, + _3, + P.clt2mcode ")" _4)) ) +# 24647 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19029,29 +24655,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let i : 'tv_pure_ident = Obj.magic i in + let _1 : 'tv_primary_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos_i_ in - let _v : 'tv_not_eq = -# 1418 "parser_cocci_menhir.mly" - ( (if !Data.in_iso - then failwith "constraints not allowed in iso file"); - (if !Data.in_generating - (* pb: constraints not stored with metavars; too lazy to search for - them in the pattern *) - then failwith "constraints not allowed in a generated rule file"); - [Ast0.wrap(Ast0.Id(P.id2mcode i))] ) -# 19055 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = +# 1300 "parser_cocci_menhir.mly" + ( _1 ) +# 24671 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19063,17 +24679,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { + MenhirLib.EngineTypes.semv = _4; MenhirLib.EngineTypes.startp = _startpos__4_; MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = l; - MenhirLib.EngineTypes.startp = _startpos_l_; - MenhirLib.EngineTypes.endp = _endpos_l_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; @@ -19081,17 +24700,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let l : 'tv_comma_list_pure_ident_ = Obj.magic l in + let _4 : ( +# 102 "parser_cocci_menhir.mly" + (Data.clt) +# 24707 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr = Obj.magic _3 in + let _2 : ( +# 102 "parser_cocci_menhir.mly" + (Data.clt) +# 24713 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in - let _v : 'tv_not_eq = -# 1426 "parser_cocci_menhir.mly" - ( (if !Data.in_iso - then failwith "constraints not allowed in iso file"); - (if !Data.in_generating - then failwith "constraints not allowed in a generated rule file"); - List.map (function i -> Ast0.wrap(Ast0.Id(P.id2mcode i))) l ) -# 19095 "parser_cocci_menhir.ml" + let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = +# 1302 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3, + P.clt2mcode "]" _4)) ) +# 24722 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19103,27 +24730,35 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let i : 'tv_pure_ident = Obj.magic i in + let _3 : 'tv_ident = Obj.magic _3 in + let _2 : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 24754 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos_i_ in - let _v : 'tv_not_eqe = -# 1434 "parser_cocci_menhir.mly" - ( (if !Data.in_iso - then failwith "constraints not allowed in iso file"); - (if !Data.in_generating - then failwith "constraints not allowed in a generated rule file"); - [Ast0.wrap(Ast0.Ident(Ast0.wrap(Ast0.Id(P.id2mcode i))))] ) -# 19127 "parser_cocci_menhir.ml" + let _endpos = _endpos__3_ in + let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = +# 1305 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) ) +# 24762 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19135,38 +24770,70 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _3 : 'tv_ident = Obj.magic _3 in + let _2 : ( +# 104 "parser_cocci_menhir.mly" + (Data.clt) +# 24794 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = +# 1307 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2, + _3)) ) +# 24803 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = l; - MenhirLib.EngineTypes.startp = _startpos_l_; - MenhirLib.EngineTypes.endp = _endpos_l_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let l : 'tv_comma_list_pure_ident_ = Obj.magic l in + let _2 : ( +# 85 "parser_cocci_menhir.mly" + (Data.clt) +# 24829 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : 'tv_not_eqe = -# 1440 "parser_cocci_menhir.mly" - ( (if !Data.in_iso - then failwith "constraints not allowed in iso file"); - (if !Data.in_generating - then failwith "constraints not allowed in a generated rule file"); - List.map - (function i -> - Ast0.wrap(Ast0.Ident(Ast0.wrap(Ast0.Id(P.id2mcode i))))) - l ) -# 19170 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = +# 1310 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) ) +# 24837 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19178,32 +24845,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let i : 'tv_meta_ident = Obj.magic i in + let _2 : ( +# 85 "parser_cocci_menhir.mly" + (Data.clt) +# 24863 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos_i_ in - let _v : 'tv_not_pos = -# 1471 "parser_cocci_menhir.mly" - ( (if !Data.in_iso - then failwith "constraints not allowed in iso file"); - (if !Data.in_generating - then failwith "constraints not allowed in a generated rule file"); - match i with - (None,_) -> failwith "constraint must be an inherited variable" - | (Some rule,name) -> - let i = (rule,name) in - P.check_meta(Ast.MetaPosDecl(Ast.NONE,i)); - [i] ) -# 19207 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = +# 1312 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) ) +# 24871 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19215,17 +24879,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { + MenhirLib.EngineTypes.semv = _4; MenhirLib.EngineTypes.startp = _startpos__4_; MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = l; - MenhirLib.EngineTypes.startp = _startpos_l_; - MenhirLib.EngineTypes.endp = _endpos_l_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; @@ -19233,25 +24900,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let l : 'tv_comma_list_meta_ident_ = Obj.magic l in + let _4 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 24907 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr_list_option = Obj.magic _3 in + let _2 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 24913 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in - let _v : 'tv_not_pos = -# 1482 "parser_cocci_menhir.mly" - ( (if !Data.in_iso - then failwith "constraints not allowed in iso file"); - (if !Data.in_generating - then failwith "constraints not allowed in a generated rule file"); - List.map - (function - (None,_) -> - failwith "constraint must be an inherited variable" - | (Some rule,name) -> - let i = (rule,name) in - P.check_meta(Ast.MetaPosDecl(Ast.NONE,i)); - i) - l ) -# 19255 "parser_cocci_menhir.ml" + let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = +# 1314 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2, + _3, + P.clt2mcode ")" _4)) ) +# 24923 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19269,13 +24937,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_decl = Obj.magic _1 in + let _1 : 'tv_primary_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_one_dec_decl_ = -# 1556 "parser_cocci_menhir.mly" - ( _1 ) -# 19279 "parser_cocci_menhir.ml" + let _v : 'tv_postfix_expr_expr_invalid_ = +# 1300 "parser_cocci_menhir.mly" + ( _1 ) +# 24947 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19287,29 +24955,46 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; } = _menhir_stack in - let _1 : ( -# 66 "parser_cocci_menhir.mly" - (Parse_aux.list_info) -# 19300 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in + let _4 : ( +# 102 "parser_cocci_menhir.mly" + (Data.clt) +# 24983 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr = Obj.magic _3 in + let _2 : ( +# 102 "parser_cocci_menhir.mly" + (Data.clt) +# 24989 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_one_dec_decl_ = -# 1558 "parser_cocci_menhir.mly" - ( let (nm,lenname,pure,clt) = _1 in - let nm = P.clt2mcode nm clt in - let lenname = - match lenname with - Some nm -> Some(P.clt2mcode nm clt) - | None -> None in - Ast0.wrap(Ast0.MetaParamList(nm,lenname,pure)) ) -# 19313 "parser_cocci_menhir.ml" + let _endpos = _endpos__4_ in + let _v : 'tv_postfix_expr_expr_invalid_ = +# 1302 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3, + P.clt2mcode "]" _4)) ) +# 24998 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19321,19 +25006,35 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let _1 : 'tv_name_opt_decl = Obj.magic _1 in + let _3 : 'tv_ident = Obj.magic _3 in + let _2 : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 25030 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_one_dec_name_opt_decl_ = -# 1556 "parser_cocci_menhir.mly" - ( _1 ) -# 19337 "parser_cocci_menhir.ml" + let _endpos = _endpos__3_ in + let _v : 'tv_postfix_expr_expr_invalid_ = +# 1305 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) ) +# 25038 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19345,29 +25046,36 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let _1 : ( -# 66 "parser_cocci_menhir.mly" - (Parse_aux.list_info) -# 19358 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in + let _3 : 'tv_ident = Obj.magic _3 in + let _2 : ( +# 104 "parser_cocci_menhir.mly" + (Data.clt) +# 25070 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_one_dec_name_opt_decl_ = -# 1558 "parser_cocci_menhir.mly" - ( let (nm,lenname,pure,clt) = _1 in - let nm = P.clt2mcode nm clt in - let lenname = - match lenname with - Some nm -> Some(P.clt2mcode nm clt) - | None -> None in - Ast0.wrap(Ast0.MetaParamList(nm,lenname,pure)) ) -# 19371 "parser_cocci_menhir.ml" + let _endpos = _endpos__3_ in + let _v : 'tv_postfix_expr_expr_invalid_ = +# 1307 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2, + _3)) ) +# 25079 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19379,29 +25087,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" + let _2 : ( +# 85 "parser_cocci_menhir.mly" (Data.clt) -# 19397 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let t : 'tv_ctype = Obj.magic t in - let _startpos = _startpos_t_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_one_decl_var = -# 1011 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.TyDecl(t,P.clt2mcode ";" pv)) ) -# 19405 "parser_cocci_menhir.ml" +# 25105 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_postfix_expr_expr_invalid_ = +# 1310 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) ) +# 25113 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19413,43 +25121,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" + let _2 : ( +# 85 "parser_cocci_menhir.mly" (Data.clt) -# 19436 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let d : 'tv_d_ident = Obj.magic d in - let t : 'tv_ctype = Obj.magic t in - let _startpos = _startpos_t_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_one_decl_var = let s = - -# 39 "standard.mly" - ( None ) -# 19446 "parser_cocci_menhir.ml" - - in - -# 1013 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)) ) -# 19453 "parser_cocci_menhir.ml" +# 25139 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_postfix_expr_expr_invalid_ = +# 1312 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) ) +# 25147 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19461,50 +25155,47 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" + let _4 : ( +# 77 "parser_cocci_menhir.mly" (Data.clt) -# 19489 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let d : 'tv_d_ident = Obj.magic d in - let t : 'tv_ctype = Obj.magic t in - let x0 : 'tv_storage = Obj.magic x0 in - let _startpos = _startpos_x0_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_one_decl_var = let s = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 19501 "parser_cocci_menhir.ml" - - in - -# 1013 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)) ) -# 19508 "parser_cocci_menhir.ml" +# 25183 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr_list_option = Obj.magic _3 in + let _2 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 25189 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : 'tv_postfix_expr_expr_invalid_ = +# 1314 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2, + _3, + P.clt2mcode ")" _4)) ) +# 25199 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19517,82 +25208,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = f; - MenhirLib.EngineTypes.startp = _startpos_f_; - MenhirLib.EngineTypes.endp = _endpos_f_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let f : 'tv_funproto = Obj.magic f in - let _startpos = _startpos_f_ in - let _endpos = _endpos_f_ in - let _v : 'tv_one_decl_var = -# 1015 "parser_cocci_menhir.mly" - ( f ) -# 19532 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = q; - MenhirLib.EngineTypes.startp = _startpos_q_; - MenhirLib.EngineTypes.endp = _endpos_q_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 19573 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 19579 "parser_cocci_menhir.ml" - ) = Obj.magic q in - let d : 'tv_d_ident = Obj.magic d in - let t : 'tv_ctype = Obj.magic t in - let _startpos = _startpos_t_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_one_decl_var = let s = - -# 39 "standard.mly" - ( None ) -# 19589 "parser_cocci_menhir.ml" - - in - -# 1017 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv)) ) -# 19596 "parser_cocci_menhir.ml" + let _1 : 'tv_func_ident = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_dot_expressions_ = +# 1319 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Ident(_1)) ) +# 25223 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19604,66 +25231,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = q; - MenhirLib.EngineTypes.startp = _startpos_q_; - MenhirLib.EngineTypes.endp = _endpos_q_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; - } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 19642 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 19648 "parser_cocci_menhir.ml" - ) = Obj.magic q in - let d : 'tv_d_ident = Obj.magic d in - let t : 'tv_ctype = Obj.magic t in - let x0 : 'tv_storage = Obj.magic x0 in - let _startpos = _startpos_x0_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_one_decl_var = let s = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 19660 "parser_cocci_menhir.ml" - - in - -# 1017 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv)) ) -# 19667 "parser_cocci_menhir.ml" + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : ( +# 87 "parser_cocci_menhir.mly" + (string * Data.clt) +# 25244 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_dot_expressions_ = +# 1321 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) ) +# 25252 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19675,51 +25260,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 19698 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let d : 'tv_d_ident = Obj.magic d in - let i : 'tv_pure_ident = Obj.magic i in - let _startpos = _startpos_i_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_one_decl_var = let cv = - -# 39 "standard.mly" - ( None ) -# 19708 "parser_cocci_menhir.ml" - - in - let s = - -# 39 "standard.mly" - ( None ) -# 19715 "parser_cocci_menhir.ml" - - in - -# 1022 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in - Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)) ) -# 19723 "parser_cocci_menhir.ml" + let _1 : ( +# 87 "parser_cocci_menhir.mly" + (string * Data.clt) +# 25273 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_dot_expressions_ = +# 1324 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) ) +# 25281 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19731,58 +25289,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 19759 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let d : 'tv_d_ident = Obj.magic d in - let i : 'tv_pure_ident = Obj.magic i in - let x0 : 'tv_const_vol = Obj.magic x0 in - let _startpos = _startpos_x0_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_one_decl_var = let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 19771 "parser_cocci_menhir.ml" - - in - let s = - -# 39 "standard.mly" - ( None ) -# 19778 "parser_cocci_menhir.ml" - - in - -# 1022 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in - Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)) ) -# 19786 "parser_cocci_menhir.ml" + let _1 : ( +# 87 "parser_cocci_menhir.mly" + (string * Data.clt) +# 25302 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_dot_expressions_ = +# 1327 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) ) +# 25310 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19794,58 +25318,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 19822 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let d : 'tv_d_ident = Obj.magic d in - let i : 'tv_pure_ident = Obj.magic i in - let x0 : 'tv_storage = Obj.magic x0 in - let _startpos = _startpos_x0_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_one_decl_var = let cv = - -# 39 "standard.mly" - ( None ) -# 19833 "parser_cocci_menhir.ml" - - in - let s = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 19841 "parser_cocci_menhir.ml" - - in - -# 1022 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in - Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)) ) -# 19849 "parser_cocci_menhir.ml" + let _1 : ( +# 87 "parser_cocci_menhir.mly" + (string * Data.clt) +# 25331 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_dot_expressions_ = +# 1330 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) ) +# 25339 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19857,65 +25347,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = x1; - MenhirLib.EngineTypes.startp = _startpos_x1_; - MenhirLib.EngineTypes.endp = _endpos_x1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 19890 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let d : 'tv_d_ident = Obj.magic d in - let i : 'tv_pure_ident = Obj.magic i in - let x1 : 'tv_const_vol = Obj.magic x1 in - let x0 : 'tv_storage = Obj.magic x0 in - let _startpos = _startpos_x0_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_one_decl_var = let cv = - let x = x1 in - -# 41 "standard.mly" - ( Some x ) -# 19903 "parser_cocci_menhir.ml" - - in - let s = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 19911 "parser_cocci_menhir.ml" - - in - -# 1022 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in - Ast0.wrap(Ast0.UnInit(s,fn idtype,id,P.clt2mcode ";" pv)) ) -# 19919 "parser_cocci_menhir.ml" + let _1 : ( +# 67 "parser_cocci_menhir.mly" + (Parse_aux.typed_info) +# 25360 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_dot_expressions_ = +# 1333 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,ty,clt) = _1 in + Ast0.wrap + (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.CONST,pure)) ) +# 25369 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -19927,69 +25377,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = q; - MenhirLib.EngineTypes.startp = _startpos_q_; - MenhirLib.EngineTypes.endp = _endpos_q_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 19960 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 19966 "parser_cocci_menhir.ml" - ) = Obj.magic q in - let d : 'tv_d_ident = Obj.magic d in - let i : 'tv_pure_ident = Obj.magic i in - let _startpos = _startpos_i_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_one_decl_var = let cv = - -# 39 "standard.mly" - ( None ) -# 19976 "parser_cocci_menhir.ml" - - in - let s = - -# 39 "standard.mly" - ( None ) -# 19983 "parser_cocci_menhir.ml" - - in - -# 1027 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - !Data.add_type_name (P.id2name i); - let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in - Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e, - P.clt2mcode ";" pv)) ) -# 19993 "parser_cocci_menhir.ml" + let _1 : ( +# 63 "parser_cocci_menhir.mly" + (Parse_aux.expinfo) +# 25390 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_dot_expressions_ = +# 1337 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,clt) = _1 in + Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) ) +# 25398 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20001,76 +25406,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = q; - MenhirLib.EngineTypes.startp = _startpos_q_; - MenhirLib.EngineTypes.endp = _endpos_q_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 20039 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 20045 "parser_cocci_menhir.ml" - ) = Obj.magic q in - let d : 'tv_d_ident = Obj.magic d in - let i : 'tv_pure_ident = Obj.magic i in - let x0 : 'tv_const_vol = Obj.magic x0 in - let _startpos = _startpos_x0_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_one_decl_var = let cv = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 20057 "parser_cocci_menhir.ml" - - in - let s = - -# 39 "standard.mly" - ( None ) -# 20064 "parser_cocci_menhir.ml" - - in - -# 1027 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - !Data.add_type_name (P.id2name i); - let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in - Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e, - P.clt2mcode ";" pv)) ) -# 20074 "parser_cocci_menhir.ml" + let _1 : ( +# 67 "parser_cocci_menhir.mly" + (Parse_aux.typed_info) +# 25419 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_dot_expressions_ = +# 1340 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,ty,clt) = _1 in + Ast0.wrap + (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ANY,pure)) ) +# 25428 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20082,76 +25436,55 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = q; - MenhirLib.EngineTypes.startp = _startpos_q_; - MenhirLib.EngineTypes.endp = _endpos_q_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 20120 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 20126 "parser_cocci_menhir.ml" - ) = Obj.magic q in - let d : 'tv_d_ident = Obj.magic d in - let i : 'tv_pure_ident = Obj.magic i in - let x0 : 'tv_storage = Obj.magic x0 in - let _startpos = _startpos_x0_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_one_decl_var = let cv = - -# 39 "standard.mly" - ( None ) -# 20137 "parser_cocci_menhir.ml" - - in - let s = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 20145 "parser_cocci_menhir.ml" - - in - -# 1027 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - !Data.add_type_name (P.id2name i); - let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in - Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e, - P.clt2mcode ";" pv)) ) -# 20155 "parser_cocci_menhir.ml" + let _1 : ( +# 67 "parser_cocci_menhir.mly" + (Parse_aux.typed_info) +# 25449 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_dot_expressions_ = +# 1344 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,ty,clt) = _1 in + Ast0.wrap + (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ID,pure)) ) +# 25458 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : ( +# 67 "parser_cocci_menhir.mly" + (Parse_aux.typed_info) +# 25479 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_dot_expressions_ = +# 1348 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,ty,clt) = _1 in + Ast0.wrap + (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.LocalID,pure)) ) +# 25488 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20163,83 +25496,40 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = q; - MenhirLib.EngineTypes.startp = _startpos_q_; - MenhirLib.EngineTypes.endp = _endpos_q_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = x1; - MenhirLib.EngineTypes.startp = _startpos_x1_; - MenhirLib.EngineTypes.endp = _endpos_x1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" + let _3 : ( +# 77 "parser_cocci_menhir.mly" (Data.clt) -# 20206 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 107 "parser_cocci_menhir.mly" +# 25519 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_eexpr = Obj.magic _2 in + let _1 : ( +# 76 "parser_cocci_menhir.mly" (Data.clt) -# 20212 "parser_cocci_menhir.ml" - ) = Obj.magic q in - let d : 'tv_d_ident = Obj.magic d in - let i : 'tv_pure_ident = Obj.magic i in - let x1 : 'tv_const_vol = Obj.magic x1 in - let x0 : 'tv_storage = Obj.magic x0 in - let _startpos = _startpos_x0_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_one_decl_var = let cv = - let x = x1 in - -# 41 "standard.mly" - ( Some x ) -# 20225 "parser_cocci_menhir.ml" - - in - let s = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 20233 "parser_cocci_menhir.ml" - - in - -# 1027 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - !Data.add_type_name (P.id2name i); - let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in - Ast0.wrap(Ast0.Init(s,fn idtype,id,P.clt2mcode "=" q,e, - P.clt2mcode ";" pv)) ) -# 20243 "parser_cocci_menhir.ml" +# 25525 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_primary_expr_eexpr_dot_expressions_ = +# 1352 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2, + P.clt2mcode ")" _3)) ) +# 25533 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20251,104 +25541,119 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = rp2; - MenhirLib.EngineTypes.startp = _startpos_rp2_; - MenhirLib.EngineTypes.endp = _endpos_rp2_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = p; - MenhirLib.EngineTypes.startp = _startpos_p_; - MenhirLib.EngineTypes.endp = _endpos_p_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lp2; - MenhirLib.EngineTypes.startp = _startpos_lp2_; - MenhirLib.EngineTypes.endp = _endpos_lp2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = rp1; - MenhirLib.EngineTypes.startp = _startpos_rp1_; - MenhirLib.EngineTypes.endp = _endpos_rp1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = st; - MenhirLib.EngineTypes.startp = _startpos_st_; - MenhirLib.EngineTypes.endp = _endpos_st_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lp1; - MenhirLib.EngineTypes.startp = _startpos_lp1_; - MenhirLib.EngineTypes.endp = _endpos_lp1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 20304 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let rp2 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 20309 "parser_cocci_menhir.ml" - ) = Obj.magic rp2 in - let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in - let lp2 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 20315 "parser_cocci_menhir.ml" - ) = Obj.magic lp2 in - let rp1 : ( + let _3 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 20320 "parser_cocci_menhir.ml" - ) = Obj.magic rp1 in - let d : 'tv_d_ident = Obj.magic d in - let st : ( -# 99 "parser_cocci_menhir.mly" - (Data.clt) -# 20326 "parser_cocci_menhir.ml" - ) = Obj.magic st in - let lp1 : ( +# 25564 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_midzero_list_eexpr_eexpr_ = Obj.magic _2 in + let _1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 20331 "parser_cocci_menhir.ml" - ) = Obj.magic lp1 in - let t : 'tv_fn_ctype = Obj.magic t in - let _startpos = _startpos_t_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_one_decl_var = let s = - -# 39 "standard.mly" - ( None ) -# 20340 "parser_cocci_menhir.ml" - - in - -# 1037 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - let t = - Ast0.wrap - (Ast0.FunctionPointer - (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1, - P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in - Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)) ) -# 20352 "parser_cocci_menhir.ml" +# 25570 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_primary_expr_eexpr_dot_expressions_ = +# 1355 "parser_cocci_menhir.mly" + ( let (mids,code) = _2 in + Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1, + code, mids, + P.clt2mcode ")" _3)) ) +# 25580 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_dot_expressions = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_dot_expressions_ = +# 1359 "parser_cocci_menhir.mly" + ( _1 ) +# 25604 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_func_ident = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_invalid_ = +# 1319 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Ident(_1)) ) +# 25628 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : ( +# 87 "parser_cocci_menhir.mly" + (string * Data.clt) +# 25649 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_invalid_ = +# 1321 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) ) +# 25657 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20360,111 +25665,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = rp2; - MenhirLib.EngineTypes.startp = _startpos_rp2_; - MenhirLib.EngineTypes.endp = _endpos_rp2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = p; - MenhirLib.EngineTypes.startp = _startpos_p_; - MenhirLib.EngineTypes.endp = _endpos_p_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lp2; - MenhirLib.EngineTypes.startp = _startpos_lp2_; - MenhirLib.EngineTypes.endp = _endpos_lp2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = rp1; - MenhirLib.EngineTypes.startp = _startpos_rp1_; - MenhirLib.EngineTypes.endp = _endpos_rp1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = st; - MenhirLib.EngineTypes.startp = _startpos_st_; - MenhirLib.EngineTypes.endp = _endpos_st_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lp1; - MenhirLib.EngineTypes.startp = _startpos_lp1_; - MenhirLib.EngineTypes.endp = _endpos_lp1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 20418 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let rp2 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 20423 "parser_cocci_menhir.ml" - ) = Obj.magic rp2 in - let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in - let lp2 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 20429 "parser_cocci_menhir.ml" - ) = Obj.magic lp2 in - let rp1 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 20434 "parser_cocci_menhir.ml" - ) = Obj.magic rp1 in - let d : 'tv_d_ident = Obj.magic d in - let st : ( -# 99 "parser_cocci_menhir.mly" - (Data.clt) -# 20440 "parser_cocci_menhir.ml" - ) = Obj.magic st in - let lp1 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 20445 "parser_cocci_menhir.ml" - ) = Obj.magic lp1 in - let t : 'tv_fn_ctype = Obj.magic t in - let x0 : 'tv_storage = Obj.magic x0 in - let _startpos = _startpos_x0_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_one_decl_var = let s = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 20456 "parser_cocci_menhir.ml" - - in - -# 1037 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - let t = - Ast0.wrap - (Ast0.FunctionPointer - (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1, - P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in - Ast0.wrap(Ast0.UnInit(s,fn t,id,P.clt2mcode ";" pv)) ) -# 20468 "parser_cocci_menhir.ml" + let _1 : ( +# 87 "parser_cocci_menhir.mly" + (string * Data.clt) +# 25678 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_invalid_ = +# 1324 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) ) +# 25686 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20476,56 +25694,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _5 : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 20509 "parser_cocci_menhir.ml" - ) = Obj.magic _5 in - let _4 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 20514 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr_list_option = Obj.magic _3 in - let _2 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 20520 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_decl_ident = Obj.magic _1 in + let _1 : ( +# 87 "parser_cocci_menhir.mly" + (string * Data.clt) +# 25707 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : 'tv_one_decl_var = -# 1045 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.MacroDecl(_1,P.clt2mcode "(" _2,_3, - P.clt2mcode ")" _4,P.clt2mcode ";" _5)) ) -# 20529 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_invalid_ = +# 1327 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) ) +# 25715 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20537,120 +25723,54 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = q; - MenhirLib.EngineTypes.startp = _startpos_q_; - MenhirLib.EngineTypes.endp = _endpos_q_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = rp2; - MenhirLib.EngineTypes.startp = _startpos_rp2_; - MenhirLib.EngineTypes.endp = _endpos_rp2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = p; - MenhirLib.EngineTypes.startp = _startpos_p_; - MenhirLib.EngineTypes.endp = _endpos_p_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lp2; - MenhirLib.EngineTypes.startp = _startpos_lp2_; - MenhirLib.EngineTypes.endp = _endpos_lp2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = rp1; - MenhirLib.EngineTypes.startp = _startpos_rp1_; - MenhirLib.EngineTypes.endp = _endpos_rp1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = st; - MenhirLib.EngineTypes.startp = _startpos_st_; - MenhirLib.EngineTypes.endp = _endpos_st_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lp1; - MenhirLib.EngineTypes.startp = _startpos_lp1_; - MenhirLib.EngineTypes.endp = _endpos_lp1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : ( +# 87 "parser_cocci_menhir.mly" + (string * Data.clt) +# 25736 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_invalid_ = +# 1330 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) ) +# 25744 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 20600 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 20606 "parser_cocci_menhir.ml" - ) = Obj.magic q in - let rp2 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 20611 "parser_cocci_menhir.ml" - ) = Obj.magic rp2 in - let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in - let lp2 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 20617 "parser_cocci_menhir.ml" - ) = Obj.magic lp2 in - let rp1 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 20622 "parser_cocci_menhir.ml" - ) = Obj.magic rp1 in - let d : 'tv_d_ident = Obj.magic d in - let st : ( -# 99 "parser_cocci_menhir.mly" - (Data.clt) -# 20628 "parser_cocci_menhir.ml" - ) = Obj.magic st in - let lp1 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 20633 "parser_cocci_menhir.ml" - ) = Obj.magic lp1 in - let t : 'tv_fn_ctype = Obj.magic t in - let _startpos = _startpos_t_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_one_decl_var = let s = - -# 39 "standard.mly" - ( None ) -# 20642 "parser_cocci_menhir.ml" - - in - -# 1051 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - let t = - Ast0.wrap - (Ast0.FunctionPointer - (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1, - P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in - Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))) -# 20654 "parser_cocci_menhir.ml" + let _1 : ( +# 67 "parser_cocci_menhir.mly" + (Parse_aux.typed_info) +# 25765 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_invalid_ = +# 1333 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,ty,clt) = _1 in + Ast0.wrap + (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.CONST,pure)) ) +# 25774 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20662,127 +25782,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = q; - MenhirLib.EngineTypes.startp = _startpos_q_; - MenhirLib.EngineTypes.endp = _endpos_q_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = rp2; - MenhirLib.EngineTypes.startp = _startpos_rp2_; - MenhirLib.EngineTypes.endp = _endpos_rp2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = p; - MenhirLib.EngineTypes.startp = _startpos_p_; - MenhirLib.EngineTypes.endp = _endpos_p_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lp2; - MenhirLib.EngineTypes.startp = _startpos_lp2_; - MenhirLib.EngineTypes.endp = _endpos_lp2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = rp1; - MenhirLib.EngineTypes.startp = _startpos_rp1_; - MenhirLib.EngineTypes.endp = _endpos_rp1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = st; - MenhirLib.EngineTypes.startp = _startpos_st_; - MenhirLib.EngineTypes.endp = _endpos_st_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lp1; - MenhirLib.EngineTypes.startp = _startpos_lp1_; - MenhirLib.EngineTypes.endp = _endpos_lp1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; - }; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 20730 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let e : 'tv_initialize = Obj.magic e in - let q : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 20736 "parser_cocci_menhir.ml" - ) = Obj.magic q in - let rp2 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 20741 "parser_cocci_menhir.ml" - ) = Obj.magic rp2 in - let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in - let lp2 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 20747 "parser_cocci_menhir.ml" - ) = Obj.magic lp2 in - let rp1 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 20752 "parser_cocci_menhir.ml" - ) = Obj.magic rp1 in - let d : 'tv_d_ident = Obj.magic d in - let st : ( -# 99 "parser_cocci_menhir.mly" - (Data.clt) -# 20758 "parser_cocci_menhir.ml" - ) = Obj.magic st in - let lp1 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 20763 "parser_cocci_menhir.ml" - ) = Obj.magic lp1 in - let t : 'tv_fn_ctype = Obj.magic t in - let x0 : 'tv_storage = Obj.magic x0 in - let _startpos = _startpos_x0_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_one_decl_var = let s = - let x = x0 in - -# 41 "standard.mly" - ( Some x ) -# 20774 "parser_cocci_menhir.ml" - - in - -# 1051 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - let t = - Ast0.wrap - (Ast0.FunctionPointer - (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1, - P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in - Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))) -# 20786 "parser_cocci_menhir.ml" + let _1 : ( +# 63 "parser_cocci_menhir.mly" + (Parse_aux.expinfo) +# 25795 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_invalid_ = +# 1337 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,clt) = _1 in + Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) ) +# 25803 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20793,13 +25810,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_option_TLocal_ = -# 29 "standard.mly" - ( None ) -# 20803 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : ( +# 67 "parser_cocci_menhir.mly" + (Parse_aux.typed_info) +# 25824 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_invalid_ = +# 1340 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,ty,clt) = _1 in + Ast0.wrap + (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ANY,pure)) ) +# 25833 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20812,18 +25842,54 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let x : unit = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_option_TLocal_ = -# 31 "standard.mly" - ( Some x ) -# 20827 "parser_cocci_menhir.ml" + let _1 : ( +# 67 "parser_cocci_menhir.mly" + (Parse_aux.typed_info) +# 25854 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_invalid_ = +# 1344 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,ty,clt) = _1 in + Ast0.wrap + (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ID,pure)) ) +# 25863 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : ( +# 67 "parser_cocci_menhir.mly" + (Parse_aux.typed_info) +# 25884 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_invalid_ = +# 1348 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,ty,clt) = _1 in + Ast0.wrap + (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.LocalID,pure)) ) +# 25893 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20834,13 +25900,41 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_option_TPosAny_ = -# 29 "standard.mly" - ( None ) -# 20844 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _3 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 25924 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_eexpr = Obj.magic _2 in + let _1 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 25930 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_primary_expr_eexpr_invalid_ = +# 1352 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2, + P.clt2mcode ")" _3)) ) +# 25938 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20852,19 +25946,42 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let x : unit = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_option_TPosAny_ = -# 31 "standard.mly" - ( Some x ) -# 20868 "parser_cocci_menhir.ml" + let _3 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 25969 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_midzero_list_eexpr_eexpr_ = Obj.magic _2 in + let _1 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 25975 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_primary_expr_eexpr_invalid_ = +# 1355 "parser_cocci_menhir.mly" + ( let (mids,code) = _2 in + Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1, + code, mids, + P.clt2mcode ")" _3)) ) +# 25985 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20875,13 +25992,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_option_eexpr_ = -# 29 "standard.mly" - ( None ) -# 20885 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_invalid = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_invalid_ = +# 1359 "parser_cocci_menhir.mly" + ( _1 ) +# 26009 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20894,18 +26018,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let x : 'tv_eexpr = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_option_eexpr_ = -# 31 "standard.mly" - ( Some x ) -# 20909 "parser_cocci_menhir.ml" + let _1 : 'tv_func_ident = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_nest_expressions_ = +# 1319 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Ident(_1)) ) +# 26033 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20916,13 +26040,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_plus_after_dots = -# 1674 "parser_cocci_menhir.mly" - ([]) -# 20926 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : ( +# 87 "parser_cocci_menhir.mly" + (string * Data.clt) +# 26054 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_nest_expressions_ = +# 1321 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) ) +# 26062 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20934,23 +26070,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : 'tv_plus_after_exp = Obj.magic _2 in + let _1 : ( +# 87 "parser_cocci_menhir.mly" + (string * Data.clt) +# 26083 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_plus_after_dots = -# 1675 "parser_cocci_menhir.mly" - (_2) -# 20954 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_nest_expressions_ = +# 1324 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) ) +# 26091 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20962,25 +26099,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : 'tv_plus_after_exp = Obj.magic _2 in - let _1 : 'tv_expr = Obj.magic _1 in + let _1 : ( +# 87 "parser_cocci_menhir.mly" + (string * Data.clt) +# 26112 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_plus_after_dots = -# 1677 "parser_cocci_menhir.mly" - ( (Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Exp(_1)))))::_2 ) -# 20984 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_nest_expressions_ = +# 1327 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) ) +# 26120 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -20992,25 +26128,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : 'tv_plus_after_stm = Obj.magic _2 in - let _1 : 'tv_fundecl = Obj.magic _1 in + let _1 : ( +# 87 "parser_cocci_menhir.mly" + (string * Data.clt) +# 26141 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_plus_after_dots = -# 1678 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.DECL(_1))::_2 ) -# 21014 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_nest_expressions_ = +# 1330 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) ) +# 26149 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21022,25 +26157,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : 'tv_plus_after_stm = Obj.magic _2 in - let _1 : 'tv_decl_statement_expr = Obj.magic _1 in + let _1 : ( +# 67 "parser_cocci_menhir.mly" + (Parse_aux.typed_info) +# 26170 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_plus_after_dots = -# 1680 "parser_cocci_menhir.mly" - ( (List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1)@_2 ) -# 21044 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_nest_expressions_ = +# 1333 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,ty,clt) = _1 in + Ast0.wrap + (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.CONST,pure)) ) +# 26179 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21051,13 +26186,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_plus_after_exp = -# 1670 "parser_cocci_menhir.mly" - ([]) -# 21061 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : ( +# 63 "parser_cocci_menhir.mly" + (Parse_aux.expinfo) +# 26200 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_nest_expressions_ = +# 1337 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,clt) = _1 in + Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) ) +# 26208 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21069,25 +26216,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : 'tv_plus_after_dots = Obj.magic _2 in - let _1 : 'tv_stm_dots = Obj.magic _1 in + let _1 : ( +# 67 "parser_cocci_menhir.mly" + (Parse_aux.typed_info) +# 26229 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_plus_after_exp = -# 1671 "parser_cocci_menhir.mly" - ( (Ast0.wrap(Ast0.OTHER(_1)))::_2 ) -# 21091 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_nest_expressions_ = +# 1340 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,ty,clt) = _1 in + Ast0.wrap + (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ANY,pure)) ) +# 26238 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21098,13 +26245,26 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_plus_after_stm = -# 1683 "parser_cocci_menhir.mly" - ([]) -# 21108 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : ( +# 67 "parser_cocci_menhir.mly" + (Parse_aux.typed_info) +# 26259 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_nest_expressions_ = +# 1344 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,ty,clt) = _1 in + Ast0.wrap + (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ID,pure)) ) +# 26268 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21116,25 +26276,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : 'tv_plus_after_dots = Obj.magic _2 in - let _1 : 'tv_stm_dots = Obj.magic _1 in + let _1 : ( +# 67 "parser_cocci_menhir.mly" + (Parse_aux.typed_info) +# 26289 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_plus_after_stm = -# 1684 "parser_cocci_menhir.mly" - ( (Ast0.wrap(Ast0.OTHER(_1)))::_2 ) -# 21138 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_nest_expressions_ = +# 1348 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,ty,clt) = _1 in + Ast0.wrap + (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.LocalID,pure)) ) +# 26298 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21146,25 +26306,40 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let _2 : 'tv_plus_after_stm = Obj.magic _2 in - let _1 : 'tv_fundecl = Obj.magic _1 in + let _3 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 26329 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_eexpr = Obj.magic _2 in + let _1 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 26335 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_plus_after_stm = -# 1685 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.DECL(_1))::_2 ) -# 21168 "parser_cocci_menhir.ml" + let _endpos = _endpos__3_ in + let _v : 'tv_primary_expr_eexpr_nest_expressions_ = +# 1352 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2, + P.clt2mcode ")" _3)) ) +# 26343 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21176,25 +26351,42 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let _2 : 'tv_plus_after_stm = Obj.magic _2 in - let _1 : 'tv_decl_statement = Obj.magic _1 in + let _3 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 26374 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_midzero_list_eexpr_eexpr_ = Obj.magic _2 in + let _1 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 26380 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_plus_after_stm = -# 1687 "parser_cocci_menhir.mly" - ( (List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1)@_2 ) -# 21198 "parser_cocci_menhir.ml" + let _endpos = _endpos__3_ in + let _v : 'tv_primary_expr_eexpr_nest_expressions_ = +# 1355 "parser_cocci_menhir.mly" + ( let (mids,code) = _2 in + Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1, + code, mids, + P.clt2mcode ")" _3)) ) +# 26390 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21206,31 +26398,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = ew; - MenhirLib.EngineTypes.startp = _startpos_ew_; - MenhirLib.EngineTypes.endp = _endpos_ew_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = b; - MenhirLib.EngineTypes.startp = _startpos_b_; - MenhirLib.EngineTypes.endp = _endpos_b_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = f; - MenhirLib.EngineTypes.startp = _startpos_f_; - MenhirLib.EngineTypes.endp = _endpos_f_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let ew : 'tv_loption_error_words_ = Obj.magic ew in - let b : 'tv_loption_plus_start_ = Obj.magic b in - let f : 'tv_loption_filespec_ = Obj.magic f in - let _startpos = _startpos_f_ in - let _endpos = _endpos_ew_ in - let _v : 'tv_plus_body = -# 614 "parser_cocci_menhir.mly" - ( Top_level.top_level (f@b@ew) ) -# 21234 "parser_cocci_menhir.ml" + let _1 : 'tv_nest_expressions = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_eexpr_nest_expressions_ = +# 1359 "parser_cocci_menhir.mly" + ( _1 ) +# 26414 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21242,31 +26422,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = ew; - MenhirLib.EngineTypes.startp = _startpos_ew_; - MenhirLib.EngineTypes.endp = _endpos_ew_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = b; - MenhirLib.EngineTypes.startp = _startpos_b_; - MenhirLib.EngineTypes.endp = _endpos_b_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = f; - MenhirLib.EngineTypes.startp = _startpos_f_; - MenhirLib.EngineTypes.endp = _endpos_f_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let ew : 'tv_loption_error_words_ = Obj.magic ew in - let b : 'tv_top_eexpr = Obj.magic b in - let f : 'tv_loption_filespec_ = Obj.magic f in - let _startpos = _startpos_f_ in - let _endpos = _endpos_ew_ in - let _v : 'tv_plus_exp_body = -# 628 "parser_cocci_menhir.mly" - ( Top_level.top_level (f@[b]@ew) ) -# 21270 "parser_cocci_menhir.ml" + let _1 : 'tv_func_ident = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_expr_invalid_ = +# 1319 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Ident(_1)) ) +# 26438 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21278,27 +26446,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_plus_exp_body = Obj.magic _1 in + let _1 : ( +# 87 "parser_cocci_menhir.mly" + (string * Data.clt) +# 26459 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : ( -# 143 "parser_cocci_menhir.mly" - (Ast0_cocci.rule) -# 21298 "parser_cocci_menhir.ml" - ) = -# 179 "parser_cocci_menhir.mly" - ( _1 ) -# 21302 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_expr_invalid_ = +# 1321 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) ) +# 26467 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21310,27 +26475,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = p; - MenhirLib.EngineTypes.startp = _startpos_p_; - MenhirLib.EngineTypes.endp = _endpos_p_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let p : 'tv_plus_exp_body = Obj.magic p in - let _startpos = _startpos_p_ in - let _endpos = _endpos__2_ in - let _v : ( -# 143 "parser_cocci_menhir.mly" - (Ast0_cocci.rule) -# 21330 "parser_cocci_menhir.ml" - ) = -# 179 "parser_cocci_menhir.mly" - ( p ) -# 21334 "parser_cocci_menhir.ml" + let _1 : ( +# 87 "parser_cocci_menhir.mly" + (string * Data.clt) +# 26488 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_expr_invalid_ = +# 1324 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) ) +# 26496 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21342,27 +26504,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = p; - MenhirLib.EngineTypes.startp = _startpos_p_; - MenhirLib.EngineTypes.endp = _endpos_p_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let p : 'tv_plus_exp_body = Obj.magic p in - let _startpos = _startpos_p_ in - let _endpos = _endpos__2_ in - let _v : ( -# 143 "parser_cocci_menhir.mly" - (Ast0_cocci.rule) -# 21362 "parser_cocci_menhir.ml" - ) = -# 180 "parser_cocci_menhir.mly" - ( p ) -# 21366 "parser_cocci_menhir.ml" + let _1 : ( +# 87 "parser_cocci_menhir.mly" + (string * Data.clt) +# 26517 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_expr_invalid_ = +# 1327 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) ) +# 26525 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21374,27 +26533,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_plus_body = Obj.magic _1 in + let _1 : ( +# 87 "parser_cocci_menhir.mly" + (string * Data.clt) +# 26546 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : ( -# 140 "parser_cocci_menhir.mly" - (Ast0_cocci.rule) -# 21394 "parser_cocci_menhir.ml" - ) = -# 175 "parser_cocci_menhir.mly" - ( _1 ) -# 21398 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_expr_invalid_ = +# 1330 "parser_cocci_menhir.mly" + ( let (x,clt) = _1 in + Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) ) +# 26554 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21406,27 +26562,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = p; - MenhirLib.EngineTypes.startp = _startpos_p_; - MenhirLib.EngineTypes.endp = _endpos_p_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let p : 'tv_plus_body = Obj.magic p in - let _startpos = _startpos_p_ in - let _endpos = _endpos__2_ in - let _v : ( -# 140 "parser_cocci_menhir.mly" - (Ast0_cocci.rule) -# 21426 "parser_cocci_menhir.ml" - ) = -# 175 "parser_cocci_menhir.mly" - ( p ) -# 21430 "parser_cocci_menhir.ml" + let _1 : ( +# 67 "parser_cocci_menhir.mly" + (Parse_aux.typed_info) +# 26575 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_expr_invalid_ = +# 1333 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,ty,clt) = _1 in + Ast0.wrap + (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.CONST,pure)) ) +# 26584 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21438,27 +26592,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = p; - MenhirLib.EngineTypes.startp = _startpos_p_; - MenhirLib.EngineTypes.endp = _endpos_p_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let p : 'tv_plus_body = Obj.magic p in - let _startpos = _startpos_p_ in - let _endpos = _endpos__2_ in - let _v : ( -# 140 "parser_cocci_menhir.mly" - (Ast0_cocci.rule) -# 21458 "parser_cocci_menhir.ml" - ) = -# 176 "parser_cocci_menhir.mly" - ( p ) -# 21462 "parser_cocci_menhir.ml" + let _1 : ( +# 63 "parser_cocci_menhir.mly" + (Parse_aux.expinfo) +# 26605 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_expr_invalid_ = +# 1337 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,clt) = _1 in + Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) ) +# 26613 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21476,13 +26627,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_ctype = Obj.magic _1 in + let _1 : ( +# 67 "parser_cocci_menhir.mly" + (Parse_aux.typed_info) +# 26634 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_plus_start = -# 1659 "parser_cocci_menhir.mly" - ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Ty(_1))))] ) -# 21486 "parser_cocci_menhir.ml" + let _v : 'tv_primary_expr_expr_invalid_ = +# 1340 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,ty,clt) = _1 in + Ast0.wrap + (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ANY,pure)) ) +# 26643 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21500,13 +26657,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_top_init = Obj.magic _1 in + let _1 : ( +# 67 "parser_cocci_menhir.mly" + (Parse_aux.typed_info) +# 26664 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_plus_start = -# 1660 "parser_cocci_menhir.mly" - ( [Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.TopInit(_1))))] ) -# 21510 "parser_cocci_menhir.ml" + let _v : 'tv_primary_expr_expr_invalid_ = +# 1344 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,ty,clt) = _1 in + Ast0.wrap + (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ID,pure)) ) +# 26673 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21518,25 +26681,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : 'tv_plus_after_dots = Obj.magic _2 in - let _1 : 'tv_stm_dots = Obj.magic _1 in + let _1 : ( +# 67 "parser_cocci_menhir.mly" + (Parse_aux.typed_info) +# 26694 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_plus_start = -# 1662 "parser_cocci_menhir.mly" - ( (Ast0.wrap(Ast0.OTHER(_1)))::_2 ) -# 21540 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_expr_invalid_ = +# 1348 "parser_cocci_menhir.mly" + ( let (nm,constraints,pure,ty,clt) = _1 in + Ast0.wrap + (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.LocalID,pure)) ) +# 26703 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21548,25 +26711,40 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; - } = _menhir_stack in - let _2 : 'tv_plus_after_exp = Obj.magic _2 in - let _1 : 'tv_expr = Obj.magic _1 in + } = _menhir_stack in + let _3 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 26734 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_eexpr = Obj.magic _2 in + let _1 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 26740 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_plus_start = -# 1664 "parser_cocci_menhir.mly" - ( (Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Exp(_1)))))::_2 ) -# 21570 "parser_cocci_menhir.ml" + let _endpos = _endpos__3_ in + let _v : 'tv_primary_expr_expr_invalid_ = +# 1352 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2, + P.clt2mcode ")" _3)) ) +# 26748 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21578,25 +26756,42 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let _2 : 'tv_plus_after_stm = Obj.magic _2 in - let _1 : 'tv_fundecl = Obj.magic _1 in + let _3 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 26779 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_midzero_list_expr_eexpr_ = Obj.magic _2 in + let _1 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 26785 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_plus_start = -# 1665 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.DECL(_1))::_2 ) -# 21600 "parser_cocci_menhir.ml" + let _endpos = _endpos__3_ in + let _v : 'tv_primary_expr_expr_invalid_ = +# 1355 "parser_cocci_menhir.mly" + ( let (mids,code) = _2 in + Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1, + code, mids, + P.clt2mcode ")" _3)) ) +# 26795 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21608,25 +26803,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : 'tv_plus_after_stm = Obj.magic _2 in - let _1 : 'tv_decl_statement_expr = Obj.magic _1 in + let _1 : 'tv_invalid = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_plus_start = -# 1667 "parser_cocci_menhir.mly" - ( (List.map (function x -> Ast0.wrap(Ast0.OTHER(x))) _1)@_2 ) -# 21630 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_primary_expr_expr_invalid_ = +# 1359 "parser_cocci_menhir.mly" + ( _1 ) +# 26819 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21639,22 +26828,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : ( -# 47 "parser_cocci_menhir.mly" - (string) -# 21651 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_pnrule = -# 230 "parser_cocci_menhir.mly" - ( Ast.Dep _1 ) -# 21658 "parser_cocci_menhir.ml" + let _v : 'tv_pure = +# 190 "parser_cocci_menhir.mly" + ( Ast0.Pure ) +# 26841 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21666,27 +26849,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : ( -# 47 "parser_cocci_menhir.mly" - (string) -# 21683 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_pnrule = -# 231 "parser_cocci_menhir.mly" - ( Ast.AntiDep _2 ) -# 21690 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure = +# 191 "parser_cocci_menhir.mly" + ( Ast0.Context ) +# 26863 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21698,7 +26871,6 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { @@ -21708,17 +26880,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : ( -# 47 "parser_cocci_menhir.mly" - (string) -# 21715 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : 'tv_pnrule = -# 232 "parser_cocci_menhir.mly" - ( Ast.EverDep _2 ) -# 21722 "parser_cocci_menhir.ml" + let _v : 'tv_pure = +# 192 "parser_cocci_menhir.mly" + ( Ast0.PureContext ) +# 26889 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21730,7 +26897,6 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { @@ -21740,17 +26906,12 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : ( -# 47 "parser_cocci_menhir.mly" - (string) -# 21747 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : 'tv_pnrule = -# 233 "parser_cocci_menhir.mly" - ( Ast.NeverDep _2 ) -# 21754 "parser_cocci_menhir.ml" + let _v : 'tv_pure = +# 193 "parser_cocci_menhir.mly" + ( Ast0.PureContext ) +# 26915 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21761,28 +26922,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let _2 : 'tv_dep = Obj.magic _2 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_pnrule = -# 234 "parser_cocci_menhir.mly" - ( _2 ) -# 21786 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_pure = +# 194 "parser_cocci_menhir.mly" + ( Ast0.Impure ) +# 26932 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21800,13 +26946,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_primary_expr_eexpr_dot_expressions_ = Obj.magic _1 in + let _1 : ( +# 59 "parser_cocci_menhir.mly" + (string * Data.clt) +# 26953 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = -# 1323 "parser_cocci_menhir.mly" - ( _1 ) -# 21810 "parser_cocci_menhir.ml" + let _v : 'tv_pure_ident = +# 1373 "parser_cocci_menhir.mly" + ( _1 ) +# 26960 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21818,86 +26968,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - } = _menhir_stack in - let _4 : ( -# 102 "parser_cocci_menhir.mly" - (Data.clt) -# 21846 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr = Obj.magic _3 in - let _2 : ( -# 102 "parser_cocci_menhir.mly" - (Data.clt) -# 21852 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = -# 1325 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3, - P.clt2mcode "]" _4)) ) -# 21861 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; } = _menhir_stack in - let _3 : 'tv_ident = Obj.magic _3 in - let _2 : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 21893 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in + let _1 : 'tv_pure_ident = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = -# 1328 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) ) -# 21901 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_or_meta_ident = +# 1379 "parser_cocci_menhir.mly" + ( (None,P.id2name _1) ) +# 26984 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21909,36 +26992,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _3 : 'tv_ident = Obj.magic _3 in - let _2 : ( -# 104 "parser_cocci_menhir.mly" - (Data.clt) -# 21933 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in + let _1 : 'tv_meta_ident = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = -# 1330 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2, - _3)) ) -# 21942 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_or_meta_ident = +# 1380 "parser_cocci_menhir.mly" + ( _1 ) +# 27008 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21950,29 +27016,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : ( -# 85 "parser_cocci_menhir.mly" - (Data.clt) -# 21968 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = -# 1333 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) ) -# 21976 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_or_meta_ident = +# 1381 "parser_cocci_menhir.mly" + ( (None, "identifier") ) +# 27030 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -21984,29 +27038,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : ( -# 85 "parser_cocci_menhir.mly" - (Data.clt) -# 22002 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = -# 1335 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) ) -# 22010 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_or_meta_ident = +# 1382 "parser_cocci_menhir.mly" + ( (None, "expression") ) +# 27052 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22018,47 +27060,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _4 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 22046 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr_list_option = Obj.magic _3 in - let _2 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 22052 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_postfix_expr_eexpr_dot_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : 'tv_postfix_expr_eexpr_dot_expressions_ = -# 1337 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2, - _3, - P.clt2mcode ")" _4)) ) -# 22062 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_or_meta_ident = +# 1383 "parser_cocci_menhir.mly" + ( (None, "statement") ) +# 27074 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22071,18 +27083,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_primary_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_postfix_expr_eexpr_invalid_ = -# 1323 "parser_cocci_menhir.mly" - ( _1 ) -# 22086 "parser_cocci_menhir.ml" + let _v : 'tv_pure_ident_or_meta_ident = +# 1384 "parser_cocci_menhir.mly" + ( (None, "function") ) +# 27096 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22094,46 +27104,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _4 : ( -# 102 "parser_cocci_menhir.mly" - (Data.clt) -# 22122 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr = Obj.magic _3 in - let _2 : ( -# 102 "parser_cocci_menhir.mly" - (Data.clt) -# 22128 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : 'tv_postfix_expr_eexpr_invalid_ = -# 1325 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3, - P.clt2mcode "]" _4)) ) -# 22137 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_or_meta_ident = +# 1385 "parser_cocci_menhir.mly" + ( (None, "local") ) +# 27118 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22145,35 +27126,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _3 : 'tv_ident = Obj.magic _3 in - let _2 : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 22169 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_postfix_expr_eexpr_invalid_ = -# 1328 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) ) -# 22177 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_or_meta_ident = +# 1386 "parser_cocci_menhir.mly" + ( (None, "type") ) +# 27140 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22185,36 +27148,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _3 : 'tv_ident = Obj.magic _3 in - let _2 : ( -# 104 "parser_cocci_menhir.mly" - (Data.clt) -# 22209 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_postfix_expr_eexpr_invalid_ = -# 1330 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2, - _3)) ) -# 22218 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_or_meta_ident = +# 1387 "parser_cocci_menhir.mly" + ( (None, "parameter") ) +# 27162 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22226,29 +27170,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let _2 : ( -# 85 "parser_cocci_menhir.mly" - (Data.clt) -# 22244 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_postfix_expr_eexpr_invalid_ = -# 1333 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) ) -# 22252 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_or_meta_ident = +# 1388 "parser_cocci_menhir.mly" + ( (None, "idexpression") ) +# 27184 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22260,29 +27192,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : ( -# 85 "parser_cocci_menhir.mly" - (Data.clt) -# 22278 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_postfix_expr_eexpr_invalid_ = -# 1335 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) ) -# 22286 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_or_meta_ident = +# 1389 "parser_cocci_menhir.mly" + ( (None, "initialiser") ) +# 27206 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22294,47 +27214,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _4 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 22322 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr_list_option = Obj.magic _3 in - let _2 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 22328 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_postfix_expr_eexpr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : 'tv_postfix_expr_eexpr_invalid_ = -# 1337 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2, - _3, - P.clt2mcode ")" _4)) ) -# 22338 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_or_meta_ident = +# 1390 "parser_cocci_menhir.mly" + ( (None, "list") ) +# 27228 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22347,18 +27237,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_primary_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = -# 1323 "parser_cocci_menhir.mly" - ( _1 ) -# 22362 "parser_cocci_menhir.ml" + let _v : 'tv_pure_ident_or_meta_ident = +# 1391 "parser_cocci_menhir.mly" + ( (None, "fresh") ) +# 27250 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22370,46 +27258,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _4 : ( -# 102 "parser_cocci_menhir.mly" - (Data.clt) -# 22398 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr = Obj.magic _3 in - let _2 : ( -# 102 "parser_cocci_menhir.mly" - (Data.clt) -# 22404 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = -# 1325 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3, - P.clt2mcode "]" _4)) ) -# 22413 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_or_meta_ident = +# 1392 "parser_cocci_menhir.mly" + ( (None, "constant") ) +# 27272 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22421,35 +27280,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _3 : 'tv_ident = Obj.magic _3 in - let _2 : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 22445 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = -# 1328 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) ) -# 22453 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_or_meta_ident = +# 1393 "parser_cocci_menhir.mly" + ( (None, "error") ) +# 27294 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22461,36 +27302,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _3 : 'tv_ident = Obj.magic _3 in - let _2 : ( -# 104 "parser_cocci_menhir.mly" - (Data.clt) -# 22485 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = -# 1330 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2, - _3)) ) -# 22494 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_or_meta_ident = +# 1394 "parser_cocci_menhir.mly" + ( (None, "words") ) +# 27316 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22502,29 +27324,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : ( -# 85 "parser_cocci_menhir.mly" - (Data.clt) -# 22520 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = -# 1333 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) ) -# 22528 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_or_meta_ident = +# 1395 "parser_cocci_menhir.mly" + ( (None, "pure") ) +# 27338 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22536,29 +27346,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : ( -# 85 "parser_cocci_menhir.mly" - (Data.clt) -# 22554 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = -# 1335 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) ) -# 22562 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_or_meta_ident = +# 1396 "parser_cocci_menhir.mly" + ( (None, "context") ) +# 27360 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22567,50 +27365,20 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos; MenhirLib.EngineTypes.next = _menhir_stack; }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _4 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 22598 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr_list_option = Obj.magic _3 in - let _2 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 22604 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_postfix_expr_eexpr_nest_expressions_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : 'tv_postfix_expr_eexpr_nest_expressions_ = -# 1337 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2, - _3, - P.clt2mcode ")" _4)) ) -# 22614 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_or_meta_ident = +# 1397 "parser_cocci_menhir.mly" + ( (None, "generated") ) +# 27382 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22623,18 +27391,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_primary_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_postfix_expr_expr_invalid_ = -# 1323 "parser_cocci_menhir.mly" - ( _1 ) -# 22638 "parser_cocci_menhir.ml" + let _v : 'tv_pure_ident_or_meta_ident = +# 1398 "parser_cocci_menhir.mly" + ( (None, "typedef") ) +# 27404 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22646,46 +27412,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _4 : ( -# 102 "parser_cocci_menhir.mly" - (Data.clt) -# 22674 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr = Obj.magic _3 in - let _2 : ( -# 102 "parser_cocci_menhir.mly" - (Data.clt) -# 22680 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : 'tv_postfix_expr_expr_invalid_ = -# 1325 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.ArrayAccess (_1,P.clt2mcode "[" _2,_3, - P.clt2mcode "]" _4)) ) -# 22689 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_or_meta_ident = +# 1399 "parser_cocci_menhir.mly" + ( (None, "declarer") ) +# 27426 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22697,35 +27434,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _3 : 'tv_ident = Obj.magic _3 in - let _2 : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 22721 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_postfix_expr_expr_invalid_ = -# 1328 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.RecordAccess(_1, P.clt2mcode "." _2, _3)) ) -# 22729 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_or_meta_ident = +# 1400 "parser_cocci_menhir.mly" + ( (None, "iterator") ) +# 27448 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22737,36 +27456,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _3 : 'tv_ident = Obj.magic _3 in - let _2 : ( -# 104 "parser_cocci_menhir.mly" - (Data.clt) -# 22761 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_postfix_expr_expr_invalid_ = -# 1330 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.RecordPtAccess(_1, P.clt2mcode "->" _2, - _3)) ) -# 22770 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_or_meta_ident = +# 1401 "parser_cocci_menhir.mly" + ( (None, "name") ) +# 27470 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22778,29 +27478,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : ( -# 85 "parser_cocci_menhir.mly" - (Data.clt) -# 22796 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_postfix_expr_expr_invalid_ = -# 1333 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Inc _2)) ) -# 22804 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_pure_ident_or_meta_ident = +# 1402 "parser_cocci_menhir.mly" + ( (None, "position") ) +# 27492 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22812,29 +27500,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = l; + MenhirLib.EngineTypes.startp = _startpos_l_; + MenhirLib.EngineTypes.endp = _endpos_l_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : ( -# 85 "parser_cocci_menhir.mly" - (Data.clt) -# 22830 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_postfix_expr_expr_invalid_ = -# 1335 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Postfix (_1, P.clt2mcode Ast.Dec _2)) ) -# 22838 "parser_cocci_menhir.ml" + let l : 'tv_loption_not_ceq_ = Obj.magic l in + let i : 'tv_pure_ident_or_meta_ident = Obj.magic i in + let _startpos = _startpos_i_ in + let _endpos = _endpos_l_ in + let _v : 'tv_pure_ident_or_meta_ident_with_not_eq_not_ceq_ = +# 1421 "parser_cocci_menhir.mly" + ( (i,l) ) +# 27522 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22846,47 +27530,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = l; + MenhirLib.EngineTypes.startp = _startpos_l_; + MenhirLib.EngineTypes.endp = _endpos_l_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _4 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 22874 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr_list_option = Obj.magic _3 in - let _2 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 22880 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_postfix_expr_expr_invalid_ = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : 'tv_postfix_expr_expr_invalid_ = -# 1337 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.FunCall(_1,P.clt2mcode "(" _2, - _3, - P.clt2mcode ")" _4)) ) -# 22890 "parser_cocci_menhir.ml" + let l : 'tv_loption_not_eq_ = Obj.magic l in + let i : 'tv_pure_ident_or_meta_ident = Obj.magic i in + let _startpos = _startpos_i_ in + let _endpos = _endpos_l_ in + let _v : 'tv_pure_ident_or_meta_ident_with_not_eq_not_eq_ = +# 1421 "parser_cocci_menhir.mly" + ( (i,l) ) +# 27552 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22898,19 +27560,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let _1 : 'tv_func_ident = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_dot_expressions_ = -# 1342 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Ident(_1)) ) -# 22914 "parser_cocci_menhir.ml" + MenhirLib.EngineTypes.semv = l; + MenhirLib.EngineTypes.startp = _startpos_l_; + MenhirLib.EngineTypes.endp = _endpos_l_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let l : 'tv_loption_not_eqe_ = Obj.magic l in + let i : 'tv_pure_ident_or_meta_ident = Obj.magic i in + let _startpos = _startpos_i_ in + let _endpos = _endpos_l_ in + let _v : 'tv_pure_ident_or_meta_ident_with_not_eq_not_eqe_ = +# 1421 "parser_cocci_menhir.mly" + ( (i,l) ) +# 27582 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22922,24 +27590,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = l; + MenhirLib.EngineTypes.startp = _startpos_l_; + MenhirLib.EngineTypes.endp = _endpos_l_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : ( -# 87 "parser_cocci_menhir.mly" - (string * Data.clt) -# 22935 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_dot_expressions_ = -# 1344 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) ) -# 22943 "parser_cocci_menhir.ml" + let l : 'tv_loption_not_pos_ = Obj.magic l in + let i : 'tv_pure_ident_or_meta_ident = Obj.magic i in + let _startpos = _startpos_i_ in + let _endpos = _endpos_l_ in + let _v : 'tv_pure_ident_or_meta_ident_with_not_eq_not_pos_ = +# 1421 "parser_cocci_menhir.mly" + ( (i,l) ) +# 27612 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22957,18 +27626,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : ( -# 87 "parser_cocci_menhir.mly" - (string * Data.clt) -# 22964 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in + let _1 : 'tv_pure_ident_or_meta_ident = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_dot_expressions_ = -# 1347 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) ) -# 22972 "parser_cocci_menhir.ml" + let _v : 'tv_pure_ident_or_meta_ident_with_seed = +# 1405 "parser_cocci_menhir.mly" + ( (_1,Ast.NoVal) ) +# 27636 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -22980,24 +27644,31 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let _1 : ( -# 87 "parser_cocci_menhir.mly" - (string * Data.clt) -# 22993 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in + let _3 : 'tv_separated_nonempty_list_TCppConcatOp_seed_elem_ = Obj.magic _3 in + let _1 : 'tv_pure_ident_or_meta_ident = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_dot_expressions_ = -# 1350 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) ) -# 23001 "parser_cocci_menhir.ml" + let _endpos = _endpos__3_ in + let _v : 'tv_pure_ident_or_meta_ident_with_seed = +# 1408 "parser_cocci_menhir.mly" + ( match _3 with + [Ast.SeedString s] -> (_1,Ast.StringSeed s) + | _ -> (_1,Ast.ListSeed _3) ) +# 27672 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23008,25 +27679,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let _1 : ( -# 87 "parser_cocci_menhir.mly" - (string * Data.clt) -# 23022 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_dot_expressions_ = -# 1353 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) ) -# 23030 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : ( +# 131 "parser_cocci_menhir.mly" + (unit) +# 27689 "parser_cocci_menhir.ml" + ) = +# 172 "parser_cocci_menhir.mly" + ( ) +# 27693 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23044,19 +27707,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : ( -# 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 23051 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in + let _1 : 'tv_one_decl_var = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_dot_expressions_ = -# 1356 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,ty,clt) = _1 in - Ast0.wrap - (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.CONST,pure)) ) -# 23060 "parser_cocci_menhir.ml" + let _v : 'tv_rule_elem_statement = +# 893 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Decl((Ast0.default_info(),Ast0.context_befaft()),_1)) ) +# 27717 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23068,24 +27725,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : ( -# 63 "parser_cocci_menhir.mly" - (Parse_aux.expinfo) -# 23081 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in + let _2 : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 27743 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_expr = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_dot_expressions_ = -# 1360 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,clt) = _1 in - Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) ) -# 23089 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_rule_elem_statement = +# 894 "parser_cocci_menhir.mly" + ( P.exp_stm _1 _2 ) +# 27751 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23097,25 +27759,39 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in + let _3 : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 27782 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_eexpr = Obj.magic _2 in let _1 : ( -# 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 23110 "parser_cocci_menhir.ml" +# 57 "parser_cocci_menhir.mly" + (Data.clt) +# 27788 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_dot_expressions_ = -# 1363 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,ty,clt) = _1 in - Ast0.wrap - (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ANY,pure)) ) -# 23119 "parser_cocci_menhir.ml" + let _endpos = _endpos__3_ in + let _v : 'tv_rule_elem_statement = +# 895 "parser_cocci_menhir.mly" + ( P.ret_exp _1 _2 _3 ) +# 27795 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23127,25 +27803,33 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in + let _2 : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 27821 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in let _1 : ( -# 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 23140 "parser_cocci_menhir.ml" +# 57 "parser_cocci_menhir.mly" + (Data.clt) +# 27826 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_dot_expressions_ = -# 1367 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,ty,clt) = _1 in - Ast0.wrap - (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ID,pure)) ) -# 23149 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_rule_elem_statement = +# 896 "parser_cocci_menhir.mly" + ( P.ret _1 _2 ) +# 27833 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23157,25 +27841,33 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in + let _2 : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 27859 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in let _1 : ( -# 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 23170 "parser_cocci_menhir.ml" +# 58 "parser_cocci_menhir.mly" + (Data.clt) +# 27864 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_dot_expressions_ = -# 1371 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,ty,clt) = _1 in - Ast0.wrap - (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.LocalID,pure)) ) -# 23179 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_rule_elem_statement = +# 897 "parser_cocci_menhir.mly" + ( P.break _1 _2 ) +# 27871 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23187,40 +27879,33 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _3 : ( -# 77 "parser_cocci_menhir.mly" + let _2 : ( +# 107 "parser_cocci_menhir.mly" (Data.clt) -# 23210 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_eexpr = Obj.magic _2 in +# 27897 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in let _1 : ( -# 76 "parser_cocci_menhir.mly" +# 58 "parser_cocci_menhir.mly" (Data.clt) -# 23216 "parser_cocci_menhir.ml" +# 27902 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_primary_expr_eexpr_dot_expressions_ = -# 1375 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2, - P.clt2mcode ")" _3)) ) -# 23224 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_rule_elem_statement = +# 898 "parser_cocci_menhir.mly" + ( P.cont _1 _2 ) +# 27909 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23251,71 +27936,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _3 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 23255 "parser_cocci_menhir.ml" +# 27940 "parser_cocci_menhir.ml" ) = Obj.magic _3 in - let _2 : 'tv_midzero_list_eexpr_eexpr_ = Obj.magic _2 in + let _2 : 'tv_midzero_list_rule_elem_statement_rule_elem_statement_ = Obj.magic _2 in let _1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 23261 "parser_cocci_menhir.ml" +# 27946 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in - let _v : 'tv_primary_expr_eexpr_dot_expressions_ = -# 1378 "parser_cocci_menhir.mly" - ( let (mids,code) = _2 in - Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1, - code, mids, - P.clt2mcode ")" _3)) ) -# 23271 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let _1 : 'tv_dot_expressions = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_dot_expressions_ = -# 1382 "parser_cocci_menhir.mly" - ( _1 ) -# 23295 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let _1 : 'tv_func_ident = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_invalid_ = -# 1342 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Ident(_1)) ) -# 23319 "parser_cocci_menhir.ml" + let _v : 'tv_rule_elem_statement = +# 900 "parser_cocci_menhir.mly" + ( let (mids,code) = _2 in + Ast0.wrap + (Ast0.Disj(P.clt2mcode "(" _1, + List.map (function x -> Ast0.wrap(Ast0.DOTS([x]))) code, + mids, P.clt2mcode ")" _3)) ) +# 27957 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23327,24 +27965,62 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ee; + MenhirLib.EngineTypes.startp = _startpos_ee_; + MenhirLib.EngineTypes.endp = _endpos_ee_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = a; + MenhirLib.EngineTypes.startp = _startpos_a_; + MenhirLib.EngineTypes.endp = _endpos_a_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; } = _menhir_stack in - let _1 : ( -# 87 "parser_cocci_menhir.mly" - (string * Data.clt) -# 23340 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in + let ee : 'tv_is_expression = Obj.magic ee in + let e : 'tv_exists = Obj.magic e in + let a : 'tv_loption_disable_ = Obj.magic a in + let i : 'tv_loption_choose_iso_ = Obj.magic i in + let d : 'tv_depends = Obj.magic d in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_invalid_ = -# 1344 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) ) -# 23348 "parser_cocci_menhir.ml" + let _endpos = _endpos__7_ in + let _v : ( +# 153 "parser_cocci_menhir.mly" + (Ast_cocci.rulename) +# 28013 "parser_cocci_menhir.ml" + ) = let nm = + +# 39 "standard.mly" + ( None ) +# 28018 "parser_cocci_menhir.ml" + + in + +# 202 "parser_cocci_menhir.mly" + ( P.make_cocci_rule_name_result nm d i a e ee ) +# 28024 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23356,24 +28032,69 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.startp = _startpos__8_; + MenhirLib.EngineTypes.endp = _endpos__8_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ee; + MenhirLib.EngineTypes.startp = _startpos_ee_; + MenhirLib.EngineTypes.endp = _endpos_ee_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = a; + MenhirLib.EngineTypes.startp = _startpos_a_; + MenhirLib.EngineTypes.endp = _endpos_a_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; } = _menhir_stack in - let _1 : ( -# 87 "parser_cocci_menhir.mly" - (string * Data.clt) -# 23369 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_invalid_ = -# 1347 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) ) -# 23377 "parser_cocci_menhir.ml" + let ee : 'tv_is_expression = Obj.magic ee in + let e : 'tv_exists = Obj.magic e in + let a : 'tv_loption_disable_ = Obj.magic a in + let i : 'tv_loption_choose_iso_ = Obj.magic i in + let d : 'tv_depends = Obj.magic d in + let x0 : 'tv_pure_ident = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos__8_ in + let _v : ( +# 153 "parser_cocci_menhir.mly" + (Ast_cocci.rulename) +# 28086 "parser_cocci_menhir.ml" + ) = let nm = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 28092 "parser_cocci_menhir.ml" + + in + +# 202 "parser_cocci_menhir.mly" + ( P.make_cocci_rule_name_result nm d i a e ee ) +# 28098 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23385,24 +28106,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.startp = _startpos__8_; + MenhirLib.EngineTypes.endp = _endpos__8_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ee; + MenhirLib.EngineTypes.startp = _startpos_ee_; + MenhirLib.EngineTypes.endp = _endpos_ee_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = a; + MenhirLib.EngineTypes.startp = _startpos_a_; + MenhirLib.EngineTypes.endp = _endpos_a_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; } = _menhir_stack in - let _1 : ( -# 87 "parser_cocci_menhir.mly" - (string * Data.clt) -# 23398 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in + let ee : 'tv_is_expression = Obj.magic ee in + let e : 'tv_exists = Obj.magic e in + let a : 'tv_loption_disable_ = Obj.magic a in + let i : 'tv_loption_choose_iso_ = Obj.magic i in + let d : 'tv_depends = Obj.magic d in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_invalid_ = -# 1350 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) ) -# 23406 "parser_cocci_menhir.ml" + let _endpos = _endpos__8_ in + let _v : ( +# 153 "parser_cocci_menhir.mly" + (Ast_cocci.rulename) +# 28158 "parser_cocci_menhir.ml" + ) = +# 207 "parser_cocci_menhir.mly" + ( P.make_generated_rule_name_result None d i a e ee ) +# 28162 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23414,24 +28170,41 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = lang; + MenhirLib.EngineTypes.startp = _startpos_lang_; + MenhirLib.EngineTypes.endp = _endpos_lang_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; } = _menhir_stack in - let _1 : ( -# 87 "parser_cocci_menhir.mly" - (string * Data.clt) -# 23427 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in + let d : 'tv_depends = Obj.magic d in + let lang : 'tv_pure_ident = Obj.magic lang in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_invalid_ = -# 1353 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) ) -# 23435 "parser_cocci_menhir.ml" + let _endpos = _endpos__5_ in + let _v : ( +# 153 "parser_cocci_menhir.mly" + (Ast_cocci.rulename) +# 28204 "parser_cocci_menhir.ml" + ) = +# 209 "parser_cocci_menhir.mly" + ( P.make_script_rule_name_result lang d ) +# 28208 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23443,25 +28216,35 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = lang; + MenhirLib.EngineTypes.startp = _startpos_lang_; + MenhirLib.EngineTypes.endp = _endpos_lang_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; } = _menhir_stack in - let _1 : ( -# 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 23456 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in + let lang : 'tv_pure_ident = Obj.magic lang in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_invalid_ = -# 1356 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,ty,clt) = _1 in - Ast0.wrap - (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.CONST,pure)) ) -# 23465 "parser_cocci_menhir.ml" + let _endpos = _endpos__4_ in + let _v : ( +# 153 "parser_cocci_menhir.mly" + (Ast_cocci.rulename) +# 28244 "parser_cocci_menhir.ml" + ) = +# 211 "parser_cocci_menhir.mly" + ( P.make_initial_script_rule_name_result lang ) +# 28248 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23473,24 +28256,35 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = lang; + MenhirLib.EngineTypes.startp = _startpos_lang_; + MenhirLib.EngineTypes.endp = _endpos_lang_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; } = _menhir_stack in - let _1 : ( -# 63 "parser_cocci_menhir.mly" - (Parse_aux.expinfo) -# 23486 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in + let lang : 'tv_pure_ident = Obj.magic lang in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_invalid_ = -# 1360 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,clt) = _1 in - Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) ) -# 23494 "parser_cocci_menhir.ml" + let _endpos = _endpos__4_ in + let _v : ( +# 153 "parser_cocci_menhir.mly" + (Ast_cocci.rulename) +# 28284 "parser_cocci_menhir.ml" + ) = +# 213 "parser_cocci_menhir.mly" + ( P.make_final_script_rule_name_result lang ) +# 28288 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23502,25 +28296,51 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = cocci; + MenhirLib.EngineTypes.startp = _startpos_cocci_; + MenhirLib.EngineTypes.endp = _endpos_cocci_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = py; + MenhirLib.EngineTypes.startp = _startpos_py_; + MenhirLib.EngineTypes.endp = _endpos_py_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; } = _menhir_stack in - let _1 : ( -# 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 23515 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_invalid_ = -# 1363 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,ty,clt) = _1 in - Ast0.wrap - (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ANY,pure)) ) -# 23524 "parser_cocci_menhir.ml" + let cocci : 'tv_pure_ident = Obj.magic cocci in + let _3 : ( +# 47 "parser_cocci_menhir.mly" + (string) +# 28332 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let py : 'tv_pure_ident = Obj.magic py in + let _startpos = _startpos_py_ in + let _endpos = _endpos__6_ in + let _v : ( +# 159 "parser_cocci_menhir.mly" + (string * (string * string)) +# 28340 "parser_cocci_menhir.ml" + ) = +# 1887 "parser_cocci_menhir.mly" + ( (P.id2name py, (_3, P.id2name cocci)) ) +# 28344 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23539,18 +28359,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 23545 "parser_cocci_menhir.ml" +# 87 "parser_cocci_menhir.mly" + (string * Data.clt) +# 28365 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_invalid_ = -# 1367 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,ty,clt) = _1 in - Ast0.wrap - (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ID,pure)) ) -# 23554 "parser_cocci_menhir.ml" + let _v : 'tv_seed_elem = +# 1413 "parser_cocci_menhir.mly" + ( let (x,_) = _1 in Ast.SeedString x ) +# 28372 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23569,18 +28387,16 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 23575 "parser_cocci_menhir.ml" +# 61 "parser_cocci_menhir.mly" + (Parse_aux.idinfo) +# 28393 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_invalid_ = -# 1371 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,ty,clt) = _1 in - Ast0.wrap - (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.LocalID,pure)) ) -# 23584 "parser_cocci_menhir.ml" + let _v : 'tv_seed_elem = +# 1414 "parser_cocci_menhir.mly" + ( let (x,_,_,_) = _1 in Ast.SeedId x ) +# 28400 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23596,7 +28412,6 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.startp = _startpos__3_; MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { @@ -23608,24 +28423,48 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let _3 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 23615 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_eexpr = Obj.magic _2 in + let _3 : 'tv_pure_ident = Obj.magic _3 in let _1 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 23621 "parser_cocci_menhir.ml" +# 47 "parser_cocci_menhir.mly" + (string) +# 28431 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in - let _v : 'tv_primary_expr_eexpr_invalid_ = -# 1375 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2, - P.clt2mcode ")" _3)) ) -# 23629 "parser_cocci_menhir.ml" + let _v : 'tv_seed_elem = +# 1416 "parser_cocci_menhir.mly" + ( let nm = (_1,P.id2name _3) in + P.check_meta(Ast.MetaIdDecl(Ast.NONE,nm)); + Ast.SeedId nm ) +# 28440 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let x : ( +# 87 "parser_cocci_menhir.mly" + (string * Data.clt) +# 28461 "parser_cocci_menhir.ml" + ) = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_separated_nonempty_list_TComma_TString_ = +# 144 "standard.mly" + ( [ x ] ) +# 28468 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23637,42 +28476,33 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _3 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 23660 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_midzero_list_eexpr_eexpr_ = Obj.magic _2 in - let _1 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 23666 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_primary_expr_eexpr_invalid_ = -# 1378 "parser_cocci_menhir.mly" - ( let (mids,code) = _2 in - Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1, - code, mids, - P.clt2mcode ")" _3)) ) -# 23676 "parser_cocci_menhir.ml" + let xs : 'tv_separated_nonempty_list_TComma_TString_ = Obj.magic xs in + let x : ( +# 87 "parser_cocci_menhir.mly" + (string * Data.clt) +# 28499 "parser_cocci_menhir.ml" + ) = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_separated_nonempty_list_TComma_TString_ = +# 146 "standard.mly" + ( x :: xs ) +# 28506 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23685,18 +28515,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_invalid = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_invalid_ = -# 1382 "parser_cocci_menhir.mly" - ( _1 ) -# 23700 "parser_cocci_menhir.ml" + let x : 'tv_any_strict = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_separated_nonempty_list_TComma_any_strict_ = +# 144 "standard.mly" + ( [ x ] ) +# 28530 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23708,19 +28538,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let _1 : 'tv_func_ident = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1342 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Ident(_1)) ) -# 23724 "parser_cocci_menhir.ml" + let xs : 'tv_separated_nonempty_list_TComma_any_strict_ = Obj.magic xs in + let x : 'tv_any_strict = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_separated_nonempty_list_TComma_any_strict_ = +# 146 "standard.mly" + ( x :: xs ) +# 28564 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23733,23 +28573,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : ( -# 87 "parser_cocci_menhir.mly" - (string * Data.clt) -# 23745 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1344 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) ) -# 23753 "parser_cocci_menhir.ml" + let x : 'tv_ctype = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_separated_nonempty_list_TComma_ctype_ = +# 144 "standard.mly" + ( [ x ] ) +# 28588 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23761,24 +28596,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let _1 : ( -# 87 "parser_cocci_menhir.mly" - (string * Data.clt) -# 23774 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1347 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) ) -# 23782 "parser_cocci_menhir.ml" + let xs : 'tv_separated_nonempty_list_TComma_ctype_ = Obj.magic xs in + let x : 'tv_ctype = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_separated_nonempty_list_TComma_ctype_ = +# 146 "standard.mly" + ( x :: xs ) +# 28622 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23791,23 +28631,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : ( -# 87 "parser_cocci_menhir.mly" - (string * Data.clt) -# 23803 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1350 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) ) -# 23811 "parser_cocci_menhir.ml" + let x : 'tv_d_ident = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_separated_nonempty_list_TComma_d_ident_ = +# 144 "standard.mly" + ( [ x ] ) +# 28646 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23819,24 +28654,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let _1 : ( -# 87 "parser_cocci_menhir.mly" - (string * Data.clt) -# 23832 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1353 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) ) -# 23840 "parser_cocci_menhir.ml" + let xs : 'tv_separated_nonempty_list_TComma_d_ident_ = Obj.magic xs in + let x : 'tv_d_ident = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_separated_nonempty_list_TComma_d_ident_ = +# 146 "standard.mly" + ( x :: xs ) +# 28680 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23849,24 +28689,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : ( -# 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 23861 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1356 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,ty,clt) = _1 in - Ast0.wrap - (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.CONST,pure)) ) -# 23870 "parser_cocci_menhir.ml" + let x : 'tv_ident_or_const = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_separated_nonempty_list_TComma_ident_or_const_ = +# 144 "standard.mly" + ( [ x ] ) +# 28704 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23878,24 +28712,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let _1 : ( -# 63 "parser_cocci_menhir.mly" - (Parse_aux.expinfo) -# 23891 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1360 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,clt) = _1 in - Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) ) -# 23899 "parser_cocci_menhir.ml" + let xs : 'tv_separated_nonempty_list_TComma_ident_or_const_ = Obj.magic xs in + let x : 'tv_ident_or_const = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_separated_nonempty_list_TComma_ident_or_const_ = +# 146 "standard.mly" + ( x :: xs ) +# 28738 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23908,24 +28747,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : ( -# 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 23920 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1363 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,ty,clt) = _1 in - Ast0.wrap - (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ANY,pure)) ) -# 23929 "parser_cocci_menhir.ml" + let x : 'tv_meta_ident = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_separated_nonempty_list_TComma_meta_ident_ = +# 144 "standard.mly" + ( [ x ] ) +# 28762 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23937,25 +28770,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let _1 : ( -# 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 23950 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1367 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,ty,clt) = _1 in - Ast0.wrap - (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ID,pure)) ) -# 23959 "parser_cocci_menhir.ml" + let xs : 'tv_separated_nonempty_list_TComma_meta_ident_ = Obj.magic xs in + let x : 'tv_meta_ident = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_separated_nonempty_list_TComma_meta_ident_ = +# 146 "standard.mly" + ( x :: xs ) +# 28796 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23968,24 +28805,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : ( -# 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 23980 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1371 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,ty,clt) = _1 in - Ast0.wrap - (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.LocalID,pure)) ) -# 23989 "parser_cocci_menhir.ml" + let x : 'tv_pure_ident = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_separated_nonempty_list_TComma_pure_ident_ = +# 144 "standard.mly" + ( [ x ] ) +# 28820 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -23997,40 +28828,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _3 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 24020 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_eexpr = Obj.magic _2 in - let _1 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 24026 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1375 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2, - P.clt2mcode ")" _3)) ) -# 24034 "parser_cocci_menhir.ml" + let xs : 'tv_separated_nonempty_list_TComma_pure_ident_ = Obj.magic xs in + let x : 'tv_pure_ident = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_separated_nonempty_list_TComma_pure_ident_ = +# 146 "standard.mly" + ( x :: xs ) +# 28854 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24042,42 +28862,53 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let x : 'tv_pure_ident_or_meta_ident = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_ = +# 144 "standard.mly" + ( [ x ] ) +# 28878 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _3 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 24065 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_midzero_list_eexpr_eexpr_ = Obj.magic _2 in - let _1 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 24071 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1378 "parser_cocci_menhir.mly" - ( let (mids,code) = _2 in - Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1, - code, mids, - P.clt2mcode ")" _3)) ) -# 24081 "parser_cocci_menhir.ml" + let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_ = Obj.magic xs in + let x : 'tv_pure_ident_or_meta_ident = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_ = +# 146 "standard.mly" + ( x :: xs ) +# 28912 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24090,18 +28921,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_nest_expressions = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_eexpr_nest_expressions_ = -# 1382 "parser_cocci_menhir.mly" - ( _1 ) -# 24105 "parser_cocci_menhir.ml" + let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_ceq_ = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_ceq__ = +# 144 "standard.mly" + ( [ x ] ) +# 28936 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24113,19 +28944,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let _1 : 'tv_func_ident = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_expr_invalid_ = -# 1342 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Ident(_1)) ) -# 24129 "parser_cocci_menhir.ml" + let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_ceq__ = Obj.magic xs in + let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_ceq_ = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_ceq__ = +# 146 "standard.mly" + ( x :: xs ) +# 28970 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24138,23 +28979,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let _1 : ( -# 87 "parser_cocci_menhir.mly" - (string * Data.clt) -# 24150 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_expr_invalid_ = -# 1344 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Int x) clt)) ) -# 24158 "parser_cocci_menhir.ml" + } = _menhir_stack in + let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_eq_ = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eq__ = +# 144 "standard.mly" + ( [ x ] ) +# 28994 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24166,24 +29002,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let _1 : ( -# 87 "parser_cocci_menhir.mly" - (string * Data.clt) -# 24179 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_expr_invalid_ = -# 1347 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Float x) clt)) ) -# 24187 "parser_cocci_menhir.ml" + let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eq__ = Obj.magic xs in + let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_eq_ = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eq__ = +# 146 "standard.mly" + ( x :: xs ) +# 29028 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24196,23 +29037,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : ( -# 87 "parser_cocci_menhir.mly" - (string * Data.clt) -# 24208 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_expr_invalid_ = -# 1350 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.String x) clt)) ) -# 24216 "parser_cocci_menhir.ml" + let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_eqe_ = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = +# 144 "standard.mly" + ( [ x ] ) +# 29052 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24224,24 +29060,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let _1 : ( -# 87 "parser_cocci_menhir.mly" - (string * Data.clt) -# 24237 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_expr_invalid_ = -# 1353 "parser_cocci_menhir.mly" - ( let (x,clt) = _1 in - Ast0.wrap(Ast0.Constant (P.clt2mcode (Ast.Char x) clt)) ) -# 24245 "parser_cocci_menhir.ml" + let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic xs in + let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_eqe_ = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = +# 146 "standard.mly" + ( x :: xs ) +# 29086 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24254,24 +29095,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : ( -# 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 24266 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_expr_invalid_ = -# 1356 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,ty,clt) = _1 in - Ast0.wrap - (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.CONST,pure)) ) -# 24275 "parser_cocci_menhir.ml" + let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_pos_ = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_pos__ = +# 144 "standard.mly" + ( [ x ] ) +# 29110 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24283,24 +29118,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let _1 : ( -# 63 "parser_cocci_menhir.mly" - (Parse_aux.expinfo) -# 24296 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_expr_invalid_ = -# 1360 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,clt) = _1 in - Ast0.wrap(Ast0.MetaErr(P.clt2mcode nm clt,constraints,pure)) ) -# 24304 "parser_cocci_menhir.ml" + let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_pos__ = Obj.magic xs in + let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_pos_ = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_pos__ = +# 146 "standard.mly" + ( x :: xs ) +# 29144 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24313,24 +29153,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : ( -# 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 24325 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_expr_invalid_ = -# 1363 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,ty,clt) = _1 in - Ast0.wrap - (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ANY,pure)) ) -# 24334 "parser_cocci_menhir.ml" + let x : 'tv_pure_ident_or_meta_ident_with_seed = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_seed_ = +# 144 "standard.mly" + ( [ x ] ) +# 29168 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24342,25 +29176,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let _1 : ( -# 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 24355 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_expr_invalid_ = -# 1367 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,ty,clt) = _1 in - Ast0.wrap - (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.ID,pure)) ) -# 24364 "parser_cocci_menhir.ml" + let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_seed_ = Obj.magic xs in + let x : 'tv_pure_ident_or_meta_ident_with_seed = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_seed_ = +# 146 "standard.mly" + ( x :: xs ) +# 29202 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24373,24 +29211,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : ( -# 67 "parser_cocci_menhir.mly" - (Parse_aux.typed_info) -# 24385 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_expr_invalid_ = -# 1371 "parser_cocci_menhir.mly" - ( let (nm,constraints,pure,ty,clt) = _1 in - Ast0.wrap - (Ast0.MetaExpr(P.clt2mcode nm clt,constraints,ty,Ast.LocalID,pure)) ) -# 24394 "parser_cocci_menhir.ml" + let x : 'tv_seed_elem = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : 'tv_separated_nonempty_list_TCppConcatOp_seed_elem_ = +# 144 "standard.mly" + ( [ x ] ) +# 29226 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24402,40 +29234,53 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _3 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 24425 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_eexpr = Obj.magic _2 in - let _1 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 24431 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in + let xs : 'tv_separated_nonempty_list_TCppConcatOp_seed_elem_ = Obj.magic xs in + let x : 'tv_seed_elem = Obj.magic x in + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : 'tv_separated_nonempty_list_TCppConcatOp_seed_elem_ = +# 146 "standard.mly" + ( x :: xs ) +# 29260 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : 'tv_statement = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_primary_expr_expr_invalid_ = -# 1375 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Paren(P.clt2mcode "(" _1,_2, - P.clt2mcode ")" _3)) ) -# 24439 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_single_statement = +# 908 "parser_cocci_menhir.mly" + ( _1 ) +# 29284 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24466,23 +29311,24 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _3 : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 24470 "parser_cocci_menhir.ml" +# 29315 "parser_cocci_menhir.ml" ) = Obj.magic _3 in - let _2 : 'tv_midzero_list_expr_eexpr_ = Obj.magic _2 in + let _2 : 'tv_midzero_list_statement_statement_ = Obj.magic _2 in let _1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 24476 "parser_cocci_menhir.ml" +# 29321 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in - let _v : 'tv_primary_expr_expr_invalid_ = -# 1378 "parser_cocci_menhir.mly" - ( let (mids,code) = _2 in - Ast0.wrap(Ast0.DisjExpr(P.clt2mcode "(" _1, - code, mids, - P.clt2mcode ")" _3)) ) -# 24486 "parser_cocci_menhir.ml" + let _v : 'tv_single_statement = +# 912 "parser_cocci_menhir.mly" + ( let (mids,code) = _2 in + Ast0.wrap + (Ast0.Disj(P.clt2mcode "(" _1, + List.map (function x -> Ast0.wrap(Ast0.DOTS([x]))) code, + mids, P.clt2mcode ")" _3)) ) +# 29332 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24500,35 +29346,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : 'tv_invalid = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_primary_expr_expr_invalid_ = -# 1382 "parser_cocci_menhir.mly" - ( _1 ) -# 24510 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in + let _1 : 'tv_includes = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_pure = -# 190 "parser_cocci_menhir.mly" - ( Ast0.Pure ) -# 24532 "parser_cocci_menhir.ml" + let _v : 'tv_statement = +# 835 "parser_cocci_menhir.mly" + ( _1 ) +# 29356 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24541,16 +29365,22 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in + let _1 : ( +# 64 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 29377 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : 'tv_pure = -# 191 "parser_cocci_menhir.mly" - ( Ast0.Context ) -# 24554 "parser_cocci_menhir.ml" + let _v : 'tv_statement = +# 837 "parser_cocci_menhir.mly" + ( P.meta_stm _1 ) +# 29384 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24562,21 +29392,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { + MenhirLib.EngineTypes.semv = _2; MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in + let _2 : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 29410 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_expr = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : 'tv_pure = -# 192 "parser_cocci_menhir.mly" - ( Ast0.PureContext ) -# 24580 "parser_cocci_menhir.ml" + let _v : 'tv_statement = +# 839 "parser_cocci_menhir.mly" + ( P.exp_stm _1 _2 ) +# 29418 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24588,21 +29426,55 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; } = _menhir_stack in + let _5 : 'tv_single_statement = Obj.magic _5 in + let _4 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 29460 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr = Obj.magic _3 in + let _2 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 29466 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : ( +# 57 "parser_cocci_menhir.mly" + (Data.clt) +# 29471 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_pure = -# 193 "parser_cocci_menhir.mly" - ( Ast0.PureContext ) -# 24606 "parser_cocci_menhir.ml" + let _endpos = _endpos__5_ in + let _v : 'tv_statement = +# 841 "parser_cocci_menhir.mly" + ( P.ifthen _1 _2 _3 _4 _5 ) +# 29478 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24613,13 +29485,72 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_pure = -# 194 "parser_cocci_menhir.mly" - ( Ast0.Impure ) -# 24623 "parser_cocci_menhir.ml" + let { + MenhirLib.EngineTypes.semv = _7; + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _7 : 'tv_single_statement = Obj.magic _7 in + let _6 : ( +# 57 "parser_cocci_menhir.mly" + (Data.clt) +# 29530 "parser_cocci_menhir.ml" + ) = Obj.magic _6 in + let _5 : 'tv_single_statement = Obj.magic _5 in + let _4 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 29536 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr = Obj.magic _3 in + let _2 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 29542 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : ( +# 57 "parser_cocci_menhir.mly" + (Data.clt) +# 29547 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__7_ in + let _v : 'tv_statement = +# 843 "parser_cocci_menhir.mly" + ( P.ifthenelse _1 _2 _3 _4 _5 _6 _7 ) +# 29554 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24631,47 +29562,87 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _9; + MenhirLib.EngineTypes.startp = _startpos__9_; + MenhirLib.EngineTypes.endp = _endpos__9_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _8; + MenhirLib.EngineTypes.startp = _startpos__8_; + MenhirLib.EngineTypes.endp = _endpos__8_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _7; + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; } = _menhir_stack in + let _9 : 'tv_single_statement = Obj.magic _9 in + let _8 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 29616 "parser_cocci_menhir.ml" + ) = Obj.magic _8 in + let _7 : 'tv_option_eexpr_ = Obj.magic _7 in + let _6 : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 29622 "parser_cocci_menhir.ml" + ) = Obj.magic _6 in + let _5 : 'tv_option_eexpr_ = Obj.magic _5 in + let _4 : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 29628 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_option_eexpr_ = Obj.magic _3 in + let _2 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 29634 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in let _1 : ( -# 59 "parser_cocci_menhir.mly" - (string * Data.clt) -# 24644 "parser_cocci_menhir.ml" +# 57 "parser_cocci_menhir.mly" + (Data.clt) +# 29639 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_pure_ident = -# 1396 "parser_cocci_menhir.mly" - ( _1 ) -# 24651 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let _1 : 'tv_pure_ident = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_pure_ident_or_meta_ident = -# 1402 "parser_cocci_menhir.mly" - ( (None,P.id2name _1) ) -# 24675 "parser_cocci_menhir.ml" + let _endpos = _endpos__9_ in + let _v : 'tv_statement = +# 846 "parser_cocci_menhir.mly" + ( P.forloop _1 _2 _3 _4 _5 _6 _7 _8 _9 ) +# 29646 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24683,19 +29654,55 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; } = _menhir_stack in - let _1 : 'tv_meta_ident = Obj.magic _1 in + let _5 : 'tv_single_statement = Obj.magic _5 in + let _4 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 29688 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr = Obj.magic _3 in + let _2 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 29694 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : ( +# 57 "parser_cocci_menhir.mly" + (Data.clt) +# 29699 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_pure_ident_or_meta_ident = -# 1403 "parser_cocci_menhir.mly" - ( _1 ) -# 24699 "parser_cocci_menhir.ml" + let _endpos = _endpos__5_ in + let _v : 'tv_statement = +# 848 "parser_cocci_menhir.mly" + ( P.whileloop _1 _2 _3 _4 _5 ) +# 29706 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24707,17 +29714,75 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _7; + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; } = _menhir_stack in + let _7 : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 29757 "parser_cocci_menhir.ml" + ) = Obj.magic _7 in + let _6 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 29762 "parser_cocci_menhir.ml" + ) = Obj.magic _6 in + let _5 : 'tv_eexpr = Obj.magic _5 in + let _4 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 29768 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : ( +# 57 "parser_cocci_menhir.mly" + (Data.clt) +# 29773 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_single_statement = Obj.magic _2 in + let _1 : ( +# 57 "parser_cocci_menhir.mly" + (Data.clt) +# 29779 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_pure_ident_or_meta_ident = -# 1404 "parser_cocci_menhir.mly" - ( (None,"list") ) -# 24721 "parser_cocci_menhir.ml" + let _endpos = _endpos__7_ in + let _v : 'tv_statement = +# 850 "parser_cocci_menhir.mly" + ( P.doloop _1 _2 _3 _4 _5 _6 _7 ) +# 29786 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24729,17 +29794,51 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; } = _menhir_stack in + let _5 : 'tv_single_statement = Obj.magic _5 in + let _4 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 29828 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr_list_option = Obj.magic _3 in + let _2 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 29834 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_iter_ident = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_pure_ident_or_meta_ident = -# 1405 "parser_cocci_menhir.mly" - ( (None,"error") ) -# 24743 "parser_cocci_menhir.ml" + let _endpos = _endpos__5_ in + let _v : 'tv_statement = +# 852 "parser_cocci_menhir.mly" + ( P.iterator _1 _2 _3 _4 _5 ) +# 29842 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24751,17 +29850,75 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _7; + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; } = _menhir_stack in + let _7 : ( +# 101 "parser_cocci_menhir.mly" + (Data.clt) +# 29893 "parser_cocci_menhir.ml" + ) = Obj.magic _7 in + let _6 : 'tv_list_case_line_ = Obj.magic _6 in + let _5 : ( +# 101 "parser_cocci_menhir.mly" + (Data.clt) +# 29899 "parser_cocci_menhir.ml" + ) = Obj.magic _5 in + let _4 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 29904 "parser_cocci_menhir.ml" + ) = Obj.magic _4 in + let _3 : 'tv_eexpr = Obj.magic _3 in + let _2 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 29910 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : ( +# 57 "parser_cocci_menhir.mly" + (Data.clt) +# 29915 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_pure_ident_or_meta_ident = -# 1406 "parser_cocci_menhir.mly" - ( (None,"type") ) -# 24765 "parser_cocci_menhir.ml" + let _endpos = _endpos__7_ in + let _v : 'tv_statement = +# 854 "parser_cocci_menhir.mly" + ( P.switch _1 _2 _3 _4 _5 _6 _7 ) +# 29922 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24773,17 +29930,39 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in + let _3 : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 29953 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_eexpr = Obj.magic _2 in + let _1 : ( +# 57 "parser_cocci_menhir.mly" + (Data.clt) +# 29959 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_pure_ident_or_meta_ident = -# 1407 "parser_cocci_menhir.mly" - ( (None,"name") ) -# 24787 "parser_cocci_menhir.ml" + let _endpos = _endpos__3_ in + let _v : 'tv_statement = +# 855 "parser_cocci_menhir.mly" + ( P.ret_exp _1 _2 _3 ) +# 29966 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24795,25 +29974,33 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = l; - MenhirLib.EngineTypes.startp = _startpos_l_; - MenhirLib.EngineTypes.endp = _endpos_l_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let l : 'tv_loption_not_ceq_ = Obj.magic l in - let i : 'tv_pure_ident_or_meta_ident = Obj.magic i in - let _startpos = _startpos_i_ in - let _endpos = _endpos_l_ in - let _v : 'tv_pure_ident_or_meta_ident_with_not_eq_not_ceq_ = -# 1414 "parser_cocci_menhir.mly" - ( (i,l) ) -# 24817 "parser_cocci_menhir.ml" + let _2 : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 29992 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : ( +# 57 "parser_cocci_menhir.mly" + (Data.clt) +# 29997 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_statement = +# 856 "parser_cocci_menhir.mly" + ( P.ret _1 _2 ) +# 30004 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24825,25 +30012,33 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = l; - MenhirLib.EngineTypes.startp = _startpos_l_; - MenhirLib.EngineTypes.endp = _endpos_l_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let l : 'tv_loption_not_eq_ = Obj.magic l in - let i : 'tv_pure_ident_or_meta_ident = Obj.magic i in - let _startpos = _startpos_i_ in - let _endpos = _endpos_l_ in - let _v : 'tv_pure_ident_or_meta_ident_with_not_eq_not_eq_ = -# 1414 "parser_cocci_menhir.mly" - ( (i,l) ) -# 24847 "parser_cocci_menhir.ml" + let _2 : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 30030 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : ( +# 58 "parser_cocci_menhir.mly" + (Data.clt) +# 30035 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_statement = +# 857 "parser_cocci_menhir.mly" + ( P.break _1 _2 ) +# 30042 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24855,25 +30050,33 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = l; - MenhirLib.EngineTypes.startp = _startpos_l_; - MenhirLib.EngineTypes.endp = _endpos_l_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let l : 'tv_loption_not_eqe_ = Obj.magic l in - let i : 'tv_pure_ident_or_meta_ident = Obj.magic i in - let _startpos = _startpos_i_ in - let _endpos = _endpos_l_ in - let _v : 'tv_pure_ident_or_meta_ident_with_not_eq_not_eqe_ = -# 1414 "parser_cocci_menhir.mly" - ( (i,l) ) -# 24877 "parser_cocci_menhir.ml" + let _2 : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 30068 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : ( +# 58 "parser_cocci_menhir.mly" + (Data.clt) +# 30073 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_statement = +# 858 "parser_cocci_menhir.mly" + ( P.cont _1 _2 ) +# 30080 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24885,49 +30088,29 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = l; - MenhirLib.EngineTypes.startp = _startpos_l_; - MenhirLib.EngineTypes.endp = _endpos_l_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let l : 'tv_loption_not_pos_ = Obj.magic l in - let i : 'tv_pure_ident_or_meta_ident = Obj.magic i in - let _startpos = _startpos_i_ in - let _endpos = _endpos_l_ in - let _v : 'tv_pure_ident_or_meta_ident_with_not_eq_not_pos_ = -# 1414 "parser_cocci_menhir.mly" - ( (i,l) ) -# 24907 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let _1 : 'tv_pure_ident_or_meta_ident = Obj.magic _1 in + let _2 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 30106 "parser_cocci_menhir.ml" + ) = Obj.magic _2 in + let _1 : 'tv_ident = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_pure_ident_or_meta_ident_with_seed = -# 1410 "parser_cocci_menhir.mly" - ( (_1,None) ) -# 24931 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_statement = +# 859 "parser_cocci_menhir.mly" + ( P.label _1 _2 ) +# 30114 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24939,10 +30122,11 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = s; - MenhirLib.EngineTypes.startp = _startpos_s_; - MenhirLib.EngineTypes.endp = _endpos_s_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { @@ -24954,39 +30138,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let s : ( -# 87 "parser_cocci_menhir.mly" - (string * Data.clt) -# 24961 "parser_cocci_menhir.ml" - ) = Obj.magic s in - let _1 : 'tv_pure_ident_or_meta_ident = Obj.magic _1 in + let _3 : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 30145 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_ident = Obj.magic _2 in + let _1 : ( +# 58 "parser_cocci_menhir.mly" + (Data.clt) +# 30151 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos_s_ in - let _v : 'tv_pure_ident_or_meta_ident_with_seed = -# 1411 "parser_cocci_menhir.mly" - ( (_1,Some (P.id2name s)) ) -# 24969 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : ( -# 131 "parser_cocci_menhir.mly" - (unit) -# 24986 "parser_cocci_menhir.ml" - ) = -# 172 "parser_cocci_menhir.mly" - ( ) -# 24990 "parser_cocci_menhir.ml" + let _endpos = _endpos__3_ in + let _v : 'tv_statement = +# 860 "parser_cocci_menhir.mly" + ( P.goto _1 _2 _3 ) +# 30158 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -24998,19 +30166,39 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let _1 : 'tv_one_decl_var = Obj.magic _1 in + let _3 : ( +# 101 "parser_cocci_menhir.mly" + (Data.clt) +# 30189 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_fun_start = Obj.magic _2 in + let _1 : ( +# 101 "parser_cocci_menhir.mly" + (Data.clt) +# 30195 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_rule_elem_statement = -# 916 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Decl((Ast0.default_info(),Ast0.context_befaft()),_1)) ) -# 25014 "parser_cocci_menhir.ml" + let _endpos = _endpos__3_ in + let _v : 'tv_statement = +# 862 "parser_cocci_menhir.mly" + ( P.seq _1 _2 _3 ) +# 30202 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25022,9 +30210,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = w; + MenhirLib.EngineTypes.startp = _startpos_w_; + MenhirLib.EngineTypes.endp = _endpos_w_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -25033,18 +30221,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : ( -# 107 "parser_cocci_menhir.mly" + let w : 'tv_list_whenppdecs_ = Obj.magic w in + let _1 : ( +# 73 "parser_cocci_menhir.mly" (Data.clt) -# 25040 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_expr = Obj.magic _1 in +# 30229 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_rule_elem_statement = -# 917 "parser_cocci_menhir.mly" - ( P.exp_stm _1 _2 ) -# 25048 "parser_cocci_menhir.ml" + let _endpos = _endpos_w_ in + let _v : 'tv_stm_dots = +# 866 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Dots(P.clt2mcode "..." _1, List.concat w)) ) +# 30236 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25056,39 +30244,46 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = c; + MenhirLib.EngineTypes.startp = _startpos_c_; + MenhirLib.EngineTypes.endp = _endpos_c_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = b; + MenhirLib.EngineTypes.startp = _startpos_b_; + MenhirLib.EngineTypes.endp = _endpos_b_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = w; + MenhirLib.EngineTypes.startp = _startpos_w_; + MenhirLib.EngineTypes.endp = _endpos_w_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in - let _3 : ( -# 107 "parser_cocci_menhir.mly" + let c : ( +# 73 "parser_cocci_menhir.mly" (Data.clt) -# 25079 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_eexpr = Obj.magic _2 in +# 30272 "parser_cocci_menhir.ml" + ) = Obj.magic c in + let b : 'tv_nest_start = Obj.magic b in + let w : 'tv_list_whenppdecs_ = Obj.magic w in let _1 : ( -# 57 "parser_cocci_menhir.mly" +# 73 "parser_cocci_menhir.mly" (Data.clt) -# 25085 "parser_cocci_menhir.ml" +# 30279 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_rule_elem_statement = -# 918 "parser_cocci_menhir.mly" - ( P.ret_exp _1 _2 _3 ) -# 25092 "parser_cocci_menhir.ml" + let _endpos = _endpos_c_ in + let _v : 'tv_stm_dots = +# 868 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<..." _1, b, + P.clt2mcode "...>" c, List.concat w, false)) ) +# 30287 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25100,33 +30295,46 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = c; + MenhirLib.EngineTypes.startp = _startpos_c_; + MenhirLib.EngineTypes.endp = _endpos_c_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = b; + MenhirLib.EngineTypes.startp = _startpos_b_; + MenhirLib.EngineTypes.endp = _endpos_b_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = w; + MenhirLib.EngineTypes.startp = _startpos_w_; + MenhirLib.EngineTypes.endp = _endpos_w_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; } = _menhir_stack in - let _2 : ( -# 107 "parser_cocci_menhir.mly" + let c : ( +# 73 "parser_cocci_menhir.mly" (Data.clt) -# 25118 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in +# 30323 "parser_cocci_menhir.ml" + ) = Obj.magic c in + let b : 'tv_nest_start = Obj.magic b in + let w : 'tv_list_whenppdecs_ = Obj.magic w in let _1 : ( -# 57 "parser_cocci_menhir.mly" +# 73 "parser_cocci_menhir.mly" (Data.clt) -# 25123 "parser_cocci_menhir.ml" +# 30330 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_rule_elem_statement = -# 919 "parser_cocci_menhir.mly" - ( P.ret _1 _2 ) -# 25130 "parser_cocci_menhir.ml" + let _endpos = _endpos_c_ in + let _v : 'tv_stm_dots = +# 871 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<+..." _1, b, + P.clt2mcode "...+>" c, List.concat w, true)) ) +# 30338 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25138,33 +30346,107 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = s; + MenhirLib.EngineTypes.startp = _startpos_s_; + MenhirLib.EngineTypes.endp = _endpos_s_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 25156 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : ( -# 58 "parser_cocci_menhir.mly" - (Data.clt) -# 25161 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_rule_elem_statement = -# 920 "parser_cocci_menhir.mly" - ( P.break _1 _2 ) -# 25168 "parser_cocci_menhir.ml" + let s : ( +# 53 "parser_cocci_menhir.mly" + (Data.clt) +# 30359 "parser_cocci_menhir.ml" + ) = Obj.magic s in + let _startpos = _startpos_s_ in + let _endpos = _endpos_s_ in + let _v : 'tv_storage = +# 797 "parser_cocci_menhir.mly" + ( P.clt2mcode Ast.Static s ) +# 30366 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = s; + MenhirLib.EngineTypes.startp = _startpos_s_; + MenhirLib.EngineTypes.endp = _endpos_s_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let s : ( +# 53 "parser_cocci_menhir.mly" + (Data.clt) +# 30387 "parser_cocci_menhir.ml" + ) = Obj.magic s in + let _startpos = _startpos_s_ in + let _endpos = _endpos_s_ in + let _v : 'tv_storage = +# 798 "parser_cocci_menhir.mly" + ( P.clt2mcode Ast.Auto s ) +# 30394 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = s; + MenhirLib.EngineTypes.startp = _startpos_s_; + MenhirLib.EngineTypes.endp = _endpos_s_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let s : ( +# 53 "parser_cocci_menhir.mly" + (Data.clt) +# 30415 "parser_cocci_menhir.ml" + ) = Obj.magic s in + let _startpos = _startpos_s_ in + let _endpos = _endpos_s_ in + let _v : 'tv_storage = +# 799 "parser_cocci_menhir.mly" + ( P.clt2mcode Ast.Register s ) +# 30422 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = s; + MenhirLib.EngineTypes.startp = _startpos_s_; + MenhirLib.EngineTypes.endp = _endpos_s_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let s : ( +# 53 "parser_cocci_menhir.mly" + (Data.clt) +# 30443 "parser_cocci_menhir.ml" + ) = Obj.magic s in + let _startpos = _startpos_s_ in + let _endpos = _endpos_s_ in + let _v : 'tv_storage = +# 800 "parser_cocci_menhir.mly" + ( P.clt2mcode Ast.Extern s ) +# 30450 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25176,33 +30458,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 25194 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : ( -# 58 "parser_cocci_menhir.mly" - (Data.clt) -# 25199 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_rule_elem_statement = -# 921 "parser_cocci_menhir.mly" - ( P.cont _1 _2 ) -# 25206 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_struct_decl = +# 555 "parser_cocci_menhir.mly" + ( [] ) +# 30472 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25214,43 +30480,36 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _3 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 25237 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_midzero_list_rule_elem_statement_rule_elem_statement_ = Obj.magic _2 in - let _1 : ( -# 76 "parser_cocci_menhir.mly" + let pv : ( +# 107 "parser_cocci_menhir.mly" (Data.clt) -# 25243 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_rule_elem_statement = -# 923 "parser_cocci_menhir.mly" - ( let (mids,code) = _2 in - Ast0.wrap - (Ast0.Disj(P.clt2mcode "(" _1, - List.map (function x -> Ast0.wrap(Ast0.DOTS([x]))) code, - mids, P.clt2mcode ")" _3)) ) -# 25254 "parser_cocci_menhir.ml" +# 30503 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let d : 'tv_d_ident = Obj.magic d in + let t : 'tv_ctype = Obj.magic t in + let _startpos = _startpos_t_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_struct_decl = +# 557 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + [Ast0.wrap(Ast0.UnInit(None,fn t,id,P.clt2mcode ";" pv))] ) +# 30513 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25262,33 +30521,45 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ee; - MenhirLib.EngineTypes.startp = _startpos_ee_; - MenhirLib.EngineTypes.endp = _endpos_ee_; + MenhirLib.EngineTypes.semv = rp2; + MenhirLib.EngineTypes.startp = _startpos_rp2_; + MenhirLib.EngineTypes.endp = _endpos_rp2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.semv = p; + MenhirLib.EngineTypes.startp = _startpos_p_; + MenhirLib.EngineTypes.endp = _endpos_p_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = a; - MenhirLib.EngineTypes.startp = _startpos_a_; - MenhirLib.EngineTypes.endp = _endpos_a_; + MenhirLib.EngineTypes.semv = lp2; + MenhirLib.EngineTypes.startp = _startpos_lp2_; + MenhirLib.EngineTypes.endp = _endpos_lp2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.semv = rp1; + MenhirLib.EngineTypes.startp = _startpos_rp1_; + MenhirLib.EngineTypes.endp = _endpos_rp1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.semv = d; MenhirLib.EngineTypes.startp = _startpos_d_; MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = st; + MenhirLib.EngineTypes.startp = _startpos_st_; + MenhirLib.EngineTypes.endp = _endpos_st_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = lp1; + MenhirLib.EngineTypes.startp = _startpos_lp1_; + MenhirLib.EngineTypes.endp = _endpos_lp1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; }; @@ -25296,28 +30567,51 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let ee : 'tv_is_expression = Obj.magic ee in - let e : 'tv_exists = Obj.magic e in - let a : 'tv_loption_disable_ = Obj.magic a in - let i : 'tv_loption_choose_iso_ = Obj.magic i in - let d : 'tv_depends = Obj.magic d in - let _startpos = _startpos__1_ in - let _endpos = _endpos__7_ in - let _v : ( -# 153 "parser_cocci_menhir.mly" - (Ast_cocci.rulename) -# 25310 "parser_cocci_menhir.ml" - ) = let nm = - -# 39 "standard.mly" - ( None ) -# 25315 "parser_cocci_menhir.ml" - - in - -# 202 "parser_cocci_menhir.mly" - ( P.make_cocci_rule_name_result nm d i a e ee ) -# 25321 "parser_cocci_menhir.ml" + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 30574 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let rp2 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 30579 "parser_cocci_menhir.ml" + ) = Obj.magic rp2 in + let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in + let lp2 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 30585 "parser_cocci_menhir.ml" + ) = Obj.magic lp2 in + let rp1 : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 30590 "parser_cocci_menhir.ml" + ) = Obj.magic rp1 in + let d : 'tv_d_ident = Obj.magic d in + let st : ( +# 99 "parser_cocci_menhir.mly" + (Data.clt) +# 30596 "parser_cocci_menhir.ml" + ) = Obj.magic st in + let lp1 : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 30601 "parser_cocci_menhir.ml" + ) = Obj.magic lp1 in + let t : 'tv_ctype = Obj.magic t in + let _startpos = _startpos_t_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_struct_decl = +# 561 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + let t = + Ast0.wrap + (Ast0.FunctionPointer + (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1, + P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in + [Ast0.wrap(Ast0.UnInit(None,fn t,id,P.clt2mcode ";" pv))] ) +# 30615 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25329,69 +30623,100 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__8_; - MenhirLib.EngineTypes.endp = _endpos__8_; + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ee; - MenhirLib.EngineTypes.startp = _startpos_ee_; - MenhirLib.EngineTypes.endp = _endpos_ee_; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = a; - MenhirLib.EngineTypes.startp = _startpos_a_; - MenhirLib.EngineTypes.endp = _endpos_a_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x0; - MenhirLib.EngineTypes.startp = _startpos_x0_; - MenhirLib.EngineTypes.endp = _endpos_x0_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 30646 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let d : 'tv_d_ident = Obj.magic d in + let i : 'tv_pure_ident = Obj.magic i in + let _startpos = _startpos_i_ in + let _endpos = _endpos_pv_ in + let _v : 'tv_struct_decl = let cv = + +# 39 "standard.mly" + ( None ) +# 30656 "parser_cocci_menhir.ml" + + in + +# 569 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in + [Ast0.wrap(Ast0.UnInit(None,fn idtype,id,P.clt2mcode ";" pv))] ) +# 30664 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = pv; + MenhirLib.EngineTypes.startp = _startpos_pv_; + MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; } = _menhir_stack in - let ee : 'tv_is_expression = Obj.magic ee in - let e : 'tv_exists = Obj.magic e in - let a : 'tv_loption_disable_ = Obj.magic a in - let i : 'tv_loption_choose_iso_ = Obj.magic i in - let d : 'tv_depends = Obj.magic d in - let x0 : 'tv_pure_ident = Obj.magic x0 in + let pv : ( +# 107 "parser_cocci_menhir.mly" + (Data.clt) +# 30700 "parser_cocci_menhir.ml" + ) = Obj.magic pv in + let d : 'tv_d_ident = Obj.magic d in + let i : 'tv_pure_ident = Obj.magic i in + let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in - let _endpos = _endpos__8_ in - let _v : ( -# 153 "parser_cocci_menhir.mly" - (Ast_cocci.rulename) -# 25383 "parser_cocci_menhir.ml" - ) = let nm = + let _endpos = _endpos_pv_ in + let _v : 'tv_struct_decl = let cv = let x = x0 in # 41 "standard.mly" ( Some x ) -# 25389 "parser_cocci_menhir.ml" +# 30712 "parser_cocci_menhir.ml" in -# 202 "parser_cocci_menhir.mly" - ( P.make_cocci_rule_name_result nm d i a e ee ) -# 25395 "parser_cocci_menhir.ml" +# 569 "parser_cocci_menhir.mly" + ( let (id,fn) = d in + let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in + [Ast0.wrap(Ast0.UnInit(None,fn idtype,id,P.clt2mcode ";" pv))] ) +# 30720 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25403,59 +30728,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__8_; - MenhirLib.EngineTypes.endp = _endpos__8_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = ee; - MenhirLib.EngineTypes.startp = _startpos_ee_; - MenhirLib.EngineTypes.endp = _endpos_ee_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = a; - MenhirLib.EngineTypes.startp = _startpos_a_; - MenhirLib.EngineTypes.endp = _endpos_a_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let ee : 'tv_is_expression = Obj.magic ee in - let e : 'tv_exists = Obj.magic e in - let a : 'tv_loption_disable_ = Obj.magic a in - let i : 'tv_loption_choose_iso_ = Obj.magic i in - let d : 'tv_depends = Obj.magic d in + let _1 : 'tv_struct_decl_list_start = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__8_ in - let _v : ( -# 153 "parser_cocci_menhir.mly" - (Ast_cocci.rulename) -# 25455 "parser_cocci_menhir.ml" - ) = -# 207 "parser_cocci_menhir.mly" - ( P.make_generated_rule_name_result None d i a e ee ) -# 25459 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_struct_decl_list = +# 574 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.DOTS(_1)) ) +# 30744 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25467,41 +30752,19 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lang; - MenhirLib.EngineTypes.startp = _startpos_lang_; - MenhirLib.EngineTypes.endp = _endpos_lang_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let d : 'tv_depends = Obj.magic d in - let lang : 'tv_pure_ident = Obj.magic lang in + let _1 : 'tv_struct_decl = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : ( -# 153 "parser_cocci_menhir.mly" - (Ast_cocci.rulename) -# 25501 "parser_cocci_menhir.ml" - ) = -# 209 "parser_cocci_menhir.mly" - ( P.make_script_rule_name_result lang d ) -# 25505 "parser_cocci_menhir.ml" + let _endpos = _endpos__1_ in + let _v : 'tv_struct_decl_list_start = +# 577 "parser_cocci_menhir.mly" + ( _1 ) +# 30768 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25513,35 +30776,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lang; - MenhirLib.EngineTypes.startp = _startpos_lang_; - MenhirLib.EngineTypes.endp = _endpos_lang_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let lang : 'tv_pure_ident = Obj.magic lang in + let _2 : 'tv_struct_decl_list_start = Obj.magic _2 in + let _1 : 'tv_struct_decl = Obj.magic _1 in let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : ( -# 153 "parser_cocci_menhir.mly" - (Ast_cocci.rulename) -# 25541 "parser_cocci_menhir.ml" - ) = -# 211 "parser_cocci_menhir.mly" - ( P.make_initial_script_rule_name_result lang ) -# 25545 "parser_cocci_menhir.ml" + let _endpos = _endpos__2_ in + let _v : 'tv_struct_decl_list_start = +# 578 "parser_cocci_menhir.mly" + ( _1@_2 ) +# 30798 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25553,35 +30806,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = r; + MenhirLib.EngineTypes.startp = _startpos_r_; + MenhirLib.EngineTypes.endp = _endpos_r_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lang; - MenhirLib.EngineTypes.startp = _startpos_lang_; - MenhirLib.EngineTypes.endp = _endpos_lang_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let lang : 'tv_pure_ident = Obj.magic lang in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : ( -# 153 "parser_cocci_menhir.mly" - (Ast_cocci.rulename) -# 25581 "parser_cocci_menhir.ml" - ) = -# 213 "parser_cocci_menhir.mly" - ( P.make_final_script_rule_name_result lang ) -# 25585 "parser_cocci_menhir.ml" + let r : 'tv_continue_struct_decl_list = Obj.magic r in + let d : 'tv_edots_when_TEllipsis_struct_decl_ = Obj.magic d in + let _startpos = _startpos_d_ in + let _endpos = _endpos_r_ in + let _v : 'tv_struct_decl_list_start = +# 580 "parser_cocci_menhir.mly" + ( (P.mkddots "..." d)::r ) +# 30828 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25593,51 +30836,51 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = cocci; - MenhirLib.EngineTypes.startp = _startpos_cocci_; - MenhirLib.EngineTypes.endp = _endpos_cocci_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = py; - MenhirLib.EngineTypes.startp = _startpos_py_; - MenhirLib.EngineTypes.endp = _endpos_py_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = s; + MenhirLib.EngineTypes.startp = _startpos_s_; + MenhirLib.EngineTypes.endp = _endpos_s_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let s : ( +# 50 "parser_cocci_menhir.mly" + (Data.clt) +# 30849 "parser_cocci_menhir.ml" + ) = Obj.magic s in + let _startpos = _startpos_s_ in + let _endpos = _endpos_s_ in + let _v : 'tv_struct_or_union = +# 551 "parser_cocci_menhir.mly" + ( P.clt2mcode Ast.Struct s ) +# 30856 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = u; + MenhirLib.EngineTypes.startp = _startpos_u_; + MenhirLib.EngineTypes.endp = _endpos_u_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let cocci : 'tv_pure_ident = Obj.magic cocci in - let _3 : ( -# 47 "parser_cocci_menhir.mly" - (string) -# 25629 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let py : 'tv_pure_ident = Obj.magic py in - let _startpos = _startpos_py_ in - let _endpos = _endpos__6_ in - let _v : ( -# 159 "parser_cocci_menhir.mly" - (string * (string * string)) -# 25637 "parser_cocci_menhir.ml" - ) = -# 1879 "parser_cocci_menhir.mly" - ( (P.id2name py, (_3, P.id2name cocci)) ) -# 25641 "parser_cocci_menhir.ml" + let u : ( +# 50 "parser_cocci_menhir.mly" + (Data.clt) +# 30877 "parser_cocci_menhir.ml" + ) = Obj.magic u in + let _startpos = _startpos_u_ in + let _endpos = _endpos_u_ in + let _v : 'tv_struct_or_union = +# 552 "parser_cocci_menhir.mly" + ( P.clt2mcode Ast.Union u ) +# 30884 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25650,22 +30893,18 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let x : ( -# 87 "parser_cocci_menhir.mly" - (string * Data.clt) -# 25662 "parser_cocci_menhir.ml" - ) = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_separated_nonempty_list_TComma_TString_ = -# 144 "standard.mly" - ( [ x ] ) -# 25669 "parser_cocci_menhir.ml" + let _1 : 'tv_eexpr = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : 'tv_top_eexpr = +# 1187 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Exp(_1)))) ) +# 30908 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25677,33 +30916,39 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = _2; MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let xs : 'tv_separated_nonempty_list_TComma_TString_ = Obj.magic xs in - let x : ( -# 87 "parser_cocci_menhir.mly" - (string * Data.clt) -# 25700 "parser_cocci_menhir.ml" - ) = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_separated_nonempty_list_TComma_TString_ = -# 146 "standard.mly" - ( x :: xs ) -# 25707 "parser_cocci_menhir.ml" + let _3 : ( +# 101 "parser_cocci_menhir.mly" + (Data.clt) +# 30939 "parser_cocci_menhir.ml" + ) = Obj.magic _3 in + let _2 : 'tv_initialize_list = Obj.magic _2 in + let _1 : ( +# 101 "parser_cocci_menhir.mly" + (Data.clt) +# 30945 "parser_cocci_menhir.ml" + ) = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : 'tv_top_init = +# 1665 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.InitList(P.clt2mcode "{" _1,_2,P.clt2mcode "}" _3)) ) +# 30952 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25714,20 +30959,41 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_toplevel_after_dots = +# 1653 "parser_cocci_menhir.mly" + ([]) +# 30969 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let x : 'tv_any_strict = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_separated_nonempty_list_TComma_any_strict_ = -# 144 "standard.mly" - ( [ x ] ) -# 25731 "parser_cocci_menhir.ml" + let _2 : 'tv_toplevel_after_exp = Obj.magic _2 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_toplevel_after_dots = +# 1654 "parser_cocci_menhir.mly" + (_2) +# 30997 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25739,29 +31005,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let xs : 'tv_separated_nonempty_list_TComma_any_strict_ = Obj.magic xs in - let x : 'tv_any_strict = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_separated_nonempty_list_TComma_any_strict_ = -# 146 "standard.mly" - ( x :: xs ) -# 25765 "parser_cocci_menhir.ml" + let _2 : 'tv_toplevel_after_exp = Obj.magic _2 in + let _1 : 'tv_expr = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_toplevel_after_dots = +# 1655 "parser_cocci_menhir.mly" + ((Ast0.wrap(Ast0.Exp(_1)))::_2) +# 31027 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25773,19 +31035,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let x : 'tv_ctype = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_separated_nonempty_list_TComma_ctype_ = -# 144 "standard.mly" - ( [ x ] ) -# 25789 "parser_cocci_menhir.ml" + let _2 : 'tv_toplevel_after_stm = Obj.magic _2 in + let _1 : 'tv_decl_statement_expr = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_toplevel_after_dots = +# 1656 "parser_cocci_menhir.mly" + (_1@_2) +# 31057 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25797,29 +31065,23 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let xs : 'tv_separated_nonempty_list_TComma_ctype_ = Obj.magic xs in - let x : 'tv_ctype = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_separated_nonempty_list_TComma_ctype_ = -# 146 "standard.mly" - ( x :: xs ) -# 25823 "parser_cocci_menhir.ml" + let _2 : 'tv_toplevel_after_exp = Obj.magic _2 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_toplevel_after_dots_init = +# 1644 "parser_cocci_menhir.mly" + (_2) +# 31085 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25831,19 +31093,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let x : 'tv_d_ident = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_separated_nonempty_list_TComma_d_ident_ = -# 144 "standard.mly" - ( [ x ] ) -# 25847 "parser_cocci_menhir.ml" + let _2 : 'tv_toplevel_after_exp = Obj.magic _2 in + let _1 : 'tv_expr = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_toplevel_after_dots_init = +# 1645 "parser_cocci_menhir.mly" + ((Ast0.wrap(Ast0.Exp(_1)))::_2) +# 31115 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25855,29 +31123,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let xs : 'tv_separated_nonempty_list_TComma_d_ident_ = Obj.magic xs in - let x : 'tv_d_ident = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_separated_nonempty_list_TComma_d_ident_ = -# 146 "standard.mly" - ( x :: xs ) -# 25881 "parser_cocci_menhir.ml" + let _2 : 'tv_toplevel_after_stm = Obj.magic _2 in + let _1 : 'tv_decl_statement_expr = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_toplevel_after_dots_init = +# 1646 "parser_cocci_menhir.mly" + (_1@_2) +# 31145 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25888,20 +31152,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let x : 'tv_dexpr = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_separated_nonempty_list_TComma_dexpr_ = -# 144 "standard.mly" - ( [ x ] ) -# 25905 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_toplevel_after_exp = +# 1649 "parser_cocci_menhir.mly" + ([]) +# 31162 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25913,29 +31170,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let xs : 'tv_separated_nonempty_list_TComma_dexpr_ = Obj.magic xs in - let x : 'tv_dexpr = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_separated_nonempty_list_TComma_dexpr_ = -# 146 "standard.mly" - ( x :: xs ) -# 25939 "parser_cocci_menhir.ml" + let _2 : 'tv_toplevel_after_dots = Obj.magic _2 in + let _1 : 'tv_stm_dots = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_toplevel_after_exp = +# 1650 "parser_cocci_menhir.mly" + (_1::_2) +# 31192 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25946,20 +31199,13 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let x : 'tv_ident_or_const = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_separated_nonempty_list_TComma_ident_or_const_ = -# 144 "standard.mly" - ( [ x ] ) -# 25963 "parser_cocci_menhir.ml" + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in + let _endpos = _startpos in + let _v : 'tv_toplevel_after_stm = +# 1659 "parser_cocci_menhir.mly" + ([]) +# 31209 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -25971,29 +31217,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let xs : 'tv_separated_nonempty_list_TComma_ident_or_const_ = Obj.magic xs in - let x : 'tv_ident_or_const = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_separated_nonempty_list_TComma_ident_or_const_ = -# 146 "standard.mly" - ( x :: xs ) -# 25997 "parser_cocci_menhir.ml" + let _2 : 'tv_toplevel_after_dots = Obj.magic _2 in + let _1 : 'tv_stm_dots = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_toplevel_after_stm = +# 1660 "parser_cocci_menhir.mly" + (_1::_2) +# 31239 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26005,19 +31247,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let x : 'tv_meta_ident = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_separated_nonempty_list_TComma_meta_ident_ = -# 144 "standard.mly" - ( [ x ] ) -# 26021 "parser_cocci_menhir.ml" + let _2 : 'tv_toplevel_after_stm = Obj.magic _2 in + let _1 : 'tv_decl_statement = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_toplevel_after_stm = +# 1661 "parser_cocci_menhir.mly" + (_1@_2) +# 31269 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26029,29 +31277,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let xs : 'tv_separated_nonempty_list_TComma_meta_ident_ = Obj.magic xs in - let x : 'tv_meta_ident = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_separated_nonempty_list_TComma_meta_ident_ = -# 146 "standard.mly" - ( x :: xs ) -# 26055 "parser_cocci_menhir.ml" + let _2 : 'tv_toplevel_after_dots = Obj.magic _2 in + let _1 : 'tv_stm_dots = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_toplevel_seq_start_toplevel_after_dots_ = +# 1639 "parser_cocci_menhir.mly" + ( _1::_2 ) +# 31299 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26063,19 +31307,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let x : 'tv_pure_ident = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_separated_nonempty_list_TComma_pure_ident_ = -# 144 "standard.mly" - ( [ x ] ) -# 26079 "parser_cocci_menhir.ml" + let _2 : 'tv_toplevel_after_exp = Obj.magic _2 in + let _1 : 'tv_expr = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_toplevel_seq_start_toplevel_after_dots_ = +# 1640 "parser_cocci_menhir.mly" + ( (Ast0.wrap(Ast0.Exp(_1)))::_2 ) +# 31329 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26087,29 +31337,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let xs : 'tv_separated_nonempty_list_TComma_pure_ident_ = Obj.magic xs in - let x : 'tv_pure_ident = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_separated_nonempty_list_TComma_pure_ident_ = -# 146 "standard.mly" - ( x :: xs ) -# 26113 "parser_cocci_menhir.ml" + let _2 : 'tv_toplevel_after_stm = Obj.magic _2 in + let _1 : 'tv_decl_statement_expr = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_toplevel_seq_start_toplevel_after_dots_ = +# 1641 "parser_cocci_menhir.mly" + ( _1@_2 ) +# 31359 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26121,19 +31367,44 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = b; + MenhirLib.EngineTypes.startp = _startpos_b_; + MenhirLib.EngineTypes.endp = _endpos_b_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = w0; + MenhirLib.EngineTypes.startp = _startpos_w0_; + MenhirLib.EngineTypes.endp = _endpos_w0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = a0; + MenhirLib.EngineTypes.startp = _startpos_a0_; + MenhirLib.EngineTypes.endp = _endpos_a0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let x : 'tv_pure_ident_or_meta_ident = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_ = -# 144 "standard.mly" - ( [ x ] ) -# 26137 "parser_cocci_menhir.ml" + let b : 'tv_toplevel_after_dots_init = Obj.magic b in + let w0 : 'tv_list_whenppdecs_ = Obj.magic w0 in + let a0 : ( +# 73 "parser_cocci_menhir.mly" + (Data.clt) +# 31392 "parser_cocci_menhir.ml" + ) = Obj.magic a0 in + let _startpos = _startpos_a0_ in + let _endpos = _endpos_b_ in + let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = let a = + let w = w0 in + let a = a0 in + +# 876 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Dots(P.clt2mcode "..." a, List.concat w)) ) +# 31402 "parser_cocci_menhir.ml" + + in + +# 1632 "parser_cocci_menhir.mly" + ( a::b ) +# 31408 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26145,29 +31416,63 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = b; + MenhirLib.EngineTypes.startp = _startpos_b_; + MenhirLib.EngineTypes.endp = _endpos_b_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = c0; + MenhirLib.EngineTypes.startp = _startpos_c0_; + MenhirLib.EngineTypes.endp = _endpos_c0_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = b0; + MenhirLib.EngineTypes.startp = _startpos_b0_; + MenhirLib.EngineTypes.endp = _endpos_b0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = w0; + MenhirLib.EngineTypes.startp = _startpos_w0_; + MenhirLib.EngineTypes.endp = _endpos_w0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = a0; + MenhirLib.EngineTypes.startp = _startpos_a0_; + MenhirLib.EngineTypes.endp = _endpos_a0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; } = _menhir_stack in - let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_ = Obj.magic xs in - let x : 'tv_pure_ident_or_meta_ident = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_ = -# 146 "standard.mly" - ( x :: xs ) -# 26171 "parser_cocci_menhir.ml" + let b : 'tv_toplevel_after_dots_init = Obj.magic b in + let c0 : ( +# 73 "parser_cocci_menhir.mly" + (Data.clt) +# 31450 "parser_cocci_menhir.ml" + ) = Obj.magic c0 in + let b0 : 'tv_nest_start = Obj.magic b0 in + let w0 : 'tv_list_whenppdecs_ = Obj.magic w0 in + let a0 : ( +# 73 "parser_cocci_menhir.mly" + (Data.clt) +# 31457 "parser_cocci_menhir.ml" + ) = Obj.magic a0 in + let _startpos = _startpos_a0_ in + let _endpos = _endpos_b_ in + let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = let a = + let c = c0 in + let b = b0 in + let w = w0 in + let a = a0 in + +# 880 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<..." a, b, + P.clt2mcode "...>" c, List.concat w, false)) ) +# 31470 "parser_cocci_menhir.ml" + + in + +# 1633 "parser_cocci_menhir.mly" + ( a::b ) +# 31476 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26179,19 +31484,63 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = b; + MenhirLib.EngineTypes.startp = _startpos_b_; + MenhirLib.EngineTypes.endp = _endpos_b_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = c0; + MenhirLib.EngineTypes.startp = _startpos_c0_; + MenhirLib.EngineTypes.endp = _endpos_c0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = b0; + MenhirLib.EngineTypes.startp = _startpos_b0_; + MenhirLib.EngineTypes.endp = _endpos_b0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = w0; + MenhirLib.EngineTypes.startp = _startpos_w0_; + MenhirLib.EngineTypes.endp = _endpos_w0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = a0; + MenhirLib.EngineTypes.startp = _startpos_a0_; + MenhirLib.EngineTypes.endp = _endpos_a0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; } = _menhir_stack in - let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_ceq_ = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_ceq__ = -# 144 "standard.mly" - ( [ x ] ) -# 26195 "parser_cocci_menhir.ml" + let b : 'tv_toplevel_after_dots_init = Obj.magic b in + let c0 : ( +# 73 "parser_cocci_menhir.mly" + (Data.clt) +# 31518 "parser_cocci_menhir.ml" + ) = Obj.magic c0 in + let b0 : 'tv_nest_start = Obj.magic b0 in + let w0 : 'tv_list_whenppdecs_ = Obj.magic w0 in + let a0 : ( +# 73 "parser_cocci_menhir.mly" + (Data.clt) +# 31525 "parser_cocci_menhir.ml" + ) = Obj.magic a0 in + let _startpos = _startpos_a0_ in + let _endpos = _endpos_b_ in + let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = let a = + let c = c0 in + let b = b0 in + let w = w0 in + let a = a0 in + +# 883 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<+..." a, b, + P.clt2mcode "...+>" c, List.concat w, true)) ) +# 31538 "parser_cocci_menhir.ml" + + in + +# 1633 "parser_cocci_menhir.mly" + ( a::b ) +# 31544 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26203,29 +31552,57 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = c0; + MenhirLib.EngineTypes.startp = _startpos_c0_; + MenhirLib.EngineTypes.endp = _endpos_c0_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = b0; + MenhirLib.EngineTypes.startp = _startpos_b0_; + MenhirLib.EngineTypes.endp = _endpos_b0_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = w0; + MenhirLib.EngineTypes.startp = _startpos_w0_; + MenhirLib.EngineTypes.endp = _endpos_w0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = a0; + MenhirLib.EngineTypes.startp = _startpos_a0_; + MenhirLib.EngineTypes.endp = _endpos_a0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in - let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_ceq__ = Obj.magic xs in - let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_ceq_ = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_ceq__ = -# 146 "standard.mly" - ( x :: xs ) -# 26229 "parser_cocci_menhir.ml" + let c0 : ( +# 73 "parser_cocci_menhir.mly" + (Data.clt) +# 31580 "parser_cocci_menhir.ml" + ) = Obj.magic c0 in + let b0 : 'tv_nest_start = Obj.magic b0 in + let w0 : 'tv_list_whenppdecs_ = Obj.magic w0 in + let a0 : ( +# 73 "parser_cocci_menhir.mly" + (Data.clt) +# 31587 "parser_cocci_menhir.ml" + ) = Obj.magic a0 in + let _startpos = _startpos_a0_ in + let _endpos = _endpos_c0_ in + let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = let a = + let c = c0 in + let b = b0 in + let w = w0 in + let a = a0 in + +# 880 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<..." a, b, + P.clt2mcode "...>" c, List.concat w, false)) ) +# 31600 "parser_cocci_menhir.ml" + + in + +# 1634 "parser_cocci_menhir.mly" + ( [a] ) +# 31606 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26237,19 +31614,57 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = c0; + MenhirLib.EngineTypes.startp = _startpos_c0_; + MenhirLib.EngineTypes.endp = _endpos_c0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = b0; + MenhirLib.EngineTypes.startp = _startpos_b0_; + MenhirLib.EngineTypes.endp = _endpos_b0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = w0; + MenhirLib.EngineTypes.startp = _startpos_w0_; + MenhirLib.EngineTypes.endp = _endpos_w0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = a0; + MenhirLib.EngineTypes.startp = _startpos_a0_; + MenhirLib.EngineTypes.endp = _endpos_a0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; } = _menhir_stack in - let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_eq_ = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eq__ = -# 144 "standard.mly" - ( [ x ] ) -# 26253 "parser_cocci_menhir.ml" + let c0 : ( +# 73 "parser_cocci_menhir.mly" + (Data.clt) +# 31642 "parser_cocci_menhir.ml" + ) = Obj.magic c0 in + let b0 : 'tv_nest_start = Obj.magic b0 in + let w0 : 'tv_list_whenppdecs_ = Obj.magic w0 in + let a0 : ( +# 73 "parser_cocci_menhir.mly" + (Data.clt) +# 31649 "parser_cocci_menhir.ml" + ) = Obj.magic a0 in + let _startpos = _startpos_a0_ in + let _endpos = _endpos_c0_ in + let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = let a = + let c = c0 in + let b = b0 in + let w = w0 in + let a = a0 in + +# 883 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<+..." a, b, + P.clt2mcode "...+>" c, List.concat w, true)) ) +# 31662 "parser_cocci_menhir.ml" + + in + +# 1634 "parser_cocci_menhir.mly" + ( [a] ) +# 31668 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26261,29 +31676,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eq__ = Obj.magic xs in - let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_eq_ = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eq__ = -# 146 "standard.mly" - ( x :: xs ) -# 26287 "parser_cocci_menhir.ml" + let _2 : 'tv_toplevel_after_exp = Obj.magic _2 in + let _1 : 'tv_expr = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = +# 1635 "parser_cocci_menhir.mly" + ( (Ast0.wrap(Ast0.Exp(_1)))::_2 ) +# 31698 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26295,19 +31706,25 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_eqe_ = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = -# 144 "standard.mly" - ( [ x ] ) -# 26311 "parser_cocci_menhir.ml" + let _2 : 'tv_toplevel_after_stm = Obj.magic _2 in + let _1 : 'tv_decl_statement_expr = Obj.magic _1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = +# 1636 "parser_cocci_menhir.mly" + ( _1@_2 ) +# 31728 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26319,29 +31736,63 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = Obj.magic xs in - let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_eqe_ = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_eqe__ = -# 146 "standard.mly" - ( x :: xs ) -# 26345 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 31760 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 31765 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let _startpos = _startpos_r0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 469 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) +# 31777 "parser_cocci_menhir.ml" + + in + +# 521 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) +# 31783 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 31790 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 31796 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26353,19 +31804,63 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_pos_ = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_pos__ = -# 144 "standard.mly" - ( [ x ] ) -# 26369 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 31828 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 31833 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let _startpos = _startpos_r0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 471 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) +# 31845 "parser_cocci_menhir.ml" + + in + +# 521 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) +# 31851 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 31858 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 31864 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26377,29 +31872,63 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_pos__ = Obj.magic xs in - let x : 'tv_pure_ident_or_meta_ident_with_not_eq_not_pos_ = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_not_eq_not_pos__ = -# 146 "standard.mly" - ( x :: xs ) -# 26403 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 31896 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 31901 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let _startpos = _startpos_r0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 473 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) +# 31913 "parser_cocci_menhir.ml" + + in + +# 521 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) +# 31919 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 31926 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 31932 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26411,19 +31940,64 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = p00; + MenhirLib.EngineTypes.startp = _startpos_p00_; + MenhirLib.EngineTypes.endp = _endpos_p00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let x : 'tv_pure_ident_or_meta_ident_with_seed = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_seed_ = -# 144 "standard.mly" - ( [ x ] ) -# 26427 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let p00 : ( +# 64 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 31964 "parser_cocci_menhir.ml" + ) = Obj.magic p00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 31969 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let _startpos = _startpos_r0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let p0 = p00 in + let r = r0 in + let ty = + let p = p0 in + +# 475 "parser_cocci_menhir.mly" + ( let (nm,pure,clt) = p in + Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) +# 31982 "parser_cocci_menhir.ml" + + in + +# 521 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) +# 31988 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 31995 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 32001 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26435,29 +32009,84 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = p00; + MenhirLib.EngineTypes.startp = _startpos_p00_; + MenhirLib.EngineTypes.endp = _endpos_p00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = r00; + MenhirLib.EngineTypes.startp = _startpos_r00_; + MenhirLib.EngineTypes.endp = _endpos_r00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = r1; + MenhirLib.EngineTypes.startp = _startpos_r1_; + MenhirLib.EngineTypes.endp = _endpos_r1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; } = _menhir_stack in - let xs : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_seed_ = Obj.magic xs in - let x : 'tv_pure_ident_or_meta_ident_with_seed = Obj.magic x in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : 'tv_separated_nonempty_list_TComma_pure_ident_or_meta_ident_with_seed_ = -# 146 "standard.mly" - ( x :: xs ) -# 26461 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let p00 : ( +# 59 "parser_cocci_menhir.mly" + (string * Data.clt) +# 32042 "parser_cocci_menhir.ml" + ) = Obj.magic p00 in + let r00 : ( +# 47 "parser_cocci_menhir.mly" + (string) +# 32047 "parser_cocci_menhir.ml" + ) = Obj.magic r00 in + let r1 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 32052 "parser_cocci_menhir.ml" + ) = Obj.magic r1 in + let _startpos = _startpos_r1_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let p0 = p00 in + let r0 = r00 in + let r = r1 in + let ty = + let p = p0 in + let r = r0 in + +# 478 "parser_cocci_menhir.mly" + ( let nm = (r,P.id2name p) in + (* this is only possible when we are in a metavar decl. Otherwise, + it will be represented already as a MetaType *) + let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in + Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p), + Ast0.Impure (*will be ignored*))) ) +# 32071 "parser_cocci_menhir.ml" + + in + +# 521 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) +# 32077 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 32084 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 32090 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26469,19 +32098,63 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let _1 : 'tv_statement = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_single_statement = -# 931 "parser_cocci_menhir.mly" - ( _1 ) -# 26485 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 32122 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 32127 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let _startpos = _startpos_r0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 485 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) ) +# 32139 "parser_cocci_menhir.ml" + + in + +# 521 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) +# 32145 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 32152 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 32158 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26493,43 +32166,78 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = ty200; + MenhirLib.EngineTypes.startp = _startpos_ty200_; + MenhirLib.EngineTypes.endp = _endpos_ty200_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ty100; + MenhirLib.EngineTypes.startp = _startpos_ty100_; + MenhirLib.EngineTypes.endp = _endpos_ty100_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in - let _3 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 26516 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_midzero_list_statement_statement_ = Obj.magic _2 in - let _1 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 26522 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_single_statement = -# 935 "parser_cocci_menhir.mly" - ( let (mids,code) = _2 in - Ast0.wrap - (Ast0.Disj(P.clt2mcode "(" _1, - List.map (function x -> Ast0.wrap(Ast0.DOTS([x]))) code, - mids, P.clt2mcode ")" _3)) ) -# 26533 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty200 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 32195 "parser_cocci_menhir.ml" + ) = Obj.magic ty200 in + let ty100 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 32200 "parser_cocci_menhir.ml" + ) = Obj.magic ty100 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 32205 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let _startpos = _startpos_r0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty20 = ty200 in + let ty10 = ty100 in + let r = r0 in + let ty = + let ty2 = ty20 in + let ty1 = ty10 in + +# 487 "parser_cocci_menhir.mly" + ( Ast0.wrap + (Ast0.BaseType + (Ast.LongLongType, + [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) +# 32222 "parser_cocci_menhir.ml" + + in + +# 521 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) +# 32228 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 32235 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 32241 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26541,19 +32249,63 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let _1 : 'tv_includes = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_statement = -# 858 "parser_cocci_menhir.mly" - ( _1 ) -# 26557 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 32273 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 32278 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let _startpos = _startpos_r0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 469 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) +# 32290 "parser_cocci_menhir.ml" + + in + +# 523 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) +# 32296 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 32303 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 32309 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26565,23 +32317,63 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let _1 : ( -# 64 "parser_cocci_menhir.mly" - (Parse_aux.info) -# 26578 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_statement = -# 860 "parser_cocci_menhir.mly" - ( P.meta_stm _1 ) -# 26585 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 32341 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 32346 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let _startpos = _startpos_r0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 471 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) +# 32358 "parser_cocci_menhir.ml" + + in + +# 523 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) +# 32364 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 32371 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 32377 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26593,29 +32385,63 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let _2 : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 26611 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_expr = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_statement = -# 862 "parser_cocci_menhir.mly" - ( P.exp_stm _1 _2 ) -# 26619 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 32409 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 32414 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let _startpos = _startpos_r0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 473 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) +# 32426 "parser_cocci_menhir.ml" + + in + +# 523 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) +# 32432 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 32439 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 32445 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26627,55 +32453,64 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = p00; + MenhirLib.EngineTypes.startp = _startpos_p00_; + MenhirLib.EngineTypes.endp = _endpos_p00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _5 : 'tv_single_statement = Obj.magic _5 in - let _4 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 26661 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr = Obj.magic _3 in - let _2 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 26667 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : ( -# 57 "parser_cocci_menhir.mly" - (Data.clt) -# 26672 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : 'tv_statement = -# 864 "parser_cocci_menhir.mly" - ( P.ifthen _1 _2 _3 _4 _5 ) -# 26679 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let p00 : ( +# 64 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 32477 "parser_cocci_menhir.ml" + ) = Obj.magic p00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 32482 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let _startpos = _startpos_r0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let p0 = p00 in + let r = r0 in + let ty = + let p = p0 in + +# 475 "parser_cocci_menhir.mly" + ( let (nm,pure,clt) = p in + Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) +# 32495 "parser_cocci_menhir.ml" + + in + +# 523 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) +# 32501 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 32508 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 32514 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26687,71 +32522,84 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.semv = p00; + MenhirLib.EngineTypes.startp = _startpos_p00_; + MenhirLib.EngineTypes.endp = _endpos_p00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = r00; + MenhirLib.EngineTypes.startp = _startpos_r00_; + MenhirLib.EngineTypes.endp = _endpos_r00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = r1; + MenhirLib.EngineTypes.startp = _startpos_r1_; + MenhirLib.EngineTypes.endp = _endpos_r1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; }; } = _menhir_stack in - let _7 : 'tv_single_statement = Obj.magic _7 in - let _6 : ( -# 57 "parser_cocci_menhir.mly" - (Data.clt) -# 26731 "parser_cocci_menhir.ml" - ) = Obj.magic _6 in - let _5 : 'tv_single_statement = Obj.magic _5 in - let _4 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 26737 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr = Obj.magic _3 in - let _2 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 26743 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : ( -# 57 "parser_cocci_menhir.mly" - (Data.clt) -# 26748 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__7_ in - let _v : 'tv_statement = -# 866 "parser_cocci_menhir.mly" - ( P.ifthenelse _1 _2 _3 _4 _5 _6 _7 ) -# 26755 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let p00 : ( +# 59 "parser_cocci_menhir.mly" + (string * Data.clt) +# 32555 "parser_cocci_menhir.ml" + ) = Obj.magic p00 in + let r00 : ( +# 47 "parser_cocci_menhir.mly" + (string) +# 32560 "parser_cocci_menhir.ml" + ) = Obj.magic r00 in + let r1 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 32565 "parser_cocci_menhir.ml" + ) = Obj.magic r1 in + let _startpos = _startpos_r1_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let p0 = p00 in + let r0 = r00 in + let r = r1 in + let ty = + let p = p0 in + let r = r0 in + +# 478 "parser_cocci_menhir.mly" + ( let nm = (r,P.id2name p) in + (* this is only possible when we are in a metavar decl. Otherwise, + it will be represented already as a MetaType *) + let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in + Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p), + Ast0.Impure (*will be ignored*))) ) +# 32584 "parser_cocci_menhir.ml" + + in + +# 523 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) +# 32590 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 32597 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 32603 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26763,87 +32611,63 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _9; - MenhirLib.EngineTypes.startp = _startpos__9_; - MenhirLib.EngineTypes.endp = _endpos__9_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _8; - MenhirLib.EngineTypes.startp = _startpos__8_; - MenhirLib.EngineTypes.endp = _endpos__8_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _9 : 'tv_single_statement = Obj.magic _9 in - let _8 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 26817 "parser_cocci_menhir.ml" - ) = Obj.magic _8 in - let _7 : 'tv_option_eexpr_ = Obj.magic _7 in - let _6 : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 26823 "parser_cocci_menhir.ml" - ) = Obj.magic _6 in - let _5 : 'tv_option_eexpr_ = Obj.magic _5 in - let _4 : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 26829 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_option_eexpr_ = Obj.magic _3 in - let _2 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 26835 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : ( -# 57 "parser_cocci_menhir.mly" - (Data.clt) -# 26840 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__9_ in - let _v : 'tv_statement = -# 869 "parser_cocci_menhir.mly" - ( P.forloop _1 _2 _3 _4 _5 _6 _7 _8 _9 ) -# 26847 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 32635 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 32640 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let _startpos = _startpos_r0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 485 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) ) +# 32652 "parser_cocci_menhir.ml" + + in + +# 523 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) +# 32658 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 32665 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 32671 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26855,55 +32679,78 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = ty200; + MenhirLib.EngineTypes.startp = _startpos_ty200_; + MenhirLib.EngineTypes.endp = _endpos_ty200_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = ty100; + MenhirLib.EngineTypes.startp = _startpos_ty100_; + MenhirLib.EngineTypes.endp = _endpos_ty100_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; } = _menhir_stack in - let _5 : 'tv_single_statement = Obj.magic _5 in - let _4 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 26889 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr = Obj.magic _3 in - let _2 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 26895 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : ( -# 57 "parser_cocci_menhir.mly" - (Data.clt) -# 26900 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : 'tv_statement = -# 871 "parser_cocci_menhir.mly" - ( P.whileloop _1 _2 _3 _4 _5 ) -# 26907 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty200 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 32708 "parser_cocci_menhir.ml" + ) = Obj.magic ty200 in + let ty100 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 32713 "parser_cocci_menhir.ml" + ) = Obj.magic ty100 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 32718 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let _startpos = _startpos_r0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty20 = ty200 in + let ty10 = ty100 in + let r = r0 in + let ty = + let ty2 = ty20 in + let ty1 = ty10 in + +# 487 "parser_cocci_menhir.mly" + ( Ast0.wrap + (Ast0.BaseType + (Ast.LongLongType, + [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) +# 32735 "parser_cocci_menhir.ml" + + in + +# 523 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) +# 32741 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 32748 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 32754 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26915,75 +32762,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _7 : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 26958 "parser_cocci_menhir.ml" - ) = Obj.magic _7 in - let _6 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 26963 "parser_cocci_menhir.ml" - ) = Obj.magic _6 in - let _5 : 'tv_eexpr = Obj.magic _5 in - let _4 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 26969 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : ( -# 57 "parser_cocci_menhir.mly" - (Data.clt) -# 26974 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_single_statement = Obj.magic _2 in - let _1 : ( -# 57 "parser_cocci_menhir.mly" - (Data.clt) -# 26980 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__7_ in - let _v : 'tv_statement = -# 873 "parser_cocci_menhir.mly" - ( P.doloop _1 _2 _3 _4 _5 _6 _7 ) -# 26987 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 32781 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let _startpos = _startpos_ty00_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty0 = ty00 in + let ty = + let ty = ty0 in + +# 469 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) +# 32792 "parser_cocci_menhir.ml" + + in + +# 524 "parser_cocci_menhir.mly" + ( ty ) +# 32798 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 32805 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 32811 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -26995,51 +32819,109 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 32838 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let _startpos = _startpos_ty00_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty0 = ty00 in + let ty = + let ty = ty0 in + +# 471 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) +# 32849 "parser_cocci_menhir.ml" + + in + +# 524 "parser_cocci_menhir.mly" + ( ty ) +# 32855 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 32862 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 32868 "parser_cocci_menhir.ml" + in + _menhir_env.MenhirLib.EngineTypes.stack <- { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _5 : 'tv_single_statement = Obj.magic _5 in - let _4 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 27029 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr_list_option = Obj.magic _3 in - let _2 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 27035 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_iter_ident = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : 'tv_statement = -# 875 "parser_cocci_menhir.mly" - ( P.iterator _1 _2 _3 _4 _5 ) -# 27043 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 32895 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let _startpos = _startpos_ty00_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty0 = ty00 in + let ty = + let ty = ty0 in + +# 473 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) +# 32906 "parser_cocci_menhir.ml" + + in + +# 524 "parser_cocci_menhir.mly" + ( ty ) +# 32912 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 32919 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 32925 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27051,75 +32933,53 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = p00; + MenhirLib.EngineTypes.startp = _startpos_p00_; + MenhirLib.EngineTypes.endp = _endpos_p00_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _7 : ( -# 101 "parser_cocci_menhir.mly" - (Data.clt) -# 27094 "parser_cocci_menhir.ml" - ) = Obj.magic _7 in - let _6 : 'tv_list_case_line_ = Obj.magic _6 in - let _5 : ( -# 101 "parser_cocci_menhir.mly" - (Data.clt) -# 27100 "parser_cocci_menhir.ml" - ) = Obj.magic _5 in - let _4 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 27105 "parser_cocci_menhir.ml" - ) = Obj.magic _4 in - let _3 : 'tv_eexpr = Obj.magic _3 in - let _2 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 27111 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : ( -# 57 "parser_cocci_menhir.mly" - (Data.clt) -# 27116 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__7_ in - let _v : 'tv_statement = -# 877 "parser_cocci_menhir.mly" - ( P.switch _1 _2 _3 _4 _5 _6 _7 ) -# 27123 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let p00 : ( +# 64 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 32952 "parser_cocci_menhir.ml" + ) = Obj.magic p00 in + let _startpos = _startpos_p00_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let p0 = p00 in + let ty = + let p = p0 in + +# 475 "parser_cocci_menhir.mly" + ( let (nm,pure,clt) = p in + Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) +# 32964 "parser_cocci_menhir.ml" + + in + +# 524 "parser_cocci_menhir.mly" + ( ty ) +# 32970 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 32977 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 32983 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27131,39 +32991,73 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = p00; + MenhirLib.EngineTypes.startp = _startpos_p00_; + MenhirLib.EngineTypes.endp = _endpos_p00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = r00; + MenhirLib.EngineTypes.startp = _startpos_r00_; + MenhirLib.EngineTypes.endp = _endpos_r00_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in - let _3 : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 27154 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_eexpr = Obj.magic _2 in - let _1 : ( -# 57 "parser_cocci_menhir.mly" - (Data.clt) -# 27160 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_statement = -# 878 "parser_cocci_menhir.mly" - ( P.ret_exp _1 _2 _3 ) -# 27167 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let p00 : ( +# 59 "parser_cocci_menhir.mly" + (string * Data.clt) +# 33019 "parser_cocci_menhir.ml" + ) = Obj.magic p00 in + let r00 : ( +# 47 "parser_cocci_menhir.mly" + (string) +# 33024 "parser_cocci_menhir.ml" + ) = Obj.magic r00 in + let _startpos = _startpos_r00_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let p0 = p00 in + let r0 = r00 in + let ty = + let p = p0 in + let r = r0 in + +# 478 "parser_cocci_menhir.mly" + ( let nm = (r,P.id2name p) in + (* this is only possible when we are in a metavar decl. Otherwise, + it will be represented already as a MetaType *) + let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in + Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p), + Ast0.Impure (*will be ignored*))) ) +# 33042 "parser_cocci_menhir.ml" + + in + +# 524 "parser_cocci_menhir.mly" + ( ty ) +# 33048 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 33055 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 33061 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27175,33 +33069,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 27193 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : ( -# 57 "parser_cocci_menhir.mly" - (Data.clt) -# 27198 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_statement = -# 879 "parser_cocci_menhir.mly" - ( P.ret _1 _2 ) -# 27205 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 33088 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let _startpos = _startpos_ty00_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty0 = ty00 in + let ty = + let ty = ty0 in + +# 485 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) ) +# 33099 "parser_cocci_menhir.ml" + + in + +# 524 "parser_cocci_menhir.mly" + ( ty ) +# 33105 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 33112 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 33118 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27213,33 +33126,67 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ty200; + MenhirLib.EngineTypes.startp = _startpos_ty200_; + MenhirLib.EngineTypes.endp = _endpos_ty200_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ty100; + MenhirLib.EngineTypes.startp = _startpos_ty100_; + MenhirLib.EngineTypes.endp = _endpos_ty100_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; - } = _menhir_stack in - let _2 : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 27231 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : ( -# 58 "parser_cocci_menhir.mly" - (Data.clt) -# 27236 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_statement = -# 880 "parser_cocci_menhir.mly" - ( P.break _1 _2 ) -# 27243 "parser_cocci_menhir.ml" + } = _menhir_stack in + let m : 'tv_list_TMul_ = Obj.magic m in + let ty200 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 33150 "parser_cocci_menhir.ml" + ) = Obj.magic ty200 in + let ty100 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 33155 "parser_cocci_menhir.ml" + ) = Obj.magic ty100 in + let _startpos = _startpos_ty100_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty20 = ty200 in + let ty10 = ty100 in + let ty = + let ty2 = ty20 in + let ty1 = ty10 in + +# 487 "parser_cocci_menhir.mly" + ( Ast0.wrap + (Ast0.BaseType + (Ast.LongLongType, + [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) +# 33171 "parser_cocci_menhir.ml" + + in + +# 524 "parser_cocci_menhir.mly" + ( ty ) +# 33177 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 33184 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 33190 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27251,33 +33198,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 27269 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : ( -# 58 "parser_cocci_menhir.mly" - (Data.clt) -# 27274 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_statement = -# 881 "parser_cocci_menhir.mly" - ( P.cont _1 _2 ) -# 27281 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 50 "parser_cocci_menhir.mly" + (Data.clt) +# 33217 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let _startpos = _startpos_ty00_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty0 = ty00 in + let ty = + let ty = ty0 in + +# 495 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" ty])) ) +# 33228 "parser_cocci_menhir.ml" + + in + +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 33234 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 33241 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 33247 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27289,29 +33255,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 27307 "parser_cocci_menhir.ml" - ) = Obj.magic _2 in - let _1 : 'tv_ident = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_statement = -# 882 "parser_cocci_menhir.mly" - ( P.label _1 _2 ) -# 27315 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 33274 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let _startpos = _startpos_ty00_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty0 = ty00 in + let ty = + let ty = ty0 in + +# 497 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.DoubleType,[P.clt2mcode "double" ty])) ) +# 33285 "parser_cocci_menhir.ml" + + in + +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 33291 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 33298 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 33304 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27323,39 +33312,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _3 : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 27346 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_ident = Obj.magic _2 in - let _1 : ( -# 58 "parser_cocci_menhir.mly" - (Data.clt) -# 27352 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_statement = -# 883 "parser_cocci_menhir.mly" - ( P.goto _1 _2 _3 ) -# 27359 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 33331 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let _startpos = _startpos_ty00_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty0 = ty00 in + let ty = + let ty = ty0 in + +# 499 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.FloatType,[P.clt2mcode "float" ty])) ) +# 33342 "parser_cocci_menhir.ml" + + in + +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 33348 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 33355 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 33361 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27367,39 +33369,60 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = i00; + MenhirLib.EngineTypes.startp = _startpos_i00_; + MenhirLib.EngineTypes.endp = _endpos_i00_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = s00; + MenhirLib.EngineTypes.startp = _startpos_s00_; + MenhirLib.EngineTypes.endp = _endpos_s00_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _3 : ( -# 101 "parser_cocci_menhir.mly" - (Data.clt) -# 27390 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_fun_start = Obj.magic _2 in - let _1 : ( -# 101 "parser_cocci_menhir.mly" - (Data.clt) -# 27396 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_statement = -# 885 "parser_cocci_menhir.mly" - ( P.seq _1 _2 _3 ) -# 27403 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let i00 : 'tv_ident = Obj.magic i00 in + let s00 : ( +# 50 "parser_cocci_menhir.mly" + (Data.clt) +# 33394 "parser_cocci_menhir.ml" + ) = Obj.magic s00 in + let _startpos = _startpos_s00_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let i0 = i00 in + let s0 = s00 in + let ty = + let i = i0 in + let s = s0 in + +# 501 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)) ) +# 33407 "parser_cocci_menhir.ml" + + in + +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 33413 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 33420 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 33426 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27411,29 +33434,56 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = w; - MenhirLib.EngineTypes.startp = _startpos_w_; - MenhirLib.EngineTypes.endp = _endpos_w_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = i00; + MenhirLib.EngineTypes.startp = _startpos_i00_; + MenhirLib.EngineTypes.endp = _endpos_i00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = s00; + MenhirLib.EngineTypes.startp = _startpos_s00_; + MenhirLib.EngineTypes.endp = _endpos_s00_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let w : 'tv_list_whenppdecs_ = Obj.magic w in - let _1 : ( -# 73 "parser_cocci_menhir.mly" - (Data.clt) -# 27430 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos_w_ in - let _v : 'tv_stm_dots = -# 889 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Dots(P.clt2mcode "..." _1, List.concat w)) ) -# 27437 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let i00 : 'tv_ident = Obj.magic i00 in + let s00 : 'tv_struct_or_union = Obj.magic s00 in + let _startpos = _startpos_s00_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let i0 = i00 in + let s0 = s00 in + let ty = + let i = i0 in + let s = s0 in + +# 503 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.StructUnionName(s, Some i)) ) +# 33468 "parser_cocci_menhir.ml" + + in + +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 33474 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 33481 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 33487 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27445,46 +33495,91 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = c; - MenhirLib.EngineTypes.startp = _startpos_c_; - MenhirLib.EngineTypes.endp = _endpos_c_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = b; - MenhirLib.EngineTypes.startp = _startpos_b_; - MenhirLib.EngineTypes.endp = _endpos_b_; + MenhirLib.EngineTypes.semv = r00; + MenhirLib.EngineTypes.startp = _startpos_r00_; + MenhirLib.EngineTypes.endp = _endpos_r00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = w; - MenhirLib.EngineTypes.startp = _startpos_w_; - MenhirLib.EngineTypes.endp = _endpos_w_; + MenhirLib.EngineTypes.semv = d00; + MenhirLib.EngineTypes.startp = _startpos_d00_; + MenhirLib.EngineTypes.endp = _endpos_d00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = l00; + MenhirLib.EngineTypes.startp = _startpos_l00_; + MenhirLib.EngineTypes.endp = _endpos_l00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = s00; + MenhirLib.EngineTypes.startp = _startpos_s00_; + MenhirLib.EngineTypes.endp = _endpos_s00_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; } = _menhir_stack in - let c : ( -# 73 "parser_cocci_menhir.mly" - (Data.clt) -# 27473 "parser_cocci_menhir.ml" - ) = Obj.magic c in - let b : 'tv_nest_start = Obj.magic b in - let w : 'tv_list_whenppdecs_ = Obj.magic w in - let _1 : ( -# 73 "parser_cocci_menhir.mly" + let m : 'tv_list_TMul_ = Obj.magic m in + let r00 : ( +# 101 "parser_cocci_menhir.mly" (Data.clt) -# 27480 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos_c_ in - let _v : 'tv_stm_dots = -# 891 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<..." _1, b, - P.clt2mcode "...>" c, List.concat w, false)) ) -# 27488 "parser_cocci_menhir.ml" +# 33529 "parser_cocci_menhir.ml" + ) = Obj.magic r00 in + let d00 : 'tv_struct_decl_list = Obj.magic d00 in + let l00 : ( +# 101 "parser_cocci_menhir.mly" + (Data.clt) +# 33535 "parser_cocci_menhir.ml" + ) = Obj.magic l00 in + let s00 : 'tv_struct_or_union = Obj.magic s00 in + let _startpos = _startpos_s00_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let r0 = r00 in + let d0 = d00 in + let l0 = l00 in + let s0 = s00 in + let ty = + let r = r0 in + let d = d0 in + let l = l0 in + let s = s0 in + let i = + +# 39 "standard.mly" + ( None ) +# 33554 "parser_cocci_menhir.ml" + + in + +# 506 "parser_cocci_menhir.mly" + ( (if i = None && !Data.in_iso + then failwith "structures must be named in the iso file"); + Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)), + P.clt2mcode "{" l, + d, P.clt2mcode "}" r)) ) +# 33564 "parser_cocci_menhir.ml" + + in + +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 33570 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 33577 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 33583 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27496,46 +33591,100 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = c; - MenhirLib.EngineTypes.startp = _startpos_c_; - MenhirLib.EngineTypes.endp = _endpos_c_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = b; - MenhirLib.EngineTypes.startp = _startpos_b_; - MenhirLib.EngineTypes.endp = _endpos_b_; + MenhirLib.EngineTypes.semv = r00; + MenhirLib.EngineTypes.startp = _startpos_r00_; + MenhirLib.EngineTypes.endp = _endpos_r00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = w; - MenhirLib.EngineTypes.startp = _startpos_w_; - MenhirLib.EngineTypes.endp = _endpos_w_; + MenhirLib.EngineTypes.semv = d00; + MenhirLib.EngineTypes.startp = _startpos_d00_; + MenhirLib.EngineTypes.endp = _endpos_d00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = l00; + MenhirLib.EngineTypes.startp = _startpos_l00_; + MenhirLib.EngineTypes.endp = _endpos_l00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = x000; + MenhirLib.EngineTypes.startp = _startpos_x000_; + MenhirLib.EngineTypes.endp = _endpos_x000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = s00; + MenhirLib.EngineTypes.startp = _startpos_s00_; + MenhirLib.EngineTypes.endp = _endpos_s00_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; }; } = _menhir_stack in - let c : ( -# 73 "parser_cocci_menhir.mly" + let m : 'tv_list_TMul_ = Obj.magic m in + let r00 : ( +# 101 "parser_cocci_menhir.mly" (Data.clt) -# 27524 "parser_cocci_menhir.ml" - ) = Obj.magic c in - let b : 'tv_nest_start = Obj.magic b in - let w : 'tv_list_whenppdecs_ = Obj.magic w in - let _1 : ( -# 73 "parser_cocci_menhir.mly" +# 33630 "parser_cocci_menhir.ml" + ) = Obj.magic r00 in + let d00 : 'tv_struct_decl_list = Obj.magic d00 in + let l00 : ( +# 101 "parser_cocci_menhir.mly" (Data.clt) -# 27531 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos_c_ in - let _v : 'tv_stm_dots = -# 894 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<+..." _1, b, - P.clt2mcode "...+>" c, List.concat w, true)) ) -# 27539 "parser_cocci_menhir.ml" +# 33636 "parser_cocci_menhir.ml" + ) = Obj.magic l00 in + let x000 : 'tv_ident = Obj.magic x000 in + let s00 : 'tv_struct_or_union = Obj.magic s00 in + let _startpos = _startpos_s00_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let r0 = r00 in + let d0 = d00 in + let l0 = l00 in + let x00 = x000 in + let s0 = s00 in + let ty = + let r = r0 in + let d = d0 in + let l = l0 in + let x0 = x00 in + let s = s0 in + let i = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 33659 "parser_cocci_menhir.ml" + + in + +# 506 "parser_cocci_menhir.mly" + ( (if i = None && !Data.in_iso + then failwith "structures must be named in the iso file"); + Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)), + P.clt2mcode "{" l, + d, P.clt2mcode "}" r)) ) +# 33669 "parser_cocci_menhir.ml" + + in + +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 33675 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 33682 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 33688 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27547,23 +33696,86 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = s; - MenhirLib.EngineTypes.startp = _startpos_s_; - MenhirLib.EngineTypes.endp = _endpos_s_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = r00; + MenhirLib.EngineTypes.startp = _startpos_r00_; + MenhirLib.EngineTypes.endp = _endpos_r00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = d00; + MenhirLib.EngineTypes.startp = _startpos_d00_; + MenhirLib.EngineTypes.endp = _endpos_d00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = l00; + MenhirLib.EngineTypes.startp = _startpos_l00_; + MenhirLib.EngineTypes.endp = _endpos_l00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = s00; + MenhirLib.EngineTypes.startp = _startpos_s00_; + MenhirLib.EngineTypes.endp = _endpos_s00_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; } = _menhir_stack in - let s : ( -# 53 "parser_cocci_menhir.mly" - (Data.clt) -# 27560 "parser_cocci_menhir.ml" - ) = Obj.magic s in - let _startpos = _startpos_s_ in - let _endpos = _endpos_s_ in - let _v : 'tv_storage = -# 816 "parser_cocci_menhir.mly" - ( P.clt2mcode Ast.Static s ) -# 27567 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let r00 : ( +# 101 "parser_cocci_menhir.mly" + (Data.clt) +# 33730 "parser_cocci_menhir.ml" + ) = Obj.magic r00 in + let d00 : 'tv_struct_decl_list = Obj.magic d00 in + let l00 : ( +# 101 "parser_cocci_menhir.mly" + (Data.clt) +# 33736 "parser_cocci_menhir.ml" + ) = Obj.magic l00 in + let s00 : ( +# 64 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 33741 "parser_cocci_menhir.ml" + ) = Obj.magic s00 in + let _startpos = _startpos_s00_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let r0 = r00 in + let d0 = d00 in + let l0 = l00 in + let s0 = s00 in + let ty = + let r = r0 in + let d = d0 in + let l = l0 in + let s = s0 in + +# 512 "parser_cocci_menhir.mly" + ( let (nm,pure,clt) = s in + let ty = Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) in + Ast0.wrap(Ast0.StructUnionDef(ty,P.clt2mcode "{" l,d,P.clt2mcode "}" r)) ) +# 33760 "parser_cocci_menhir.ml" + + in + +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 33766 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 33773 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 33779 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27575,23 +33787,52 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = s; - MenhirLib.EngineTypes.startp = _startpos_s_; - MenhirLib.EngineTypes.endp = _endpos_s_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = p00; + MenhirLib.EngineTypes.startp = _startpos_p00_; + MenhirLib.EngineTypes.endp = _endpos_p00_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let s : ( -# 53 "parser_cocci_menhir.mly" - (Data.clt) -# 27588 "parser_cocci_menhir.ml" - ) = Obj.magic s in - let _startpos = _startpos_s_ in - let _endpos = _endpos_s_ in - let _v : 'tv_storage = -# 817 "parser_cocci_menhir.mly" - ( P.clt2mcode Ast.Auto s ) -# 27595 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let p00 : ( +# 59 "parser_cocci_menhir.mly" + (string * Data.clt) +# 33806 "parser_cocci_menhir.ml" + ) = Obj.magic p00 in + let _startpos = _startpos_p00_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let p0 = p00 in + let ty = + let p = p0 in + +# 516 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.TypeName(P.id2mcode p)) ) +# 33817 "parser_cocci_menhir.ml" + + in + +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 33823 "parser_cocci_menhir.ml" + + in + let cv = + +# 39 "standard.mly" + ( None ) +# 33830 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 33836 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27603,51 +33844,70 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = s; - MenhirLib.EngineTypes.startp = _startpos_s_; - MenhirLib.EngineTypes.endp = _endpos_s_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; } = _menhir_stack in - let s : ( -# 53 "parser_cocci_menhir.mly" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" (Data.clt) -# 27616 "parser_cocci_menhir.ml" - ) = Obj.magic s in - let _startpos = _startpos_s_ in - let _endpos = _endpos_s_ in - let _v : 'tv_storage = -# 818 "parser_cocci_menhir.mly" - ( P.clt2mcode Ast.Register s ) -# 27623 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = s; - MenhirLib.EngineTypes.startp = _startpos_s_; - MenhirLib.EngineTypes.endp = _endpos_s_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let s : ( -# 53 "parser_cocci_menhir.mly" +# 33873 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" (Data.clt) -# 27644 "parser_cocci_menhir.ml" - ) = Obj.magic s in - let _startpos = _startpos_s_ in - let _endpos = _endpos_s_ in - let _v : 'tv_storage = -# 819 "parser_cocci_menhir.mly" - ( P.clt2mcode Ast.Extern s ) -# 27651 "parser_cocci_menhir.ml" +# 33878 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 469 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) +# 33891 "parser_cocci_menhir.ml" + + in + +# 521 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) +# 33897 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 33905 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 33911 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27659,17 +33919,70 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; } = _menhir_stack in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_struct_decl = + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 33948 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 33953 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 471 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) +# 33966 "parser_cocci_menhir.ml" + + in + # 521 "parser_cocci_menhir.mly" - ( [] ) -# 27673 "parser_cocci_menhir.ml" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) +# 33972 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 33980 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 33986 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27681,36 +33994,70 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 27704 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let d : 'tv_d_ident = Obj.magic d in - let t : 'tv_ctype = Obj.magic t in - let _startpos = _startpos_t_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_struct_decl = -# 523 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - [Ast0.wrap(Ast0.UnInit(None,fn t,id,P.clt2mcode ";" pv))] ) -# 27714 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 34023 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 34028 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 473 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) +# 34041 "parser_cocci_menhir.ml" + + in + +# 521 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) +# 34047 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 34055 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 34061 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27722,97 +34069,71 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = rp2; - MenhirLib.EngineTypes.startp = _startpos_rp2_; - MenhirLib.EngineTypes.endp = _endpos_rp2_; + MenhirLib.EngineTypes.semv = p00; + MenhirLib.EngineTypes.startp = _startpos_p00_; + MenhirLib.EngineTypes.endp = _endpos_p00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = p; - MenhirLib.EngineTypes.startp = _startpos_p_; - MenhirLib.EngineTypes.endp = _endpos_p_; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lp2; - MenhirLib.EngineTypes.startp = _startpos_lp2_; - MenhirLib.EngineTypes.endp = _endpos_lp2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = rp1; - MenhirLib.EngineTypes.startp = _startpos_rp1_; - MenhirLib.EngineTypes.endp = _endpos_rp1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = st; - MenhirLib.EngineTypes.startp = _startpos_st_; - MenhirLib.EngineTypes.endp = _endpos_st_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = lp1; - MenhirLib.EngineTypes.startp = _startpos_lp1_; - MenhirLib.EngineTypes.endp = _endpos_lp1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = t; - MenhirLib.EngineTypes.startp = _startpos_t_; - MenhirLib.EngineTypes.endp = _endpos_t_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 27775 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let rp2 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 27780 "parser_cocci_menhir.ml" - ) = Obj.magic rp2 in - let p : 'tv_decl_list_name_opt_decl_ = Obj.magic p in - let lp2 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 27786 "parser_cocci_menhir.ml" - ) = Obj.magic lp2 in - let rp1 : ( -# 77 "parser_cocci_menhir.mly" - (Data.clt) -# 27791 "parser_cocci_menhir.ml" - ) = Obj.magic rp1 in - let d : 'tv_d_ident = Obj.magic d in - let st : ( -# 99 "parser_cocci_menhir.mly" - (Data.clt) -# 27797 "parser_cocci_menhir.ml" - ) = Obj.magic st in - let lp1 : ( -# 76 "parser_cocci_menhir.mly" - (Data.clt) -# 27802 "parser_cocci_menhir.ml" - ) = Obj.magic lp1 in - let t : 'tv_fn_ctype = Obj.magic t in - let _startpos = _startpos_t_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_struct_decl = -# 527 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - let t = - Ast0.wrap - (Ast0.FunctionPointer - (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1, - P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in - [Ast0.wrap(Ast0.UnInit(None,fn t,id,P.clt2mcode ";" pv))] ) -# 27816 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let p00 : ( +# 64 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 34098 "parser_cocci_menhir.ml" + ) = Obj.magic p00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 34103 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let p0 = p00 in + let r = r0 in + let ty = + let p = p0 in + +# 475 "parser_cocci_menhir.mly" + ( let (nm,pure,clt) = p in + Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) +# 34117 "parser_cocci_menhir.ml" + + in + +# 521 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) +# 34123 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 34131 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 34137 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27824,44 +34145,91 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.semv = p00; + MenhirLib.EngineTypes.startp = _startpos_p00_; + MenhirLib.EngineTypes.endp = _endpos_p00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 27847 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let d : 'tv_d_ident = Obj.magic d in - let i : 'tv_pure_ident = Obj.magic i in - let _startpos = _startpos_i_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_struct_decl = let cv = + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = r00; + MenhirLib.EngineTypes.startp = _startpos_r00_; + MenhirLib.EngineTypes.endp = _endpos_r00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = r1; + MenhirLib.EngineTypes.startp = _startpos_r1_; + MenhirLib.EngineTypes.endp = _endpos_r1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + } = _menhir_stack in + let m : 'tv_list_TMul_ = Obj.magic m in + let p00 : ( +# 59 "parser_cocci_menhir.mly" + (string * Data.clt) +# 34183 "parser_cocci_menhir.ml" + ) = Obj.magic p00 in + let r00 : ( +# 47 "parser_cocci_menhir.mly" + (string) +# 34188 "parser_cocci_menhir.ml" + ) = Obj.magic r00 in + let r1 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 34193 "parser_cocci_menhir.ml" + ) = Obj.magic r1 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let p0 = p00 in + let r0 = r00 in + let r = r1 in + let ty = + let p = p0 in + let r = r0 in + +# 478 "parser_cocci_menhir.mly" + ( let nm = (r,P.id2name p) in + (* this is only possible when we are in a metavar decl. Otherwise, + it will be represented already as a MetaType *) + let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in + Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p), + Ast0.Impure (*will be ignored*))) ) +# 34213 "parser_cocci_menhir.ml" + + in -# 39 "standard.mly" - ( None ) -# 27857 "parser_cocci_menhir.ml" +# 521 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) +# 34219 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 34227 "parser_cocci_menhir.ml" in -# 535 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in - [Ast0.wrap(Ast0.UnInit(None,fn idtype,id,P.clt2mcode ";" pv))] ) -# 27865 "parser_cocci_menhir.ml" +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 34233 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27873,17 +34241,17 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = pv; - MenhirLib.EngineTypes.startp = _startpos_pv_; - MenhirLib.EngineTypes.endp = _endpos_pv_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = x0; @@ -27894,78 +34262,49 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct }; }; } = _menhir_stack in - let pv : ( -# 107 "parser_cocci_menhir.mly" - (Data.clt) -# 27901 "parser_cocci_menhir.ml" - ) = Obj.magic pv in - let d : 'tv_d_ident = Obj.magic d in - let i : 'tv_pure_ident = Obj.magic i in + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 34270 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 34275 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in let x0 : 'tv_const_vol = Obj.magic x0 in let _startpos = _startpos_x0_ in - let _endpos = _endpos_pv_ in - let _v : 'tv_struct_decl = let cv = + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 485 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) ) +# 34288 "parser_cocci_menhir.ml" + + in + +# 521 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) +# 34294 "parser_cocci_menhir.ml" + + in + let cv = let x = x0 in # 41 "standard.mly" ( Some x ) -# 27913 "parser_cocci_menhir.ml" +# 34302 "parser_cocci_menhir.ml" in -# 535 "parser_cocci_menhir.mly" - ( let (id,fn) = d in - let idtype = P.make_cv cv (Ast0.wrap (Ast0.TypeName(P.id2mcode i))) in - [Ast0.wrap(Ast0.UnInit(None,fn idtype,id,P.clt2mcode ";" pv))] ) -# 27921 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let _1 : 'tv_struct_decl_list_start = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_struct_decl_list = -# 540 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.DOTS(_1)) ) -# 27945 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let _1 : 'tv_struct_decl = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_struct_decl_list_start = -# 543 "parser_cocci_menhir.mly" - ( _1 ) -# 27969 "parser_cocci_menhir.ml" +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 34308 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -27977,25 +34316,85 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ty200; + MenhirLib.EngineTypes.startp = _startpos_ty200_; + MenhirLib.EngineTypes.endp = _endpos_ty200_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ty100; + MenhirLib.EngineTypes.startp = _startpos_ty100_; + MenhirLib.EngineTypes.endp = _endpos_ty100_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; } = _menhir_stack in - let _2 : 'tv_struct_decl_list_start = Obj.magic _2 in - let _1 : 'tv_struct_decl = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_struct_decl_list_start = -# 544 "parser_cocci_menhir.mly" - ( _1@_2 ) -# 27999 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty200 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 34350 "parser_cocci_menhir.ml" + ) = Obj.magic ty200 in + let ty100 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 34355 "parser_cocci_menhir.ml" + ) = Obj.magic ty100 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 34360 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty20 = ty200 in + let ty10 = ty100 in + let r = r0 in + let ty = + let ty2 = ty20 in + let ty1 = ty10 in + +# 487 "parser_cocci_menhir.mly" + ( Ast0.wrap + (Ast0.BaseType + (Ast.LongLongType, + [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) +# 34378 "parser_cocci_menhir.ml" + + in + +# 521 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) ) +# 34384 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 34392 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 34398 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28007,25 +34406,70 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = r; - MenhirLib.EngineTypes.startp = _startpos_r_; - MenhirLib.EngineTypes.endp = _endpos_r_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; } = _menhir_stack in - let r : 'tv_continue_struct_decl_list = Obj.magic r in - let d : 'tv_edots_when_TEllipsis_struct_decl_ = Obj.magic d in - let _startpos = _startpos_d_ in - let _endpos = _endpos_r_ in - let _v : 'tv_struct_decl_list_start = -# 546 "parser_cocci_menhir.mly" - ( (P.mkddots "..." d)::r ) -# 28029 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 34435 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 34440 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 469 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) +# 34453 "parser_cocci_menhir.ml" + + in + +# 523 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) +# 34459 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 34467 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 34473 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28037,23 +34481,70 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = s; - MenhirLib.EngineTypes.startp = _startpos_s_; - MenhirLib.EngineTypes.endp = _endpos_s_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; } = _menhir_stack in - let s : ( -# 50 "parser_cocci_menhir.mly" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 34510 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" (Data.clt) -# 28050 "parser_cocci_menhir.ml" - ) = Obj.magic s in - let _startpos = _startpos_s_ in - let _endpos = _endpos_s_ in - let _v : 'tv_struct_or_union = -# 517 "parser_cocci_menhir.mly" - ( P.clt2mcode Ast.Struct s ) -# 28057 "parser_cocci_menhir.ml" +# 34515 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 471 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) +# 34528 "parser_cocci_menhir.ml" + + in + +# 523 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) +# 34534 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 34542 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 34548 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28065,23 +34556,70 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = u; - MenhirLib.EngineTypes.startp = _startpos_u_; - MenhirLib.EngineTypes.endp = _endpos_u_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; } = _menhir_stack in - let u : ( -# 50 "parser_cocci_menhir.mly" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" (Data.clt) -# 28078 "parser_cocci_menhir.ml" - ) = Obj.magic u in - let _startpos = _startpos_u_ in - let _endpos = _endpos_u_ in - let _v : 'tv_struct_or_union = -# 518 "parser_cocci_menhir.mly" - ( P.clt2mcode Ast.Union u ) -# 28085 "parser_cocci_menhir.ml" +# 34585 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 34590 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 473 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) +# 34603 "parser_cocci_menhir.ml" + + in + +# 523 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) +# 34609 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 34617 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 34623 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28093,19 +34631,71 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = p00; + MenhirLib.EngineTypes.startp = _startpos_p00_; + MenhirLib.EngineTypes.endp = _endpos_p00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; } = _menhir_stack in - let _1 : 'tv_eexpr = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : 'tv_top_eexpr = -# 1210 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.OTHER(Ast0.wrap(Ast0.Exp(_1)))) ) -# 28109 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let p00 : ( +# 64 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 34660 "parser_cocci_menhir.ml" + ) = Obj.magic p00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 34665 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let p0 = p00 in + let r = r0 in + let ty = + let p = p0 in + +# 475 "parser_cocci_menhir.mly" + ( let (nm,pure,clt) = p in + Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) +# 34679 "parser_cocci_menhir.ml" + + in + +# 523 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) +# 34685 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 34693 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 34699 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28117,56 +34707,91 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = p00; + MenhirLib.EngineTypes.startp = _startpos_p00_; + MenhirLib.EngineTypes.endp = _endpos_p00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = r00; + MenhirLib.EngineTypes.startp = _startpos_r00_; + MenhirLib.EngineTypes.endp = _endpos_r00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = r1; + MenhirLib.EngineTypes.startp = _startpos_r1_; + MenhirLib.EngineTypes.endp = _endpos_r1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; }; } = _menhir_stack in - let _3 : ( -# 101 "parser_cocci_menhir.mly" - (Data.clt) -# 28140 "parser_cocci_menhir.ml" - ) = Obj.magic _3 in - let _2 : 'tv_initialize_list = Obj.magic _2 in - let _1 : ( -# 101 "parser_cocci_menhir.mly" - (Data.clt) -# 28146 "parser_cocci_menhir.ml" - ) = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : 'tv_top_init = -# 1652 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.InitList(P.clt2mcode "{" _1,_2,P.clt2mcode "}" _3)) ) -# 28153 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_toplevel_after_dots = -# 1640 "parser_cocci_menhir.mly" - ([]) -# 28170 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let p00 : ( +# 59 "parser_cocci_menhir.mly" + (string * Data.clt) +# 34745 "parser_cocci_menhir.ml" + ) = Obj.magic p00 in + let r00 : ( +# 47 "parser_cocci_menhir.mly" + (string) +# 34750 "parser_cocci_menhir.ml" + ) = Obj.magic r00 in + let r1 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 34755 "parser_cocci_menhir.ml" + ) = Obj.magic r1 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let p0 = p00 in + let r0 = r00 in + let r = r1 in + let ty = + let p = p0 in + let r = r0 in + +# 478 "parser_cocci_menhir.mly" + ( let nm = (r,P.id2name p) in + (* this is only possible when we are in a metavar decl. Otherwise, + it will be represented already as a MetaType *) + let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in + Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p), + Ast0.Impure (*will be ignored*))) ) +# 34775 "parser_cocci_menhir.ml" + + in + +# 523 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) +# 34781 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 34789 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 34795 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28178,23 +34803,70 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; } = _menhir_stack in - let _2 : 'tv_toplevel_after_exp = Obj.magic _2 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_toplevel_after_dots = -# 1641 "parser_cocci_menhir.mly" - (_2) -# 28198 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 34832 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 34837 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty0 = ty00 in + let r = r0 in + let ty = + let ty = ty0 in + +# 485 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) ) +# 34850 "parser_cocci_menhir.ml" + + in + +# 523 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) +# 34856 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 34864 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 34870 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28206,25 +34878,85 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ty200; + MenhirLib.EngineTypes.startp = _startpos_ty200_; + MenhirLib.EngineTypes.endp = _endpos_ty200_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ty100; + MenhirLib.EngineTypes.startp = _startpos_ty100_; + MenhirLib.EngineTypes.endp = _endpos_ty100_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = r0; + MenhirLib.EngineTypes.startp = _startpos_r0_; + MenhirLib.EngineTypes.endp = _endpos_r0_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; } = _menhir_stack in - let _2 : 'tv_toplevel_after_exp = Obj.magic _2 in - let _1 : 'tv_expr = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_toplevel_after_dots = -# 1642 "parser_cocci_menhir.mly" - ((Ast0.wrap(Ast0.Exp(_1)))::_2) -# 28228 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty200 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 34912 "parser_cocci_menhir.ml" + ) = Obj.magic ty200 in + let ty100 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 34917 "parser_cocci_menhir.ml" + ) = Obj.magic ty100 in + let r0 : ( +# 51 "parser_cocci_menhir.mly" + (Data.clt) +# 34922 "parser_cocci_menhir.ml" + ) = Obj.magic r0 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty20 = ty200 in + let ty10 = ty100 in + let r = r0 in + let ty = + let ty2 = ty20 in + let ty1 = ty10 in + +# 487 "parser_cocci_menhir.mly" + ( Ast0.wrap + (Ast0.BaseType + (Ast.LongLongType, + [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) +# 34940 "parser_cocci_menhir.ml" + + in + +# 523 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) ) +# 34946 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 34954 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 34960 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28236,25 +34968,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let _2 : 'tv_toplevel_after_stm = Obj.magic _2 in - let _1 : 'tv_decl_statement_expr = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_toplevel_after_dots = -# 1643 "parser_cocci_menhir.mly" - (_1@_2) -# 28258 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 34992 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty0 = ty00 in + let ty = + let ty = ty0 in + +# 469 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) ) +# 35004 "parser_cocci_menhir.ml" + + in + +# 524 "parser_cocci_menhir.mly" + ( ty ) +# 35010 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 35018 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 35024 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28266,23 +35032,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let _2 : 'tv_toplevel_after_exp = Obj.magic _2 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_toplevel_after_dots_init = -# 1631 "parser_cocci_menhir.mly" - (_2) -# 28286 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 35056 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty0 = ty00 in + let ty = + let ty = ty0 in + +# 471 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) ) +# 35068 "parser_cocci_menhir.ml" + + in + +# 524 "parser_cocci_menhir.mly" + ( ty ) +# 35074 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 35082 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 35088 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28294,25 +35096,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let _2 : 'tv_toplevel_after_exp = Obj.magic _2 in - let _1 : 'tv_expr = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_toplevel_after_dots_init = -# 1632 "parser_cocci_menhir.mly" - ((Ast0.wrap(Ast0.Exp(_1)))::_2) -# 28316 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 35120 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty0 = ty00 in + let ty = + let ty = ty0 in + +# 473 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) ) +# 35132 "parser_cocci_menhir.ml" + + in + +# 524 "parser_cocci_menhir.mly" + ( ty ) +# 35138 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 35146 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 35152 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28324,42 +35160,60 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = p00; + MenhirLib.EngineTypes.startp = _startpos_p00_; + MenhirLib.EngineTypes.endp = _endpos_p00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let _2 : 'tv_toplevel_after_stm = Obj.magic _2 in - let _1 : 'tv_decl_statement_expr = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_toplevel_after_dots_init = -# 1633 "parser_cocci_menhir.mly" - (_1@_2) -# 28346 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_toplevel_after_exp = -# 1636 "parser_cocci_menhir.mly" - ([]) -# 28363 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let p00 : ( +# 64 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 35184 "parser_cocci_menhir.ml" + ) = Obj.magic p00 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let p0 = p00 in + let ty = + let p = p0 in + +# 475 "parser_cocci_menhir.mly" + ( let (nm,pure,clt) = p in + Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) +# 35197 "parser_cocci_menhir.ml" + + in + +# 524 "parser_cocci_menhir.mly" + ( ty ) +# 35203 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 35211 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 35217 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28371,42 +35225,80 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = p00; + MenhirLib.EngineTypes.startp = _startpos_p00_; + MenhirLib.EngineTypes.endp = _endpos_p00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = r00; + MenhirLib.EngineTypes.startp = _startpos_r00_; + MenhirLib.EngineTypes.endp = _endpos_r00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; } = _menhir_stack in - let _2 : 'tv_toplevel_after_dots = Obj.magic _2 in - let _1 : 'tv_stm_dots = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_toplevel_after_exp = -# 1637 "parser_cocci_menhir.mly" - (_1::_2) -# 28393 "parser_cocci_menhir.ml" - in - _menhir_env.MenhirLib.EngineTypes.stack <- { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _startpos = _menhir_env.MenhirLib.EngineTypes.lexbuf.Lexing.lex_start_p in - let _endpos = _startpos in - let _v : 'tv_toplevel_after_stm = -# 1646 "parser_cocci_menhir.mly" - ([]) -# 28410 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let p00 : ( +# 59 "parser_cocci_menhir.mly" + (string * Data.clt) +# 35258 "parser_cocci_menhir.ml" + ) = Obj.magic p00 in + let r00 : ( +# 47 "parser_cocci_menhir.mly" + (string) +# 35263 "parser_cocci_menhir.ml" + ) = Obj.magic r00 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let p0 = p00 in + let r0 = r00 in + let ty = + let p = p0 in + let r = r0 in + +# 478 "parser_cocci_menhir.mly" + ( let nm = (r,P.id2name p) in + (* this is only possible when we are in a metavar decl. Otherwise, + it will be represented already as a MetaType *) + let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in + Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p), + Ast0.Impure (*will be ignored*))) ) +# 35282 "parser_cocci_menhir.ml" + + in + +# 524 "parser_cocci_menhir.mly" + ( ty ) +# 35288 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 35296 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 35302 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28418,25 +35310,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let _2 : 'tv_toplevel_after_dots = Obj.magic _2 in - let _1 : 'tv_stm_dots = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_toplevel_after_stm = -# 1647 "parser_cocci_menhir.mly" - (_1::_2) -# 28440 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 35334 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty0 = ty00 in + let ty = + let ty = ty0 in + +# 485 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) ) +# 35346 "parser_cocci_menhir.ml" + + in + +# 524 "parser_cocci_menhir.mly" + ( ty ) +# 35352 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 35360 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 35366 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28448,25 +35374,74 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ty200; + MenhirLib.EngineTypes.startp = _startpos_ty200_; + MenhirLib.EngineTypes.endp = _endpos_ty200_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = ty100; + MenhirLib.EngineTypes.startp = _startpos_ty100_; + MenhirLib.EngineTypes.endp = _endpos_ty100_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; } = _menhir_stack in - let _2 : 'tv_toplevel_after_stm = Obj.magic _2 in - let _1 : 'tv_decl_statement = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_toplevel_after_stm = -# 1648 "parser_cocci_menhir.mly" - (_1@_2) -# 28470 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty200 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 35403 "parser_cocci_menhir.ml" + ) = Obj.magic ty200 in + let ty100 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 35408 "parser_cocci_menhir.ml" + ) = Obj.magic ty100 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty20 = ty200 in + let ty10 = ty100 in + let ty = + let ty2 = ty20 in + let ty1 = ty10 in + +# 487 "parser_cocci_menhir.mly" + ( Ast0.wrap + (Ast0.BaseType + (Ast.LongLongType, + [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) ) +# 35425 "parser_cocci_menhir.ml" + + in + +# 524 "parser_cocci_menhir.mly" + ( ty ) +# 35431 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 35439 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 35445 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28478,25 +35453,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let _2 : 'tv_toplevel_after_dots = Obj.magic _2 in - let _1 : 'tv_stm_dots = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_toplevel_seq_start_toplevel_after_dots_ = -# 1626 "parser_cocci_menhir.mly" - ( _1::_2 ) -# 28500 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 50 "parser_cocci_menhir.mly" + (Data.clt) +# 35477 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty0 = ty00 in + let ty = + let ty = ty0 in + +# 495 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" ty])) ) +# 35489 "parser_cocci_menhir.ml" + + in + +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 35495 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 35503 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 35509 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28508,25 +35517,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let _2 : 'tv_toplevel_after_exp = Obj.magic _2 in - let _1 : 'tv_expr = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_toplevel_seq_start_toplevel_after_dots_ = -# 1627 "parser_cocci_menhir.mly" - ( (Ast0.wrap(Ast0.Exp(_1)))::_2 ) -# 28530 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 35541 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty0 = ty00 in + let ty = + let ty = ty0 in + +# 497 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.DoubleType,[P.clt2mcode "double" ty])) ) +# 35553 "parser_cocci_menhir.ml" + + in + +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 35559 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 35567 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 35573 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28538,25 +35581,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = ty00; + MenhirLib.EngineTypes.startp = _startpos_ty00_; + MenhirLib.EngineTypes.endp = _endpos_ty00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let _2 : 'tv_toplevel_after_stm = Obj.magic _2 in - let _1 : 'tv_decl_statement_expr = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_toplevel_seq_start_toplevel_after_dots_ = -# 1628 "parser_cocci_menhir.mly" - ( _1@_2 ) -# 28560 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let ty00 : ( +# 49 "parser_cocci_menhir.mly" + (Data.clt) +# 35605 "parser_cocci_menhir.ml" + ) = Obj.magic ty00 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let ty0 = ty00 in + let ty = + let ty = ty0 in + +# 499 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.BaseType(Ast.FloatType,[P.clt2mcode "float" ty])) ) +# 35617 "parser_cocci_menhir.ml" + + in + +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 35623 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 35631 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 35637 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28568,44 +35645,67 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = b; - MenhirLib.EngineTypes.startp = _startpos_b_; - MenhirLib.EngineTypes.endp = _endpos_b_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = w0; - MenhirLib.EngineTypes.startp = _startpos_w0_; - MenhirLib.EngineTypes.endp = _endpos_w0_; + MenhirLib.EngineTypes.semv = i00; + MenhirLib.EngineTypes.startp = _startpos_i00_; + MenhirLib.EngineTypes.endp = _endpos_i00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = a0; - MenhirLib.EngineTypes.startp = _startpos_a0_; - MenhirLib.EngineTypes.endp = _endpos_a0_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = s00; + MenhirLib.EngineTypes.startp = _startpos_s00_; + MenhirLib.EngineTypes.endp = _endpos_s00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in - let b : 'tv_toplevel_after_dots_init = Obj.magic b in - let w0 : 'tv_list_whenppdecs_ = Obj.magic w0 in - let a0 : ( -# 73 "parser_cocci_menhir.mly" - (Data.clt) -# 28593 "parser_cocci_menhir.ml" - ) = Obj.magic a0 in - let _startpos = _startpos_a0_ in - let _endpos = _endpos_b_ in - let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = let a = - let w = w0 in - let a = a0 in + let m : 'tv_list_TMul_ = Obj.magic m in + let i00 : 'tv_ident = Obj.magic i00 in + let s00 : ( +# 50 "parser_cocci_menhir.mly" + (Data.clt) +# 35675 "parser_cocci_menhir.ml" + ) = Obj.magic s00 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let i0 = i00 in + let s0 = s00 in + let ty = + let i = i0 in + let s = s0 in + +# 501 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)) ) +# 35689 "parser_cocci_menhir.ml" + + in -# 899 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Dots(P.clt2mcode "..." a, List.concat w)) ) -# 28603 "parser_cocci_menhir.ml" +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 35695 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 35703 "parser_cocci_menhir.ml" in -# 1619 "parser_cocci_menhir.mly" - ( a::b ) -# 28609 "parser_cocci_menhir.ml" +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 35709 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28617,63 +35717,63 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = b; - MenhirLib.EngineTypes.startp = _startpos_b_; - MenhirLib.EngineTypes.endp = _endpos_b_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = c0; - MenhirLib.EngineTypes.startp = _startpos_c0_; - MenhirLib.EngineTypes.endp = _endpos_c0_; + MenhirLib.EngineTypes.semv = i00; + MenhirLib.EngineTypes.startp = _startpos_i00_; + MenhirLib.EngineTypes.endp = _endpos_i00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = b0; - MenhirLib.EngineTypes.startp = _startpos_b0_; - MenhirLib.EngineTypes.endp = _endpos_b0_; + MenhirLib.EngineTypes.semv = s00; + MenhirLib.EngineTypes.startp = _startpos_s00_; + MenhirLib.EngineTypes.endp = _endpos_s00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = w0; - MenhirLib.EngineTypes.startp = _startpos_w0_; - MenhirLib.EngineTypes.endp = _endpos_w0_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = a0; - MenhirLib.EngineTypes.startp = _startpos_a0_; - MenhirLib.EngineTypes.endp = _endpos_a0_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; } = _menhir_stack in - let b : 'tv_toplevel_after_dots_init = Obj.magic b in - let c0 : ( -# 73 "parser_cocci_menhir.mly" - (Data.clt) -# 28651 "parser_cocci_menhir.ml" - ) = Obj.magic c0 in - let b0 : 'tv_nest_start = Obj.magic b0 in - let w0 : 'tv_list_whenppdecs_ = Obj.magic w0 in - let a0 : ( -# 73 "parser_cocci_menhir.mly" - (Data.clt) -# 28658 "parser_cocci_menhir.ml" - ) = Obj.magic a0 in - let _startpos = _startpos_a0_ in - let _endpos = _endpos_b_ in - let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = let a = - let c = c0 in - let b = b0 in - let w = w0 in - let a = a0 in + let m : 'tv_list_TMul_ = Obj.magic m in + let i00 : 'tv_ident = Obj.magic i00 in + let s00 : 'tv_struct_or_union = Obj.magic s00 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let i0 = i00 in + let s0 = s00 in + let ty = + let i = i0 in + let s = s0 in + +# 503 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.StructUnionName(s, Some i)) ) +# 35757 "parser_cocci_menhir.ml" + + in -# 903 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<..." a, b, - P.clt2mcode "...>" c, List.concat w, false)) ) -# 28671 "parser_cocci_menhir.ml" +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 35763 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 35771 "parser_cocci_menhir.ml" in -# 1620 "parser_cocci_menhir.mly" - ( a::b ) -# 28677 "parser_cocci_menhir.ml" +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 35777 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28685,63 +35785,98 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = b; - MenhirLib.EngineTypes.startp = _startpos_b_; - MenhirLib.EngineTypes.endp = _endpos_b_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = c0; - MenhirLib.EngineTypes.startp = _startpos_c0_; - MenhirLib.EngineTypes.endp = _endpos_c0_; + MenhirLib.EngineTypes.semv = r00; + MenhirLib.EngineTypes.startp = _startpos_r00_; + MenhirLib.EngineTypes.endp = _endpos_r00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = b0; - MenhirLib.EngineTypes.startp = _startpos_b0_; - MenhirLib.EngineTypes.endp = _endpos_b0_; + MenhirLib.EngineTypes.semv = d00; + MenhirLib.EngineTypes.startp = _startpos_d00_; + MenhirLib.EngineTypes.endp = _endpos_d00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = w0; - MenhirLib.EngineTypes.startp = _startpos_w0_; - MenhirLib.EngineTypes.endp = _endpos_w0_; + MenhirLib.EngineTypes.semv = l00; + MenhirLib.EngineTypes.startp = _startpos_l00_; + MenhirLib.EngineTypes.endp = _endpos_l00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = a0; - MenhirLib.EngineTypes.startp = _startpos_a0_; - MenhirLib.EngineTypes.endp = _endpos_a0_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = s00; + MenhirLib.EngineTypes.startp = _startpos_s00_; + MenhirLib.EngineTypes.endp = _endpos_s00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; }; } = _menhir_stack in - let b : 'tv_toplevel_after_dots_init = Obj.magic b in - let c0 : ( -# 73 "parser_cocci_menhir.mly" + let m : 'tv_list_TMul_ = Obj.magic m in + let r00 : ( +# 101 "parser_cocci_menhir.mly" (Data.clt) -# 28719 "parser_cocci_menhir.ml" - ) = Obj.magic c0 in - let b0 : 'tv_nest_start = Obj.magic b0 in - let w0 : 'tv_list_whenppdecs_ = Obj.magic w0 in - let a0 : ( -# 73 "parser_cocci_menhir.mly" +# 35824 "parser_cocci_menhir.ml" + ) = Obj.magic r00 in + let d00 : 'tv_struct_decl_list = Obj.magic d00 in + let l00 : ( +# 101 "parser_cocci_menhir.mly" (Data.clt) -# 28726 "parser_cocci_menhir.ml" - ) = Obj.magic a0 in - let _startpos = _startpos_a0_ in - let _endpos = _endpos_b_ in - let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = let a = - let c = c0 in - let b = b0 in - let w = w0 in - let a = a0 in +# 35830 "parser_cocci_menhir.ml" + ) = Obj.magic l00 in + let s00 : 'tv_struct_or_union = Obj.magic s00 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let r0 = r00 in + let d0 = d00 in + let l0 = l00 in + let s0 = s00 in + let ty = + let r = r0 in + let d = d0 in + let l = l0 in + let s = s0 in + let i = + +# 39 "standard.mly" + ( None ) +# 35850 "parser_cocci_menhir.ml" + + in + +# 506 "parser_cocci_menhir.mly" + ( (if i = None && !Data.in_iso + then failwith "structures must be named in the iso file"); + Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)), + P.clt2mcode "{" l, + d, P.clt2mcode "}" r)) ) +# 35860 "parser_cocci_menhir.ml" + + in -# 906 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<+..." a, b, - P.clt2mcode "...+>" c, List.concat w, true)) ) -# 28739 "parser_cocci_menhir.ml" +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 35866 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 35874 "parser_cocci_menhir.ml" in -# 1620 "parser_cocci_menhir.mly" - ( a::b ) -# 28745 "parser_cocci_menhir.ml" +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 35880 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28753,57 +35888,107 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = c0; - MenhirLib.EngineTypes.startp = _startpos_c0_; - MenhirLib.EngineTypes.endp = _endpos_c0_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = b0; - MenhirLib.EngineTypes.startp = _startpos_b0_; - MenhirLib.EngineTypes.endp = _endpos_b0_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = w0; - MenhirLib.EngineTypes.startp = _startpos_w0_; - MenhirLib.EngineTypes.endp = _endpos_w0_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = a0; - MenhirLib.EngineTypes.startp = _startpos_a0_; - MenhirLib.EngineTypes.endp = _endpos_a0_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = r00; + MenhirLib.EngineTypes.startp = _startpos_r00_; + MenhirLib.EngineTypes.endp = _endpos_r00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = d00; + MenhirLib.EngineTypes.startp = _startpos_d00_; + MenhirLib.EngineTypes.endp = _endpos_d00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = l00; + MenhirLib.EngineTypes.startp = _startpos_l00_; + MenhirLib.EngineTypes.endp = _endpos_l00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = x000; + MenhirLib.EngineTypes.startp = _startpos_x000_; + MenhirLib.EngineTypes.endp = _endpos_x000_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = s00; + MenhirLib.EngineTypes.startp = _startpos_s00_; + MenhirLib.EngineTypes.endp = _endpos_s00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; }; }; } = _menhir_stack in - let c0 : ( -# 73 "parser_cocci_menhir.mly" + let m : 'tv_list_TMul_ = Obj.magic m in + let r00 : ( +# 101 "parser_cocci_menhir.mly" (Data.clt) -# 28781 "parser_cocci_menhir.ml" - ) = Obj.magic c0 in - let b0 : 'tv_nest_start = Obj.magic b0 in - let w0 : 'tv_list_whenppdecs_ = Obj.magic w0 in - let a0 : ( -# 73 "parser_cocci_menhir.mly" +# 35932 "parser_cocci_menhir.ml" + ) = Obj.magic r00 in + let d00 : 'tv_struct_decl_list = Obj.magic d00 in + let l00 : ( +# 101 "parser_cocci_menhir.mly" (Data.clt) -# 28788 "parser_cocci_menhir.ml" - ) = Obj.magic a0 in - let _startpos = _startpos_a0_ in - let _endpos = _endpos_c0_ in - let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = let a = - let c = c0 in - let b = b0 in - let w = w0 in - let a = a0 in +# 35938 "parser_cocci_menhir.ml" + ) = Obj.magic l00 in + let x000 : 'tv_ident = Obj.magic x000 in + let s00 : 'tv_struct_or_union = Obj.magic s00 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let r0 = r00 in + let d0 = d00 in + let l0 = l00 in + let x00 = x000 in + let s0 = s00 in + let ty = + let r = r0 in + let d = d0 in + let l = l0 in + let x0 = x00 in + let s = s0 in + let i = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 35962 "parser_cocci_menhir.ml" + + in + +# 506 "parser_cocci_menhir.mly" + ( (if i = None && !Data.in_iso + then failwith "structures must be named in the iso file"); + Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)), + P.clt2mcode "{" l, + d, P.clt2mcode "}" r)) ) +# 35972 "parser_cocci_menhir.ml" + + in -# 903 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<..." a, b, - P.clt2mcode "...>" c, List.concat w, false)) ) -# 28801 "parser_cocci_menhir.ml" +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 35978 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 35986 "parser_cocci_menhir.ml" in -# 1621 "parser_cocci_menhir.mly" - ( [a] ) -# 28807 "parser_cocci_menhir.ml" +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 35992 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28815,57 +36000,93 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = c0; - MenhirLib.EngineTypes.startp = _startpos_c0_; - MenhirLib.EngineTypes.endp = _endpos_c0_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = b0; - MenhirLib.EngineTypes.startp = _startpos_b0_; - MenhirLib.EngineTypes.endp = _endpos_b0_; + MenhirLib.EngineTypes.semv = r00; + MenhirLib.EngineTypes.startp = _startpos_r00_; + MenhirLib.EngineTypes.endp = _endpos_r00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.semv = w0; - MenhirLib.EngineTypes.startp = _startpos_w0_; - MenhirLib.EngineTypes.endp = _endpos_w0_; + MenhirLib.EngineTypes.semv = d00; + MenhirLib.EngineTypes.startp = _startpos_d00_; + MenhirLib.EngineTypes.endp = _endpos_d00_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = a0; - MenhirLib.EngineTypes.startp = _startpos_a0_; - MenhirLib.EngineTypes.endp = _endpos_a0_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = l00; + MenhirLib.EngineTypes.startp = _startpos_l00_; + MenhirLib.EngineTypes.endp = _endpos_l00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.semv = s00; + MenhirLib.EngineTypes.startp = _startpos_s00_; + MenhirLib.EngineTypes.endp = _endpos_s00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; }; } = _menhir_stack in - let c0 : ( -# 73 "parser_cocci_menhir.mly" + let m : 'tv_list_TMul_ = Obj.magic m in + let r00 : ( +# 101 "parser_cocci_menhir.mly" (Data.clt) -# 28843 "parser_cocci_menhir.ml" - ) = Obj.magic c0 in - let b0 : 'tv_nest_start = Obj.magic b0 in - let w0 : 'tv_list_whenppdecs_ = Obj.magic w0 in - let a0 : ( -# 73 "parser_cocci_menhir.mly" +# 36039 "parser_cocci_menhir.ml" + ) = Obj.magic r00 in + let d00 : 'tv_struct_decl_list = Obj.magic d00 in + let l00 : ( +# 101 "parser_cocci_menhir.mly" (Data.clt) -# 28850 "parser_cocci_menhir.ml" - ) = Obj.magic a0 in - let _startpos = _startpos_a0_ in - let _endpos = _endpos_c0_ in - let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = let a = - let c = c0 in - let b = b0 in - let w = w0 in - let a = a0 in +# 36045 "parser_cocci_menhir.ml" + ) = Obj.magic l00 in + let s00 : ( +# 64 "parser_cocci_menhir.mly" + (Parse_aux.info) +# 36050 "parser_cocci_menhir.ml" + ) = Obj.magic s00 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let r0 = r00 in + let d0 = d00 in + let l0 = l00 in + let s0 = s00 in + let ty = + let r = r0 in + let d = d0 in + let l = l0 in + let s = s0 in + +# 512 "parser_cocci_menhir.mly" + ( let (nm,pure,clt) = s in + let ty = Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) in + Ast0.wrap(Ast0.StructUnionDef(ty,P.clt2mcode "{" l,d,P.clt2mcode "}" r)) ) +# 36070 "parser_cocci_menhir.ml" + + in -# 906 "parser_cocci_menhir.mly" - ( Ast0.wrap(Ast0.Nest(P.clt2mcode "<+..." a, b, - P.clt2mcode "...+>" c, List.concat w, true)) ) -# 28863 "parser_cocci_menhir.ml" +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 36076 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 36084 "parser_cocci_menhir.ml" in -# 1621 "parser_cocci_menhir.mly" - ( [a] ) -# 28869 "parser_cocci_menhir.ml" +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 36090 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28877,25 +36098,59 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = m; + MenhirLib.EngineTypes.startp = _startpos_m_; + MenhirLib.EngineTypes.endp = _endpos_m_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = p00; + MenhirLib.EngineTypes.startp = _startpos_p00_; + MenhirLib.EngineTypes.endp = _endpos_p00_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x0; + MenhirLib.EngineTypes.startp = _startpos_x0_; + MenhirLib.EngineTypes.endp = _endpos_x0_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let _2 : 'tv_toplevel_after_exp = Obj.magic _2 in - let _1 : 'tv_expr = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = -# 1622 "parser_cocci_menhir.mly" - ( (Ast0.wrap(Ast0.Exp(_1)))::_2 ) -# 28899 "parser_cocci_menhir.ml" + let m : 'tv_list_TMul_ = Obj.magic m in + let p00 : ( +# 59 "parser_cocci_menhir.mly" + (string * Data.clt) +# 36122 "parser_cocci_menhir.ml" + ) = Obj.magic p00 in + let x0 : 'tv_const_vol = Obj.magic x0 in + let _startpos = _startpos_x0_ in + let _endpos = _endpos_m_ in + let _v : 'tv_typedef_ctype = let ty = + let p0 = p00 in + let ty = + let p = p0 in + +# 516 "parser_cocci_menhir.mly" + ( Ast0.wrap(Ast0.TypeName(P.id2mcode p)) ) +# 36134 "parser_cocci_menhir.ml" + + in + +# 525 "parser_cocci_menhir.mly" + ( ty ) +# 36140 "parser_cocci_menhir.ml" + + in + let cv = + let x = x0 in + +# 41 "standard.mly" + ( Some x ) +# 36148 "parser_cocci_menhir.ml" + + in + +# 542 "parser_cocci_menhir.mly" + ( P.pointerify (P.make_cv cv ty) m ) +# 36154 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28907,25 +36162,41 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = rp; + MenhirLib.EngineTypes.startp = _startpos_rp_; + MenhirLib.EngineTypes.endp = _endpos_rp_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.semv = t; + MenhirLib.EngineTypes.startp = _startpos_t_; + MenhirLib.EngineTypes.endp = _endpos_t_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = lp; + MenhirLib.EngineTypes.startp = _startpos_lp_; + MenhirLib.EngineTypes.endp = _endpos_lp_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let _2 : 'tv_toplevel_after_stm = Obj.magic _2 in - let _1 : 'tv_decl_statement_expr = Obj.magic _1 in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : 'tv_toplevel_seq_startne_toplevel_after_dots_init_ = -# 1623 "parser_cocci_menhir.mly" - ( _1@_2 ) -# 28929 "parser_cocci_menhir.ml" + let rp : ( +# 77 "parser_cocci_menhir.mly" + (Data.clt) +# 36185 "parser_cocci_menhir.ml" + ) = Obj.magic rp in + let t : 'tv_midzero_list_ctype_ctype_ = Obj.magic t in + let lp : ( +# 76 "parser_cocci_menhir.mly" + (Data.clt) +# 36191 "parser_cocci_menhir.ml" + ) = Obj.magic lp in + let _startpos = _startpos_lp_ in + let _endpos = _endpos_rp_ in + let _v : 'tv_typedef_ctype = +# 544 "parser_cocci_menhir.mly" + ( let (mids,code) = t in + Ast0.wrap + (Ast0.DisjType(P.clt2mcode "(" lp,code,mids, P.clt2mcode ")" rp)) ) +# 36200 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28947,9 +36218,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_typedef_ident = -# 1531 "parser_cocci_menhir.mly" +# 1538 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.TypeName(P.id2mcode _1)) ) -# 28953 "parser_cocci_menhir.ml" +# 36224 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -28970,15 +36241,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 64 "parser_cocci_menhir.mly" (Parse_aux.info) -# 28974 "parser_cocci_menhir.ml" +# 36245 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_typedef_ident = -# 1533 "parser_cocci_menhir.mly" +# 1540 "parser_cocci_menhir.mly" ( let (nm,pure,clt) = _1 in Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) ) -# 28982 "parser_cocci_menhir.ml" +# 36253 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29000,9 +36271,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unary_expr_eexpr_dot_expressions_ = -# 1299 "parser_cocci_menhir.mly" +# 1276 "parser_cocci_menhir.mly" ( _1 ) -# 29006 "parser_cocci_menhir.ml" +# 36277 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29029,14 +36300,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 85 "parser_cocci_menhir.mly" (Data.clt) -# 29033 "parser_cocci_menhir.ml" +# 36304 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_eexpr_dot_expressions_ = -# 1301 "parser_cocci_menhir.mly" +# 1278 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Inc _1)) ) -# 29040 "parser_cocci_menhir.ml" +# 36311 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29063,14 +36334,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 85 "parser_cocci_menhir.mly" (Data.clt) -# 29067 "parser_cocci_menhir.ml" +# 36338 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_eexpr_dot_expressions_ = -# 1303 "parser_cocci_menhir.mly" +# 1280 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Dec _1)) ) -# 29074 "parser_cocci_menhir.ml" +# 36345 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29098,9 +36369,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_eexpr_dot_expressions_ = -# 1305 "parser_cocci_menhir.mly" +# 1282 "parser_cocci_menhir.mly" ( let mcode = _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 29104 "parser_cocci_menhir.ml" +# 36375 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29127,15 +36398,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 29131 "parser_cocci_menhir.ml" +# 36402 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_eexpr_dot_expressions_ = -# 1307 "parser_cocci_menhir.mly" +# 1284 "parser_cocci_menhir.mly" ( let mcode = P.clt2mcode Ast.Not _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 29139 "parser_cocci_menhir.ml" +# 36410 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29162,14 +36433,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 58 "parser_cocci_menhir.mly" (Data.clt) -# 29166 "parser_cocci_menhir.ml" +# 36437 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_eexpr_dot_expressions_ = -# 1310 "parser_cocci_menhir.mly" +# 1287 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.SizeOfExpr (P.clt2mcode "sizeof" _1, _2)) ) -# 29173 "parser_cocci_menhir.ml" +# 36444 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29205,27 +36476,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rp : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 29209 "parser_cocci_menhir.ml" +# 36480 "parser_cocci_menhir.ml" ) = Obj.magic rp in let t : 'tv_ctype = Obj.magic t in let lp : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 29215 "parser_cocci_menhir.ml" +# 36486 "parser_cocci_menhir.ml" ) = Obj.magic lp in let s : ( # 58 "parser_cocci_menhir.mly" (Data.clt) -# 29220 "parser_cocci_menhir.ml" +# 36491 "parser_cocci_menhir.ml" ) = Obj.magic s in let _startpos = _startpos_s_ in let _endpos = _endpos_rp_ in let _v : 'tv_unary_expr_eexpr_dot_expressions_ = -# 1312 "parser_cocci_menhir.mly" +# 1289 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.SizeOfType (P.clt2mcode "sizeof" s, P.clt2mcode "(" lp,t, P.clt2mcode ")" rp)) ) -# 29229 "parser_cocci_menhir.ml" +# 36500 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29247,9 +36518,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unary_expr_eexpr_invalid_ = -# 1299 "parser_cocci_menhir.mly" +# 1276 "parser_cocci_menhir.mly" ( _1 ) -# 29253 "parser_cocci_menhir.ml" +# 36524 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29276,14 +36547,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 85 "parser_cocci_menhir.mly" (Data.clt) -# 29280 "parser_cocci_menhir.ml" +# 36551 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_eexpr_invalid_ = -# 1301 "parser_cocci_menhir.mly" +# 1278 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Inc _1)) ) -# 29287 "parser_cocci_menhir.ml" +# 36558 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29310,14 +36581,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 85 "parser_cocci_menhir.mly" (Data.clt) -# 29314 "parser_cocci_menhir.ml" +# 36585 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_eexpr_invalid_ = -# 1303 "parser_cocci_menhir.mly" +# 1280 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Dec _1)) ) -# 29321 "parser_cocci_menhir.ml" +# 36592 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29345,9 +36616,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_eexpr_invalid_ = -# 1305 "parser_cocci_menhir.mly" +# 1282 "parser_cocci_menhir.mly" ( let mcode = _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 29351 "parser_cocci_menhir.ml" +# 36622 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29374,15 +36645,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 29378 "parser_cocci_menhir.ml" +# 36649 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_eexpr_invalid_ = -# 1307 "parser_cocci_menhir.mly" +# 1284 "parser_cocci_menhir.mly" ( let mcode = P.clt2mcode Ast.Not _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 29386 "parser_cocci_menhir.ml" +# 36657 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29409,14 +36680,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 58 "parser_cocci_menhir.mly" (Data.clt) -# 29413 "parser_cocci_menhir.ml" +# 36684 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_eexpr_invalid_ = -# 1310 "parser_cocci_menhir.mly" +# 1287 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.SizeOfExpr (P.clt2mcode "sizeof" _1, _2)) ) -# 29420 "parser_cocci_menhir.ml" +# 36691 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29452,27 +36723,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rp : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 29456 "parser_cocci_menhir.ml" +# 36727 "parser_cocci_menhir.ml" ) = Obj.magic rp in let t : 'tv_ctype = Obj.magic t in let lp : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 29462 "parser_cocci_menhir.ml" +# 36733 "parser_cocci_menhir.ml" ) = Obj.magic lp in let s : ( # 58 "parser_cocci_menhir.mly" (Data.clt) -# 29467 "parser_cocci_menhir.ml" +# 36738 "parser_cocci_menhir.ml" ) = Obj.magic s in let _startpos = _startpos_s_ in let _endpos = _endpos_rp_ in let _v : 'tv_unary_expr_eexpr_invalid_ = -# 1312 "parser_cocci_menhir.mly" +# 1289 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.SizeOfType (P.clt2mcode "sizeof" s, P.clt2mcode "(" lp,t, P.clt2mcode ")" rp)) ) -# 29476 "parser_cocci_menhir.ml" +# 36747 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29494,9 +36765,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unary_expr_eexpr_nest_expressions_ = -# 1299 "parser_cocci_menhir.mly" +# 1276 "parser_cocci_menhir.mly" ( _1 ) -# 29500 "parser_cocci_menhir.ml" +# 36771 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29523,14 +36794,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 85 "parser_cocci_menhir.mly" (Data.clt) -# 29527 "parser_cocci_menhir.ml" +# 36798 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_eexpr_nest_expressions_ = -# 1301 "parser_cocci_menhir.mly" +# 1278 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Inc _1)) ) -# 29534 "parser_cocci_menhir.ml" +# 36805 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29557,14 +36828,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 85 "parser_cocci_menhir.mly" (Data.clt) -# 29561 "parser_cocci_menhir.ml" +# 36832 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_eexpr_nest_expressions_ = -# 1303 "parser_cocci_menhir.mly" +# 1280 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Dec _1)) ) -# 29568 "parser_cocci_menhir.ml" +# 36839 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29592,9 +36863,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_eexpr_nest_expressions_ = -# 1305 "parser_cocci_menhir.mly" +# 1282 "parser_cocci_menhir.mly" ( let mcode = _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 29598 "parser_cocci_menhir.ml" +# 36869 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29621,15 +36892,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 29625 "parser_cocci_menhir.ml" +# 36896 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_eexpr_nest_expressions_ = -# 1307 "parser_cocci_menhir.mly" +# 1284 "parser_cocci_menhir.mly" ( let mcode = P.clt2mcode Ast.Not _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 29633 "parser_cocci_menhir.ml" +# 36904 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29656,14 +36927,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 58 "parser_cocci_menhir.mly" (Data.clt) -# 29660 "parser_cocci_menhir.ml" +# 36931 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_eexpr_nest_expressions_ = -# 1310 "parser_cocci_menhir.mly" +# 1287 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.SizeOfExpr (P.clt2mcode "sizeof" _1, _2)) ) -# 29667 "parser_cocci_menhir.ml" +# 36938 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29699,27 +36970,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rp : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 29703 "parser_cocci_menhir.ml" +# 36974 "parser_cocci_menhir.ml" ) = Obj.magic rp in let t : 'tv_ctype = Obj.magic t in let lp : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 29709 "parser_cocci_menhir.ml" +# 36980 "parser_cocci_menhir.ml" ) = Obj.magic lp in let s : ( # 58 "parser_cocci_menhir.mly" (Data.clt) -# 29714 "parser_cocci_menhir.ml" +# 36985 "parser_cocci_menhir.ml" ) = Obj.magic s in let _startpos = _startpos_s_ in let _endpos = _endpos_rp_ in let _v : 'tv_unary_expr_eexpr_nest_expressions_ = -# 1312 "parser_cocci_menhir.mly" +# 1289 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.SizeOfType (P.clt2mcode "sizeof" s, P.clt2mcode "(" lp,t, P.clt2mcode ")" rp)) ) -# 29723 "parser_cocci_menhir.ml" +# 36994 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29741,9 +37012,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unary_expr_expr_invalid_ = -# 1299 "parser_cocci_menhir.mly" +# 1276 "parser_cocci_menhir.mly" ( _1 ) -# 29747 "parser_cocci_menhir.ml" +# 37018 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29770,14 +37041,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 85 "parser_cocci_menhir.mly" (Data.clt) -# 29774 "parser_cocci_menhir.ml" +# 37045 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_expr_invalid_ = -# 1301 "parser_cocci_menhir.mly" +# 1278 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Inc _1)) ) -# 29781 "parser_cocci_menhir.ml" +# 37052 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29804,14 +37075,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 85 "parser_cocci_menhir.mly" (Data.clt) -# 29808 "parser_cocci_menhir.ml" +# 37079 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_expr_invalid_ = -# 1303 "parser_cocci_menhir.mly" +# 1280 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.Infix (_2, P.clt2mcode Ast.Dec _1)) ) -# 29815 "parser_cocci_menhir.ml" +# 37086 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29839,9 +37110,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_expr_invalid_ = -# 1305 "parser_cocci_menhir.mly" +# 1282 "parser_cocci_menhir.mly" ( let mcode = _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 29845 "parser_cocci_menhir.ml" +# 37116 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29868,15 +37139,15 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 29872 "parser_cocci_menhir.ml" +# 37143 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_expr_invalid_ = -# 1307 "parser_cocci_menhir.mly" +# 1284 "parser_cocci_menhir.mly" ( let mcode = P.clt2mcode Ast.Not _1 in Ast0.wrap(Ast0.Unary(_2, mcode)) ) -# 29880 "parser_cocci_menhir.ml" +# 37151 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29903,14 +37174,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 58 "parser_cocci_menhir.mly" (Data.clt) -# 29907 "parser_cocci_menhir.ml" +# 37178 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_unary_expr_expr_invalid_ = -# 1310 "parser_cocci_menhir.mly" +# 1287 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.SizeOfExpr (P.clt2mcode "sizeof" _1, _2)) ) -# 29914 "parser_cocci_menhir.ml" +# 37185 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29946,27 +37217,27 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rp : ( # 77 "parser_cocci_menhir.mly" (Data.clt) -# 29950 "parser_cocci_menhir.ml" +# 37221 "parser_cocci_menhir.ml" ) = Obj.magic rp in let t : 'tv_ctype = Obj.magic t in let lp : ( # 76 "parser_cocci_menhir.mly" (Data.clt) -# 29956 "parser_cocci_menhir.ml" +# 37227 "parser_cocci_menhir.ml" ) = Obj.magic lp in let s : ( # 58 "parser_cocci_menhir.mly" (Data.clt) -# 29961 "parser_cocci_menhir.ml" +# 37232 "parser_cocci_menhir.ml" ) = Obj.magic s in let _startpos = _startpos_s_ in let _endpos = _endpos_rp_ in let _v : 'tv_unary_expr_expr_invalid_ = -# 1312 "parser_cocci_menhir.mly" +# 1289 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.SizeOfType (P.clt2mcode "sizeof" s, P.clt2mcode "(" lp,t, P.clt2mcode ")" rp)) ) -# 29970 "parser_cocci_menhir.ml" +# 37241 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -29987,14 +37258,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 93 "parser_cocci_menhir.mly" (Data.clt) -# 29991 "parser_cocci_menhir.ml" +# 37262 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unary_op = -# 1316 "parser_cocci_menhir.mly" +# 1293 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.GetRef _1 ) -# 29998 "parser_cocci_menhir.ml" +# 37269 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30015,14 +37286,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 99 "parser_cocci_menhir.mly" (Data.clt) -# 30019 "parser_cocci_menhir.ml" +# 37290 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unary_op = -# 1317 "parser_cocci_menhir.mly" +# 1294 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.DeRef _1 ) -# 30026 "parser_cocci_menhir.ml" +# 37297 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30043,14 +37314,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 98 "parser_cocci_menhir.mly" (Data.clt) -# 30047 "parser_cocci_menhir.ml" +# 37318 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unary_op = -# 1318 "parser_cocci_menhir.mly" +# 1295 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.UnPlus _1 ) -# 30054 "parser_cocci_menhir.ml" +# 37325 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30071,14 +37342,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 98 "parser_cocci_menhir.mly" (Data.clt) -# 30075 "parser_cocci_menhir.ml" +# 37346 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unary_op = -# 1319 "parser_cocci_menhir.mly" +# 1296 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.UnMinus _1 ) -# 30082 "parser_cocci_menhir.ml" +# 37353 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30099,14 +37370,14 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _1 : ( # 99 "parser_cocci_menhir.mly" (Data.clt) -# 30103 "parser_cocci_menhir.ml" +# 37374 "parser_cocci_menhir.ml" ) = Obj.magic _1 in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unary_op = -# 1320 "parser_cocci_menhir.mly" +# 1297 "parser_cocci_menhir.mly" ( P.clt2mcode Ast.Tilde _1 ) -# 30110 "parser_cocci_menhir.ml" +# 37381 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30134,9 +37405,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_when_start = -# 1745 "parser_cocci_menhir.mly" +# 1758 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.DOTS((Ast0.wrap(Ast0.Exp(_1)))::_2)) ) -# 30140 "parser_cocci_menhir.ml" +# 37411 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30164,9 +37435,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_when_start = -# 1747 "parser_cocci_menhir.mly" +# 1760 "parser_cocci_menhir.mly" ( Ast0.wrap(Ast0.DOTS(_1@_2)) ) -# 30170 "parser_cocci_menhir.ml" +# 37441 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30188,9 +37459,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos_w_ in let _endpos = _endpos_w_ in let _v : 'tv_whenppdecs = -# 910 "parser_cocci_menhir.mly" +# 887 "parser_cocci_menhir.mly" ( w ) -# 30194 "parser_cocci_menhir.ml" +# 37465 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30224,9 +37495,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_whens_when_start_rule_elem_statement_any_strict_ = -# 1813 "parser_cocci_menhir.mly" +# 1826 "parser_cocci_menhir.mly" ( [Ast0.WhenNot w] ) -# 30230 "parser_cocci_menhir.ml" +# 37501 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30260,9 +37531,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_whens_when_start_rule_elem_statement_any_strict_ = -# 1814 "parser_cocci_menhir.mly" +# 1827 "parser_cocci_menhir.mly" ( [Ast0.WhenAlways w] ) -# 30266 "parser_cocci_menhir.ml" +# 37537 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30292,9 +37563,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_whens_when_start_rule_elem_statement_any_strict_ = -# 1816 "parser_cocci_menhir.mly" +# 1829 "parser_cocci_menhir.mly" ( List.map (function x -> Ast0.WhenModifier(x)) _2 ) -# 30298 "parser_cocci_menhir.ml" +# 37569 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30328,9 +37599,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_whens_when_start_rule_elem_statement_any_strict_ = -# 1817 "parser_cocci_menhir.mly" +# 1830 "parser_cocci_menhir.mly" ( [Ast0.WhenNotTrue e] ) -# 30334 "parser_cocci_menhir.ml" +# 37605 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30364,9 +37635,9 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_whens_when_start_rule_elem_statement_any_strict_ = -# 1818 "parser_cocci_menhir.mly" +# 1831 "parser_cocci_menhir.mly" ( [Ast0.WhenNotFalse e] ) -# 30370 "parser_cocci_menhir.ml" +# 37641 "parser_cocci_menhir.ml" in _menhir_env.MenhirLib.EngineTypes.stack <- { MenhirLib.EngineTypes.state = _menhir_s; @@ -30387,106 +37658,106 @@ module MenhirInterpreter = MenhirLib.TableInterpreter.Make (struct let rec script_meta_main = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1549 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1777 lexer lexbuf) : ( # 159 "parser_cocci_menhir.mly" (string * (string * string)) -# 30394 "parser_cocci_menhir.ml" +# 37665 "parser_cocci_menhir.ml" )) and rule_name = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1477 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1707 lexer lexbuf) : ( # 153 "parser_cocci_menhir.mly" (Ast_cocci.rulename) -# 30402 "parser_cocci_menhir.ml" +# 37673 "parser_cocci_menhir.ml" )) and reinit = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1475 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1705 lexer lexbuf) : ( # 131 "parser_cocci_menhir.mly" (unit) -# 30410 "parser_cocci_menhir.ml" +# 37681 "parser_cocci_menhir.ml" )) and plus_main = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1439 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1669 lexer lexbuf) : ( # 140 "parser_cocci_menhir.mly" (Ast0_cocci.rule) -# 30418 "parser_cocci_menhir.ml" +# 37689 "parser_cocci_menhir.ml" )) and plus_exp_main = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1430 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1661 lexer lexbuf) : ( # 143 "parser_cocci_menhir.mly" (Ast0_cocci.rule) -# 30426 "parser_cocci_menhir.ml" +# 37697 "parser_cocci_menhir.ml" )) and never_used = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1424 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1655 lexer lexbuf) : ( # 168 "parser_cocci_menhir.mly" (unit) -# 30434 "parser_cocci_menhir.ml" +# 37705 "parser_cocci_menhir.ml" )) and minus_main = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1338 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1575 lexer lexbuf) : ( # 134 "parser_cocci_menhir.mly" (Ast0_cocci.rule) -# 30442 "parser_cocci_menhir.ml" +# 37713 "parser_cocci_menhir.ml" )) and minus_exp_main = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1314 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1563 lexer lexbuf) : ( # 137 "parser_cocci_menhir.mly" (Ast0_cocci.rule) -# 30450 "parser_cocci_menhir.ml" +# 37721 "parser_cocci_menhir.ml" )) and meta_main = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1311 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1560 lexer lexbuf) : ( # 157 "parser_cocci_menhir.mly" ((Ast_cocci.metavar,Ast_cocci.metavar) Common.either list) -# 30458 "parser_cocci_menhir.ml" +# 37729 "parser_cocci_menhir.ml" )) and iso_rule_name = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1307 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1556 lexer lexbuf) : ( # 149 "parser_cocci_menhir.mly" (Ast_cocci.rulename) -# 30466 "parser_cocci_menhir.ml" +# 37737 "parser_cocci_menhir.ml" )) and iso_meta_main = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1104 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 1325 lexer lexbuf) : ( # 165 "parser_cocci_menhir.mly" ((Ast_cocci.metavar,Ast_cocci.metavar) Common.either list) -# 30474 "parser_cocci_menhir.ml" +# 37745 "parser_cocci_menhir.ml" )) and iso_main = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 10 lexer lexbuf) : ( + (Obj.magic (MenhirInterpreter.entry 11 lexer lexbuf) : ( # 162 "parser_cocci_menhir.mly" (Ast0_cocci.anything list list) -# 30482 "parser_cocci_menhir.ml" +# 37753 "parser_cocci_menhir.ml" )) and include_main = fun lexer lexbuf -> (Obj.magic (MenhirInterpreter.entry 0 lexer lexbuf) : ( # 146 "parser_cocci_menhir.mly" - ((string,string) Common.either list) -# 30490 "parser_cocci_menhir.ml" + (Data.incl_iso list) +# 37761 "parser_cocci_menhir.ml" )) diff --git a/parsing_cocci/parser_cocci_menhir.mli b/parsing_cocci/parser_cocci_menhir.mli index 2aef9fb..4564263 100644 --- a/parsing_cocci/parser_cocci_menhir.mli +++ b/parsing_cocci/parser_cocci_menhir.mli @@ -46,7 +46,6 @@ type token = | TScript | TRuleName of (string) | TRightIso - | TReverse | TReturn of (Data.clt) | TPure | TPtrOp of (Data.clt) @@ -152,6 +151,7 @@ type token = | TDeclarerId of (string * Data.clt) | TDeclarer | TDec of (Data.clt) + | TCppConcatOp | TContinue of (Data.clt) | TContext | TConstant @@ -187,4 +187,4 @@ val meta_main: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> ((Ast_cocci.metavar, val iso_rule_name: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Ast_cocci.rulename) val iso_meta_main: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> ((Ast_cocci.metavar,Ast_cocci.metavar) Common.either list) val iso_main: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Ast0_cocci.anything list list) -val include_main: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> ((string,string) Common.either list) \ No newline at end of file +val include_main: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Data.incl_iso list) \ No newline at end of file diff --git a/parsing_cocci/parser_cocci_menhir.mly b/parsing_cocci/parser_cocci_menhir.mly index 23c1c1e..b475b45 100644 --- a/parsing_cocci/parser_cocci_menhir.mly +++ b/parsing_cocci/parser_cocci_menhir.mly @@ -43,7 +43,7 @@ module P = Parse_aux %token TPure TContext TGenerated %token TTypedef TDeclarer TIterator TName TPosition TPosAny %token TUsing TDisable TExtends TDepends TOn TEver TNever TExists TForall -%token TScript TInitialize TFinalize TReverse TNothing +%token TScript TInitialize TFinalize TNothing %token TRuleName %token Tchar Tshort Tint Tdouble Tfloat Tlong @@ -103,7 +103,7 @@ module P = Parse_aux %token TPtrOp -%token TMPtVirg +%token TMPtVirg TCppConcatOp %token TEq TDot TComma TPtVirg %token TAssign @@ -143,7 +143,7 @@ module P = Parse_aux %type plus_exp_main %start include_main -%type <(string,string) Common.either list> include_main +%type include_main %start iso_rule_name %type @@ -242,7 +242,6 @@ disable: exists: TExists { Ast.Exists } | TForall { Ast.Forall } -| TReverse TForall { Ast.ReverseForall } | { Ast.Undetermined } is_expression: // for more flexible parsing of top level expressions @@ -254,8 +253,9 @@ include_main: | list(incl) TArobArob { $1 } incl: - TUsing TString { Common.Left(P.id2name $2) } -| TUsing TPathIsoFile { Common.Right $2 } + TIncludeL { let (x,_) = $1 in Data.Include(x) } +| TUsing TString { Data.Iso(Common.Left(P.id2name $2)) } +| TUsing TPathIsoFile { Data.Iso(Common.Right $2) } metadec: ar=arity ispure=pure @@ -449,7 +449,7 @@ metadec: meta_exp_type: - t=ctype + t=typedef_ctype { [Ast0_cocci.ast0_type_to_type t] } | TOBrace t=comma_list(ctype) TCBrace m=list(TMul) { List.map @@ -461,57 +461,91 @@ arity: TBang0 { Ast.UNIQUE } | TPlus0 { Ast.MULTI } | /* empty */ { Ast.NONE } -generic_ctype_full: - q=ctype_qualif_opt ty=Tchar - { q (Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty]))) } - | q=ctype_qualif_opt ty=Tshort - { q (Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])))} - | q=ctype_qualif_opt ty=Tint - { q (Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty]))) } - | t=Tdouble - { Ast0.wrap(Ast0.BaseType(Ast.DoubleType,[P.clt2mcode "double" t])) } - | t=Tfloat - { Ast0.wrap(Ast0.BaseType(Ast.FloatType,[P.clt2mcode "float" t])) } - | q=ctype_qualif_opt ty=Tlong - { q (Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty]))) } - | q=ctype_qualif_opt ty=Tlong ty1=Tlong - { q (Ast0.wrap - (Ast0.BaseType - (Ast.LongLongType, - [P.clt2mcode "long" ty;P.clt2mcode "long" ty1]))) } - | s=Tenum i=ident - { Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)) } - | s=struct_or_union i=ident - { Ast0.wrap(Ast0.StructUnionName(s, Some i)) } - | s=struct_or_union i=ioption(ident) - l=TOBrace d=struct_decl_list r=TCBrace - { (if i = None && !Data.in_iso - then failwith "structures must be named in the iso file"); - Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)), - P.clt2mcode "{" l, - d, P.clt2mcode "}" r)) } - | s=TMetaType l=TOBrace d=struct_decl_list r=TCBrace - { let (nm,pure,clt) = s in - let ty = - Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) in - Ast0.wrap - (Ast0.StructUnionDef(ty,P.clt2mcode "{" l,d,P.clt2mcode "}" r)) } - | r=TRuleName TDot p=TIdent - { let nm = (r,P.id2name p) in - (* this is only possible when we are in a metavar decl. Otherwise, - it will be represented already as a MetaType *) - let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in - Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p), - Ast0.Impure (*will be ignored*))) } - | p=TTypeId - { Ast0.wrap(Ast0.TypeName(P.id2mcode p)) } - | q=ctype_qualif_opt p=TMetaType - { let (nm,pure,clt) = p in - q (Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure))) } - -generic_ctype: - q=ctype_qualif { q None } - | generic_ctype_full { $1 } +/* ---------------------------------------------------------------------- */ + +%inline +signable_types: + ty=Tchar + { Ast0.wrap(Ast0.BaseType(Ast.CharType,[P.clt2mcode "char" ty])) } +| ty=Tshort + { Ast0.wrap(Ast0.BaseType(Ast.ShortType,[P.clt2mcode "short" ty])) } +| ty=Tint + { Ast0.wrap(Ast0.BaseType(Ast.IntType,[P.clt2mcode "int" ty])) } +| p=TMetaType + { let (nm,pure,clt) = p in + Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) } +| r=TRuleName TDot p=TIdent + { let nm = (r,P.id2name p) in + (* this is only possible when we are in a metavar decl. Otherwise, + it will be represented already as a MetaType *) + let _ = P.check_meta(Ast.MetaTypeDecl(Ast.NONE,nm)) in + Ast0.wrap(Ast0.MetaType(P.clt2mcode nm (P.id2clt p), + Ast0.Impure (*will be ignored*))) } +| ty=Tlong + { Ast0.wrap(Ast0.BaseType(Ast.LongType,[P.clt2mcode "long" ty])) } +| ty1=Tlong ty2=Tlong + { Ast0.wrap + (Ast0.BaseType + (Ast.LongLongType, + [P.clt2mcode "long" ty1;P.clt2mcode "long" ty2])) } + +%inline +non_signable_types: + ty=Tvoid + { Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" ty])) } +| ty=Tdouble + { Ast0.wrap(Ast0.BaseType(Ast.DoubleType,[P.clt2mcode "double" ty])) } +| ty=Tfloat + { Ast0.wrap(Ast0.BaseType(Ast.FloatType,[P.clt2mcode "float" ty])) } +| s=Tenum i=ident + { Ast0.wrap(Ast0.EnumName(P.clt2mcode "enum" s, i)) } +| s=struct_or_union i=ident + { Ast0.wrap(Ast0.StructUnionName(s, Some i)) } +| s=struct_or_union i=ioption(ident) + l=TOBrace d=struct_decl_list r=TCBrace + { (if i = None && !Data.in_iso + then failwith "structures must be named in the iso file"); + Ast0.wrap(Ast0.StructUnionDef(Ast0.wrap(Ast0.StructUnionName(s, i)), + P.clt2mcode "{" l, + d, P.clt2mcode "}" r)) } +| s=TMetaType l=TOBrace d=struct_decl_list r=TCBrace + { let (nm,pure,clt) = s in + let ty = Ast0.wrap(Ast0.MetaType(P.clt2mcode nm clt,pure)) in + Ast0.wrap(Ast0.StructUnionDef(ty,P.clt2mcode "{" l,d,P.clt2mcode "}" r)) } +| p=TTypeId + { Ast0.wrap(Ast0.TypeName(P.id2mcode p)) } + +%inline +all_basic_types: + r=Tsigned ty=signable_types + { Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,Some ty)) } +| r=Tunsigned ty=signable_types + { Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,Some ty)) } +| ty=signable_types { ty } +| ty=non_signable_types { ty } + +ctype: + cv=ioption(const_vol) ty=all_basic_types m=list(TMul) + { P.pointerify (P.make_cv cv ty) m } +| r=Tsigned + { Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,None)) } +| r=Tunsigned + { Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,None)) } +| lp=TOPar0 t=midzero_list(ctype,ctype) rp=TCPar0 + { let (mids,code) = t in + Ast0.wrap + (Ast0.DisjType(P.clt2mcode "(" lp,code,mids, P.clt2mcode ")" rp)) } + +/* signed, unsigned alone not allowed */ +typedef_ctype: + cv=ioption(const_vol) ty=all_basic_types m=list(TMul) + { P.pointerify (P.make_cv cv ty) m } +| lp=TOPar0 t=midzero_list(ctype,ctype) rp=TCPar0 + { let (mids,code) = t in + Ast0.wrap + (Ast0.DisjType(P.clt2mcode "(" lp,code,mids, P.clt2mcode ")" rp)) } + +/* ---------------------------------------------------------------------- */ struct_or_union: s=Tstruct { P.clt2mcode Ast.Struct s } @@ -522,7 +556,7 @@ struct_decl: | t=ctype d=d_ident pv=TPtVirg { let (id,fn) = d in [Ast0.wrap(Ast0.UnInit(None,fn t,id,P.clt2mcode ";" pv))] } - | t=fn_ctype lp1=TOPar st=TMul d=d_ident rp1=TCPar + | t=ctype lp1=TOPar st=TMul d=d_ident rp1=TCPar lp2=TOPar p=decl_list(name_opt_decl) rp2=TCPar pv=TPtVirg { let (id,fn) = d in let t = @@ -550,49 +584,6 @@ continue_struct_decl_list: | struct_decl struct_decl_list_start { $1@$2 } | struct_decl { $1 } -ctype: - cv=ioption(const_vol) ty=generic_ctype m=list(TMul) - { P.pointerify (P.make_cv cv ty) m } - | cv=ioption(const_vol) t=Tvoid m=nonempty_list(TMul) - { let ty = - Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" t])) in - P.pointerify (P.make_cv cv ty) m } - | lp=TOPar0 t=midzero_list(ctype,ctype) rp=TCPar0 - /* more hacks */ - { let (mids,code) = t in - Ast0.wrap - (Ast0.DisjType(P.clt2mcode "(" lp,code,mids, P.clt2mcode ")" rp)) } - -ctype_full: - cv=ioption(const_vol) ty=generic_ctype_full m=list(TMul) - { P.pointerify (P.make_cv cv ty) m } - | cv=ioption(const_vol) t=Tvoid m=nonempty_list(TMul) - { let ty = - Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" t])) in - P.pointerify (P.make_cv cv ty) m } - | lp=TOPar0 t=midzero_list(ctype,ctype) rp=TCPar0 - /* more hacks */ - { let (mids,code) = t in - Ast0.wrap - (Ast0.DisjType(P.clt2mcode "(" lp,code,mids, P.clt2mcode ")" rp)) } - - -fn_ctype: // allows metavariables - ty=generic_ctype m=list(TMul) { P.pointerify ty m } - | t=Tvoid m=list(TMul) - { P.pointerify - (Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" t]))) - m } - -%inline ctype_qualif: - r=Tunsigned - { function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Unsigned r,x)) } -| r=Tsigned - { function x -> Ast0.wrap(Ast0.Signed(P.clt2mcode Ast.Signed r,x)) } - -%inline ctype_qualif_opt: - s=ctype_qualif { function x -> s (Some x) } -| /* empty */ { function x -> x } /*****************************************************************************/ @@ -602,30 +593,30 @@ declarations, statements, and expressions for the subterms */ minus_body: f=loption(filespec) b=loption(minus_start) - ew=loption(error_words) - { match f@b@ew with + /*ew=loption(error_words)*/ + { match f@b(*@ew*) with [] -> raise (Semantic_cocci.Semantic "minus slice can't be empty") | code -> Top_level.top_level code } plus_body: f=loption(filespec) b=loption(plus_start) - ew=loption(error_words) - { Top_level.top_level (f@b@ew) } + /*ew=loption(error_words)*/ + { Top_level.top_level (f@b(*@ew*)) } minus_exp_body: f=loption(filespec) b=top_eexpr - ew=loption(error_words) - { match f@[b]@ew with + /*ew=loption(error_words)*/ + { match f@[b](*@ew*) with [] -> raise (Semantic_cocci.Semantic "minus slice can't be empty") | code -> Top_level.top_level code } plus_exp_body: f=loption(filespec) b=top_eexpr - ew=loption(error_words) - { Top_level.top_level (f@[b]@ew) } + /*ew=loption(error_words)*/ + { Top_level.top_level (f@[b](*@ew*)) } filespec: TMinusFile TPlusFile @@ -750,23 +741,13 @@ funproto: (Ast0.FunctionType(Some t, P.clt2mcode "(" lp, d, P.clt2mcode ")" rp)), id, P.clt2mcode ";" pt)) } -| s=ioption(storage) t=Tvoid - id=func_ident lp=TOPar d=decl_list(name_opt_decl) rp=TCPar pt=TPtVirg - { let t = Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" t])) in - Ast0.wrap - (Ast0.UnInit - (s, - Ast0.wrap - (Ast0.FunctionType(Some t, - P.clt2mcode "(" lp, d, P.clt2mcode ")" rp)), - id, P.clt2mcode ";" pt)) } - fundecl: f=fninfo TFunDecl i=func_ident lp=TOPar d=decl_list(decl) rp=TCPar lb=TOBrace b=fun_start rb=TCBrace - { Ast0.wrap(Ast0.FunDecl((Ast0.default_info(),Ast0.context_befaft()), + { P.verify_parameter_declarations (Ast0.undots d); + Ast0.wrap(Ast0.FunDecl((Ast0.default_info(),Ast0.context_befaft()), f, i, P.clt2mcode "(" lp, d, P.clt2mcode ")" rp, @@ -781,7 +762,7 @@ fninfo: List.find (function Ast0.FStorage(_) -> true | _ -> false) $2 in raise (Semantic_cocci.Semantic "duplicate storage") with Not_found -> (Ast0.FStorage($1))::$2 } - | t=fn_ctype r=fninfo_nt { (Ast0.FType(t))::r } + | t=ctype r=fninfo_nt { (Ast0.FType(t))::r } | Tinline fninfo { try let _ = List.find (function Ast0.FInline(_) -> true | _ -> false) $2 in @@ -820,7 +801,8 @@ storage: decl: t=ctype i=ident { Ast0.wrap(Ast0.Param(t, Some i)) } - | t=fn_ctype lp=TOPar s=TMul i=ident rp=TCPar + | t=ctype { (*verify in FunDecl*) Ast0.wrap(Ast0.Param(t, None)) } + | t=ctype lp=TOPar s=TMul i=ident rp=TCPar lp1=TOPar d=decl_list(name_opt_decl) rp1=TCPar { let fnptr = Ast0.wrap @@ -828,18 +810,13 @@ decl: t=ctype i=ident (t,P.clt2mcode "(" lp,P.clt2mcode "*" s,P.clt2mcode ")" rp, P.clt2mcode "(" lp1,d,P.clt2mcode ")" rp1)) in Ast0.wrap(Ast0.Param(fnptr, Some i)) } - | t=Tvoid - { let ty = - Ast0.wrap(Ast0.BaseType(Ast.VoidType,[P.clt2mcode "void" t])) in - Ast0.wrap(Ast0.VoidParam(ty)) } | TMetaParam { let (nm,pure,clt) = $1 in Ast0.wrap(Ast0.MetaParam(P.clt2mcode nm clt,pure)) } name_opt_decl: decl { $1 } - | t=ctype { Ast0.wrap(Ast0.Param(t, None)) } - | t=fn_ctype lp=TOPar s=TMul rp=TCPar + | t=ctype lp=TOPar s=TMul rp=TCPar lp1=TOPar d=decl_list(name_opt_decl) rp1=TCPar { let fnptr = Ast0.wrap @@ -978,7 +955,7 @@ decl_var: P.clt2mcode ";" pv))] } /* function pointer type */ | s=ioption(storage) - t=fn_ctype lp1=TOPar st=TMul d=d_ident rp1=TCPar + t=ctype lp1=TOPar st=TMul d=d_ident rp1=TCPar lp2=TOPar p=decl_list(name_opt_decl) rp2=TCPar pv=TPtVirg { let (id,fn) = d in @@ -992,7 +969,7 @@ decl_var: { [Ast0.wrap(Ast0.MacroDecl($1,P.clt2mcode "(" $2,$3, P.clt2mcode ")" $4,P.clt2mcode ";" $5))] } | s=ioption(storage) - t=fn_ctype lp1=TOPar st=TMul d=d_ident rp1=TCPar + t=ctype lp1=TOPar st=TMul d=d_ident rp1=TCPar lp2=TOPar p=decl_list(name_opt_decl) rp2=TCPar q=TEq e=initialize pv=TPtVirg { let (id,fn) = d in @@ -1002,7 +979,7 @@ decl_var: (t,P.clt2mcode "(" lp1,P.clt2mcode "*" st,P.clt2mcode ")" rp1, P.clt2mcode "(" lp2,p,P.clt2mcode ")" rp2)) in [Ast0.wrap(Ast0.Init(s,fn t,id,P.clt2mcode "=" q,e,P.clt2mcode ";" pv))]} - | s=Ttypedef t=ctype_full id=typedef_ident pv=TPtVirg + | s=Ttypedef t=typedef_ctype id=typedef_ident pv=TPtVirg { let s = P.clt2mcode "typedef" s in [Ast0.wrap(Ast0.Typedef(s,t,id,P.clt2mcode ";" pv))] } @@ -1031,7 +1008,7 @@ one_decl_var: P.clt2mcode ";" pv)) } /* function pointer type */ | s=ioption(storage) - t=fn_ctype lp1=TOPar st=TMul d=d_ident rp1=TCPar + t=ctype lp1=TOPar st=TMul d=d_ident rp1=TCPar lp2=TOPar p=decl_list(name_opt_decl) rp2=TCPar pv=TPtVirg { let (id,fn) = d in @@ -1045,7 +1022,7 @@ one_decl_var: { Ast0.wrap(Ast0.MacroDecl($1,P.clt2mcode "(" $2,$3, P.clt2mcode ")" $4,P.clt2mcode ";" $5)) } | s=ioption(storage) - t=fn_ctype lp1=TOPar st=TMul d=d_ident rp1=TCPar + t=ctype lp1=TOPar st=TMul d=d_ident rp1=TCPar lp2=TOPar p=decl_list(name_opt_decl) rp2=TCPar q=TEq e=initialize pv=TPtVirg { let (id,fn) = d in @@ -1401,14 +1378,44 @@ meta_ident: pure_ident_or_meta_ident: pure_ident { (None,P.id2name $1) } | meta_ident { $1 } - | Tlist { (None,"list") } - | TError { (None,"error") } - | TType { (None,"type") } - | TName { (None,"name") } + | TIdentifier { (None, "identifier") } + | TExpression { (None, "expression") } + | TStatement { (None, "statement") } + | TFunction { (None, "function") } + | TLocal { (None, "local") } + | TType { (None, "type") } + | TParameter { (None, "parameter") } + | TIdExpression { (None, "idexpression") } + | TInitialiser { (None, "initialiser") } + | Tlist { (None, "list") } + | TFresh { (None, "fresh") } + | TConstant { (None, "constant") } + | TError { (None, "error") } + | TWords { (None, "words") } + | TPure { (None, "pure") } + | TContext { (None, "context") } + | TGenerated { (None, "generated") } + | TTypedef { (None, "typedef") } + | TDeclarer { (None, "declarer") } + | TIterator { (None, "iterator") } + | TName { (None, "name") } + | TPosition { (None, "position") } pure_ident_or_meta_ident_with_seed: - pure_ident_or_meta_ident { ($1,None) } - | pure_ident_or_meta_ident TEq s=TString { ($1,Some (P.id2name s)) } + pure_ident_or_meta_ident { ($1,Ast.NoVal) } + | pure_ident_or_meta_ident TEq + separated_nonempty_list(TCppConcatOp,seed_elem) + { match $3 with + [Ast.SeedString s] -> ($1,Ast.StringSeed s) + | _ -> ($1,Ast.ListSeed $3) } + +seed_elem: + TString { let (x,_) = $1 in Ast.SeedString x } +| TMetaId { let (x,_,_,_) = $1 in Ast.SeedId x } +| TRuleName TDot pure_ident + { let nm = ($1,P.id2name $3) in + P.check_meta(Ast.MetaIdDecl(Ast.NONE,nm)); + Ast.SeedId nm } pure_ident_or_meta_ident_with_not_eq(not_eq): i=pure_ident_or_meta_ident l=loption(not_eq) { (i,l) } @@ -1574,9 +1581,15 @@ comma_decls(dotter,decl): /* ---------------------------------------------------------------------- */ -error_words: +/* error words make it complicated to be able to use error as a metavariable +name or a type in a metavariable list; for that we would like to allow TError +as an ident, but that makes conflicts with this rule. To add back error words, +need to find some appropriate delimiter for it, but it has not been used much +so just drop it */ +/*error_words: TError TWords TEq TOCro cl=comma_list(dexpr) TCCro { [Ast0.wrap(Ast0.ERRORWORDS(cl))] } +*/ /* ---------------------------------------------------------------------- */ /* sequences of statements and expressions */ @@ -1823,11 +1836,6 @@ any_strict: | TForall { Ast.WhenForall } | TExists { Ast.WhenExists } -any_only: - TAny { Ast.WhenAny } - | TForall { Ast.WhenForall } - | TExists { Ast.WhenExists } - /***************************************************************************** * * diff --git a/parsing_cocci/single_statement.ml b/parsing_cocci/single_statement.ml index d418203..b3702e3 100644 --- a/parsing_cocci/single_statement.ml +++ b/parsing_cocci/single_statement.ml @@ -423,7 +423,7 @@ let add_braces orig_s = Ast0.MIXED(ref(new_text,tinfo1,tinfo2)) | _ -> failwith "unexpected plus code" in Ast0.set_mcodekind s new_mcodekind; - Compute_lines.statement s + Compute_lines.compute_statement_lines true s (* ---------------------------------------------------------------------- *) diff --git a/parsing_cocci/unparse_ast0.ml b/parsing_cocci/unparse_ast0.ml index 39c5b46..f557585 100644 --- a/parsing_cocci/unparse_ast0.ml +++ b/parsing_cocci/unparse_ast0.ml @@ -501,14 +501,14 @@ and statement arity s = | Ast0.PureContext -> print_string "pure_context")*) | Ast0.MetaStmtList(name,_) -> print_string arity; mcode print_meta name - | Ast0.Disj(_,statement_dots_list,_,_) -> + | Ast0.Disj(starter,statement_dots_list,_,ender) -> print_string arity; - print_string "\n("; force_newline(); + print_string "\n"; mcode print_string starter; force_newline(); print_between (function _ -> print_string "\n|"; force_newline()) (dots force_newline (statement arity)) statement_dots_list; - print_string "\n)" + print_string "\n"; mcode print_string ender | Ast0.Nest(starter,stmt_dots,ender,whn,multi) -> print_string arity; mcode print_string starter; diff --git a/python/no_pycocci_aux.ml b/python/no_pycocci_aux.ml index e9758ae..9d4ee97 100644 --- a/python/no_pycocci_aux.ml +++ b/python/no_pycocci_aux.ml @@ -54,7 +54,7 @@ let call_pretty f a = let str = ref ([] : string list) in let pr_elem info = str := (Ast_c.str_of_info info) :: !str in let pr_sp _ = () in - f pr_elem pr_sp a; + f ~pr_elem ~pr_space:pr_sp a; String.concat " " (List.rev !str) let stringrep mvb = match mvb with diff --git a/python/yes_pycocci_aux.ml b/python/yes_pycocci_aux.ml index 7d4a241..faa995b 100644 --- a/python/yes_pycocci_aux.ml +++ b/python/yes_pycocci_aux.ml @@ -28,7 +28,7 @@ let call_pretty f a = let str = ref ([] : string list) in let pr_elem info = str := (Ast_c.str_of_info info) :: !str in let pr_sp _ = () in - f pr_elem pr_sp a; + f ~pr_elem ~pr_space:pr_sp a; String.concat " " (List.rev !str) let exprrep = call_pretty Pretty_print_c.pp_expression_gen diff --git a/readme.txt b/readme.txt index d75d5fa..55809b3 100644 --- a/readme.txt +++ b/readme.txt @@ -18,17 +18,18 @@ For tcsh do: $ source env.csh +You can then test coccinelle with: + + $ spatch -sp_file demos/simple.cocci demos/simple.c -o /tmp/new_simple.c -You can then test coccinelle with: - $ spatch -sp_file demos/simple.cocci demos/simple.c If you downloaded the bytecode version of spatch you may first have to install OCaml (which contains the 'ocamlrun' bytecode interpreter, the equivalent of 'java', the Java virtual machine, but for OCaml) and then do: - $ ocamlrun spatch -sp_file demos/simple.cocci demos/simple.c + $ ocamlrun spatch -sp_file demos/simple.cocci demos/simple.c -o /tmp/new_simple.c diff --git a/standard.h b/standard.h index 42d5537..94a9192 100644 --- a/standard.h +++ b/standard.h @@ -72,11 +72,12 @@ // this is defined by windows compiler, and so can not be found via a macro // after a -extract_macros -#define __stdcall /*could: YACFE_ATTRIBUTE*/ -#define __declspec(a) +// update: now handled in lexer, simplify stuff +//#define __stdcall /*could: YACFE_ATTRIBUTE*/ +//#define __declspec(a) -#define WINAPI -#define CALLBACK +//#define WINAPI +//#define CALLBACK // **************************************************************************** @@ -172,8 +173,8 @@ // maybe only in old kernel #define __openfirmware - -#define __extension__ +// now in lexer +//#define __extension__ #define __thread #define __used @@ -357,7 +358,10 @@ #define __releases(x) #define __acquires(x) -#define __declspec(x) + +//now in lexer +//#define __declspec(x) + #define __page_aligned(x) #define __vsyscall(x) diff --git a/testing.ml b/testing.ml index b488d72..6ca4be7 100644 --- a/testing.ml +++ b/testing.ml @@ -127,6 +127,10 @@ let testall ?(expected_score_file="tests/SCORE_expected.sexp") () = let s = Str.global_replace (Str.regexp "\"/tmp/cocci-output.*\"") "" s in + (* on macos the temporary files are stored elsewhere *) + let s = Str.global_replace + (Str.regexp "\"/var/folders/.*/cocci-output.*\"") "" s + in let s = "INCORRECT:" ^ s ^ "\n" ^ " diff (result(<) vs expected_result(>)) = \n" ^ diff --git a/testing.mli b/testing.mli index bd0579a..aff5cc2 100644 --- a/testing.mli +++ b/testing.mli @@ -40,7 +40,12 @@ val sp_of_file : Ast_cocci.metavar list list * Ast_cocci.rule list * Ast_cocci.meta_name list list list * Ast_cocci.meta_name list list list * - Ast_cocci.meta_name list list list * Ast_cocci.meta_name list list list * + (Ast_cocci.meta_name list list list (*used after list*) * + (*fresh used after list*) + Ast_cocci.meta_name list list list * + (*fresh used after list seeds*) + Ast_cocci.meta_name list list list) * + Ast_cocci.meta_name list list list * string list list * string option diff --git a/tests/SCORE_expected.sexp b/tests/SCORE_expected.sexp index b1225a1..ffa1ba4 100644 --- a/tests/SCORE_expected.sexp +++ b/tests/SCORE_expected.sexp @@ -1,7 +1,8 @@ -((a3d.res Ok) (a_and_e.res Ok) (a_and_e_ver1.res Ok) (addelse.res Ok) - (addif.res Ok) (addif1.res Ok) (addif2.res Ok) (after_if.res Ok) - (anon.res Ok) (ar.res Ok) (arg.res Ok) (argument.res Ok) (array_init.res Ok) - (array_size.res Ok) (arraysz.res Ok) (b1.res Ok) (b2.res Ok) +((a.res Ok) (a3d.res Ok) (a_and_e.res Ok) (a_and_e_ver1.res Ok) + (addelse.res Ok) (addif.res Ok) (addif1.res Ok) (addif2.res Ok) + (after_if.res Ok) (anon.res Ok) (ar.res Ok) (arg.res Ok) (argument.res Ok) + (array_init.res Ok) (array_size.res Ok) (arraysz.res Ok) (b1.res Ok) + (b2.res Ok) (bad_iso_example.res (Pb "INCORRECT:diff token: ( VS x\nFile \"tests/bad_iso_example.c\", line 2, column 6, charpos = 19\n around = '(', whole content = if ((x = 3)) return;\nFile \"tests/bad_iso_example.res\", line 2, column 6, charpos = 19\n around = 'x', whole content = if (x) return;\n\n diff (result(<) vs expected_result(>)) = \n @@ -1,4 +1,4 @@\n int main() {\n - if ((x = 3)) return;\n + if (x) return;\n }\n \n")) @@ -36,7 +37,7 @@ (expopt2.res Ok) (expopt3.res Ok) (expopt3_ver1.res Ok) (expopt3_ver2.res Ok) (fields.res Ok) (fieldsmin.res Ok) (find_long.res Ok) (fix_flow_need.res Ok) (fn_todo.res Ok) (fnptr.res Ok) (fnret.res Ok) - (four.res Ok) (foura.res Ok) (fp.res Ok) (fun.res Ok) + (four.res Ok) (foura.res Ok) (fp.res Ok) (fsh.res Ok) (fun.res Ok) (gilles-question.res Ok) (gotobreak.res Ok) (hd.res Ok) (headers.res Ok) (hex.res Ok) (hil1.res Ok) (if.res Ok) (ifbr.res Ok) (ifdef1.res Ok) (ifdef2.res Ok) @@ -69,7 +70,7 @@ (labels_metastatement_ver1.res Ok) (local.res Ok) (localid.res Ok) (longconst.res Ok) (longlong.res Ok) (longlongint.res Ok) (loop.res Ok) (lvalue.res Ok) (macro.res Ok) (macro_int16.res Ok) (match_no_meta.res Ok) - (max.res Ok) + (max.res Ok) (memory.res (Pb "PROBLEM\n exn = Out of memory\n")) (metahex.res (Pb "INCORRECT:diff token: f VS }\nFile \"tests/metahex.c\", line 2, column 2, charpos = 15\n around = 'f', whole content = f(3);\nFile \"tests/metahex.res\", line 2, column 0, charpos = 13\n around = '}', whole content = }\n\n diff (result(<) vs expected_result(>)) = \n @@ -1,4 +1,2 @@\n int main() {\n - f(3);\n - g(0x03);\n }\n")) @@ -81,14 +82,18 @@ "PROBLEM\n exn = Failure(\"minus: parse error: \\n = File \\\"tests/multi_func1.cocci\\\", line 12, column 2, charpos = 102\\n around = 'fn2', whole content = fn2(...) {\\n\")\n")) (multiplus.res Ok) (multitype.res Ok) (multitypedef.res Ok) (multivars.res Ok) (nest.res Ok) (nestone.res Ok) (nestseq.res Ok) - (neststruct.res Ok) (nl.res Ok) (nocast.res Ok) (not.res Ok) (noty.res Ok) - (null_type.res Ok) + (neststruct.res Ok) (nl.res Ok) (nocast.res Ok) (not.res Ok) (notest.res Ok) + (noty.res Ok) (null_type.res Ok) (oddifdef.res (Pb "INCORRECT:diff token: #else\n VS x\nFile , line 10, column 0, charpos = 114\n around = '#else\n', whole content = #else\nFile \"tests/oddifdef.res\", line 10, column 2, charpos = 116\n around = 'x', whole content = x = 0;\n\n diff (result(<) vs expected_result(>)) = \n @@ -7,8 +7,9 @@\n a = 5;\n \n #ifdef FOO\n + x = 0;\n #else\n - \n + x = 0;\n #endif\n }\n \n @@ -21,8 +22,9 @@\n a = 3;\n \n #ifdef FOO\n + x = 0;\n #else\n - \n + x = 0;\n #endif\n }\n \n @@ -35,7 +37,8 @@\n #endif\n \n #ifdef FOO\n + x = 0;\n #else\n - \n + x = 0;\n #endif\n }\n")) (of.res Ok) (oneline.res Ok) (opt.res Ok) (optional_qualifier.res Ok) - (optional_storage.res Ok) (orexp.res Ok) (param.res Ok) (param_end.res Ok) - (param_ver1.res Ok) (parameters_dots.res Ok) (partial.res Ok) + (optional_storage.res Ok) (orexp.res Ok) + (overshoot.res + (Pb + "INCORRECT:diff token: b VS g\nFile , line 4, column 2, charpos = 38\n around = 'b', whole content = b();\nFile \"tests/overshoot.res\", line 3, column 14, charpos = 35\n around = 'g', whole content = g();g();g();g();\n\n diff (result(<) vs expected_result(>)) = \n @@ -1,6 +1,6 @@\n int main () {\n a();\n - g();g();g();\n + g();g();g();g();\n b();\n q();\n }\n")) + (param.res Ok) (param_end.res Ok) (param_ver1.res Ok) + (parameters_dots.res Ok) (partial.res Ok) (pb_distribute_type.res (Pb "INCORRECT:PB parsing only in generated-file\n diff (result(<) vs expected_result(>)) = \n @@ -5,11 +5,11 @@\n \n \n int foo() {\n - int * *x;\n + int **x;\n return 0;\n }\n \n int foo() {\n - int[45] *x;\n + int (*x)[45];\n return 0;\n }\n")) @@ -106,7 +111,7 @@ (Pb "INCORRECT:not same number of entities (func, decl, ...)\n diff (result(<) vs expected_result(>)) = \n @@ -1,10 +1,3 @@\n -\n - .ack = mpuio_ack_irq,\n - .mask = mpuio_mask_irq,\n - .unmask = mpuio_unmask_irq\n -\n - .b = 15,\n -\n int hello ( String input )\n {\n String input = input.lowercase();\n")) (replace_typedef.res Ok) (reserved.res Ok) (retmacro.res Ok) (rets.res Ok) - (return.res Ok) (return_implicit.res Ok) (same_expr.res Ok) + (return.res Ok) (return_implicit.res Ok) (retval.res Ok) (same_expr.res Ok) (scope_problem.res (Pb "INCORRECT:diff token: } VS a\nFile , line 6, column 2, charpos = 44\n around = '}', whole content = }\nFile \"tests/scope_problem.res\", line 7, column 4, charpos = 49\n around = 'a', whole content = a = 2;\n\n diff (result(<) vs expected_result(>)) = \n @@ -1,8 +1,10 @@\n void main(int i) {\n \n \n +\n if(1) {\n int a;\n + a = 2;\n }\n \n \n")) @@ -128,7 +133,7 @@ (three_types.res Ok) (threea.res Ok) (top.res Ok) (topdec.res Ok) (topdec_ver1.res Ok) (topdec_ver2.res Ok) (toplevel_macrostmt.res Ok) (toplevel_struct.res Ok) (tup.res Ok) (twoproto.res Ok) (ty.res Ok) - (ty1.res Ok) (ty_tyexp.res Ok) (type.res Ok) (type1.res Ok) + (ty1.res Ok) (ty_tyexp.res Ok) (tydisj.res Ok) (type.res Ok) (type1.res Ok) (type_annotated.res Ok) (type_ver1.res Ok) (type_ver2.res (Pb diff --git a/tests/SCORE_expected.sexp.save b/tests/SCORE_expected.sexp.save index 4e37271..b1225a1 100644 --- a/tests/SCORE_expected.sexp.save +++ b/tests/SCORE_expected.sexp.save @@ -8,7 +8,7 @@ (bad_ptr_print.res Ok) (bad_typedef.res Ok) (badexp.res Ok) (badpos.res (Pb - "PROBLEM\n exn = Failure(\"rule starting on line 1: already tagged token:\\nFile \\\"tests/badpos.c\\\", line 5, column 30, charpos = 139\\n around = 'reg_ptr', whole content = \\t (int) -(((struct pt_regs *) reg_ptr)->orig_eax + 2));\")\n")) + "PROBLEM\n exn = Failure(\"rule starting on line 1: already tagged token:\\nC code context\\nFile \\\"tests/badpos.c\\\", line 5, column 30, charpos = 139\\n around = 'reg_ptr', whole content = \\t (int) -(((struct pt_regs *) reg_ptr)->orig_eax + 2));\")\n")) (badtypedef.res Ok) (badzero.res Ok) (ben.res Ok) (bitfield.res Ok) (braces.res Ok) (break.res Ok) (bug1.res Ok) (bugloop.res @@ -45,9 +45,7 @@ "PROBLEM\n exn = Lexer_cocci.Lexical(\"unrecognised symbol, in token rule: #\")\n")) (ifdef4.res Ok) (ifdef5.res Ok) (ifdef6.res Ok) (ifdef6a.res Ok) (ifdefmeta.res Ok) (ifdefmeta1.res Ok) (ifdefmeta2.res Ok) - (ifdefmeta3.res - (Pb - "INCORRECT:diff token: g VS #ifdef ONE\nFile , line 4, column 2, charpos = 32\n around = 'g', whole content = g();\nFile \"tests/ifdefmeta3.res\", line 4, column 0, charpos = 30\n around = '#ifdef ONE', whole content = #ifdef ONE\n\n diff (result(<) vs expected_result(>)) = \n @@ -1,5 +1,7 @@\n int main () {\n f();\n xxx();\n +#ifdef ONE\n +#endif\n g();\n }\n")) + (ifdefmeta3.res Ok) (ifdefmeta4.res (Pb "PROBLEM\n exn = Unix.Unix_error(20, \"stat\", \"tests/ifdefmeta4.cocci\")\n")) diff --git a/tests/a.c b/tests/a.c new file mode 100644 index 0000000..9d24360 --- /dev/null +++ b/tests/a.c @@ -0,0 +1,9 @@ +int main () { + int a; + f(a); + h(a); + { int a; + g(a); + r(a); + } +} diff --git a/tests/a.cocci b/tests/a.cocci new file mode 100644 index 0000000..3710e79 --- /dev/null +++ b/tests/a.cocci @@ -0,0 +1,16 @@ +@@ +expression a; +@@ + +-f(a); + ... +-g(a); + +@@ +idexpression int a; +@@ + +-h(a); + ... +-r(a); + diff --git a/tests/a.res b/tests/a.res new file mode 100644 index 0000000..9d24360 --- /dev/null +++ b/tests/a.res @@ -0,0 +1,9 @@ +int main () { + int a; + f(a); + h(a); + { int a; + g(a); + r(a); + } +} diff --git a/tests/fsh.c b/tests/fsh.c new file mode 100644 index 0000000..18e2e4d --- /dev/null +++ b/tests/fsh.c @@ -0,0 +1,4 @@ +int main () { + f(c); + g(); +} diff --git a/tests/fsh.cocci b/tests/fsh.cocci new file mode 100644 index 0000000..c73e7cd --- /dev/null +++ b/tests/fsh.cocci @@ -0,0 +1,12 @@ +@r@ +identifier x; +@@ + +f(x); + +@@ +fresh identifier a = "foo-" ## r.x; +@@ + +- g(); ++ g(a); diff --git a/tests/fsh.res b/tests/fsh.res new file mode 100644 index 0000000..82bca52 --- /dev/null +++ b/tests/fsh.res @@ -0,0 +1,4 @@ +int main () { + f(c); + g(foo-c); +} diff --git a/tests/macro_int16.res b/tests/macro_int16.res index ded0150..49cb796 100644 --- a/tests/macro_int16.res +++ b/tests/macro_int16.res @@ -4,6 +4,6 @@ void main(void) { INT16 a, b, c; - c = b - a; + c = a - b; } diff --git a/tests/memory.c b/tests/memory.c new file mode 100644 index 0000000..420c400 --- /dev/null +++ b/tests/memory.c @@ -0,0 +1,7 @@ +#define BAD_MAGIC(q,m) 0 + +int __queue_add(Queue_t *queue, Scsi_Cmnd *SCpnt, int head) +{ + if (BAD_MAGIC(1,12)) + BUG(); +} diff --git a/tests/memory.cocci b/tests/memory.cocci new file mode 100644 index 0000000..18167ae --- /dev/null +++ b/tests/memory.cocci @@ -0,0 +1,4 @@ +@@ expression E; @@ + +- if (E) { BUG(); } ++ BUG_ON(E); diff --git a/tests/memory.res b/tests/memory.res new file mode 100644 index 0000000..18461b5 --- /dev/null +++ b/tests/memory.res @@ -0,0 +1,6 @@ +#define BAD_MAGIC(q,m) 0 + +int __queue_add(Queue_t *queue, Scsi_Cmnd *SCpnt, int head) +{ + BUG_ON (BAD_MAGIC(1,12)); +} diff --git a/tests/notest.c b/tests/notest.c new file mode 100644 index 0000000..8bb979f --- /dev/null +++ b/tests/notest.c @@ -0,0 +1,6 @@ +int main() { + struct foo *x; + x = FN(); + if (!x) return; + return; +} diff --git a/tests/notest.cocci b/tests/notest.cocci new file mode 100644 index 0000000..86ff5bd --- /dev/null +++ b/tests/notest.cocci @@ -0,0 +1,9 @@ +@n2@ +expression x; +@@ + +x = FN(...) +... when strict + when any +- !x ++ 12 diff --git a/tests/notest.res b/tests/notest.res new file mode 100644 index 0000000..1a62ac4 --- /dev/null +++ b/tests/notest.res @@ -0,0 +1,6 @@ +int main() { + struct foo *x; + x = FN(); + if (12) return; + return; +} diff --git a/tests/overshoot.c b/tests/overshoot.c new file mode 100644 index 0000000..fee0530 --- /dev/null +++ b/tests/overshoot.c @@ -0,0 +1,9 @@ +int main () { + a(); + s(); + d(); + f(); + b(); + b(); + q(); +} diff --git a/tests/overshoot.cocci b/tests/overshoot.cocci new file mode 100644 index 0000000..169e209 --- /dev/null +++ b/tests/overshoot.cocci @@ -0,0 +1,31 @@ +@aaa@ +identifier f; +@@ + +a(); +<... +-ff(); ++g(); +...> +b(); + + +@bbb@ +identifier f; +@@ + +a(); +<... +-f(); ++g(); +...> +b(); + + +@xxx@ +identifier f; +@@ + +a(); +... +-b(); diff --git a/tests/overshoot.res b/tests/overshoot.res new file mode 100644 index 0000000..03a5739 --- /dev/null +++ b/tests/overshoot.res @@ -0,0 +1,6 @@ +int main () { + a(); + g();g();g();g(); + b(); + q(); +} diff --git a/tests/retval.c b/tests/retval.c new file mode 100644 index 0000000..f538915 --- /dev/null +++ b/tests/retval.c @@ -0,0 +1,24 @@ +int main () { + if (retval1) { + if (retval2 != -ENODEV) { + foo(); + return 3; + } + bar(); + } + return 6; +} + +int second () { + if (retval1) { + if (retval2 != -ENODEV) { + foo(); + goto out; + } + bar(); + } +out: + return 6; +} + + diff --git a/tests/retval.cocci b/tests/retval.cocci new file mode 100644 index 0000000..82d3c97 --- /dev/null +++ b/tests/retval.cocci @@ -0,0 +1,10 @@ +@@ +@@ + + if (retval1) { +- if (retval2 != -ENODEV) { + ... + return ...; +- } +- ... + } diff --git a/tests/retval.res b/tests/retval.res new file mode 100644 index 0000000..01a576f --- /dev/null +++ b/tests/retval.res @@ -0,0 +1,18 @@ +int main () { + if (retval1) { + foo(); + return 3; + } + return 6; +} + +int second () { + if (retval1) { + foo(); + goto out; + } +out: + return 6; +} + + diff --git a/tests/struct.cocci b/tests/struct.cocci index 4c0679b..79e976a 100644 --- a/tests/struct.cocci +++ b/tests/struct.cocci @@ -1,5 +1,5 @@ @ r1 @ -identifier X, Y; +identifier X,Y; @@ struct foo { diff --git a/tests/tydisj.c b/tests/tydisj.c new file mode 100644 index 0000000..3178b22 --- /dev/null +++ b/tests/tydisj.c @@ -0,0 +1,2 @@ +int64_t foo() { int64_t a; int i; return i << 20; } + diff --git a/tests/tydisj.cocci b/tests/tydisj.cocci new file mode 100644 index 0000000..0ddd9d6 --- /dev/null +++ b/tests/tydisj.cocci @@ -0,0 +1,25 @@ +@func@ +typedef int64_t; +typedef uint64_t; +identifier f; +position p; +expression E; +type T; +{int,unsigned,long,unsigned long} i; +@@ + +( +int64_t +| +uint64_t +) f(...) { +( +int64_t +| +uint64_t +) a; + ... ++ xxx(); + return <+... i <<@p E ...+>; + ... +} diff --git a/tests/tydisj.res b/tests/tydisj.res new file mode 100644 index 0000000..4b32673 --- /dev/null +++ b/tests/tydisj.res @@ -0,0 +1,2 @@ +int64_t foo() { int64_t a; int i; xxx(); return i << 20; } + diff --git a/tools/Makefile b/tools/Makefile index cd6da6a..ba98ec0 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -1,6 +1,6 @@ -include ../Makefile.config -PROGS=gitgrep split_patch extract_c_and_res #generate_dependencies +PROGS=spp gitgrep split_patch extract_c_and_res #generate_dependencies all: $(SUBDIRS) $(PROGS) @@ -29,7 +29,7 @@ install_bridge: bridge .PHONY: $(SUBDIRS) -SYSLIBS = str.cma unix.cma +SYSLIBS = str.cma unix.cma bigarray.cma INCLUDE=-I ../commons -I ../extra -I ../parsing_c LIBS=../commons/commons.cma ../globals/globals.cma \ @@ -43,6 +43,10 @@ OCAMLYACC=ocamlyacc -v OCAMLDEP=ocamldep$(OPTBIN) $(INCLUDE) OCAMLMKTOP=ocamlmktop -g -custom $(INCLUDE) +spp: spp.ml + $(OCAMLC) -o $@ $(SYSLIBS) $(INCLUDE) $(LIBS) $+ +# ocamlc -I ../commons/ -o spp str.cma unix.cma bigarray.cma ../commons/common.cmo spp.ml + split_patch: split_patch.cmo $(OCAMLC) -o $@ $(SYSLIBS) $(INCLUDE) $(LIBS) $+ diff --git a/tools/bridge.ml b/tools/bridge.ml index c3dcdfb..6e3037c 100644 --- a/tools/bridge.ml +++ b/tools/bridge.ml @@ -97,7 +97,7 @@ let collect_ors fp lines = | line::xs -> let (c,k,v) = split_or line in let ((c1,k1,v1),rest) = loop xs in - if c = c1 && k = k1 + if c = c1 && k = k1 && not (k = []) then if List.mem v v1 then ((c1,k1,v1),rest) diff --git a/tools/spp.ml b/tools/spp.ml new file mode 100644 index 0000000..1281fba --- /dev/null +++ b/tools/spp.ml @@ -0,0 +1,91 @@ +open Common + +exception WrongArguments + +(* could do via a List.filter because cpp flags are simple as it's + * "-I/usr/include" not ["-I";"/usr/include"] like in ocaml so no + * need to look multiple args. + *) +let rec cpp_flags_filter xs = + match xs with + | [] -> [] + | x::xs -> + (match x with + | s when x =~ "-D.*" -> + s::cpp_flags_filter xs + | s when s =~ "-I.*" -> + s::cpp_flags_filter xs + | _ -> + cpp_flags_filter xs + ) + +let is_compile_command xs = + List.mem "-c" xs + +let source_file xs = + xs +> List.filter (fun s -> s =~ ".*\\.c$") + +let rec fix_args args file = + match args with + [] -> [] + | hd::tail -> + if hd = file then + (hd^".i") :: tail + else + hd::fix_args tail file + +let rec get_outputfile args = + match args with + [] -> ([],"") + | hd::tail -> + if hd = "-o" then + let (hd',tail') = match tail with + hd'::tail' -> (hd',tail') + | _ -> raise WrongArguments + in + (tail', hd') + else + let (ntail, out) = get_outputfile tail in + (hd::ntail, out) + +let main () = + let args = List.tl (Array.to_list Sys.argv) in + (*args +> List.iter pr2;*) + if is_compile_command args + then begin + let file = source_file args in + (match file with + | [file] -> + let cpp_flags = cpp_flags_filter args in + let cmd2 = + (spf "cpp %s %s > %s.i" + (Common.join " " cpp_flags) + file + file) + in + pr2 cmd2; + let ret2 = Sys.command cmd2 in + if ret2 > 0 then exit ret2; + let sp_args = fix_args args file in + let cmd = "spatch " ^ (Common.join " " sp_args) in + pr2 cmd; + let ret = Sys.command cmd in + exit ret + + | [] -> failwith "could not find name of source file" + | x::y::xs -> failwith "multiple source files" + ); + end + else + begin + let (nargs, outfile) = get_outputfile args in + let cmd2 = + (spf "cat %s > %s" + (Common.join " " nargs) + outfile) + in + pr2 cmd2; + Sys.command cmd2 + end + +let _ = main () -- 2.20.1